Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 301 - Scroll Viewのデリゲート・メソッド

2016年6月6日:加筆していません。2年後のiOS9バージョンの講義と全く同じでした(^_^;) 

実はScroll Viewの学習で最も重要なトピックは、iOS API利用におけるデリゲート・メソッドの取り扱いです。

yataiblue.hatenablog.com

基本的なデリゲーションの説明は上記でしていますが、iOS API利用にこの考え方は欠かせません。ここで6つのステップを説明していますが、API利用のデリゲートはステップ4、5そして6を実装するだけです。

プロトコール利用の場合、必ずデリゲートされているメソッドを全て実装しないとランタイムエラーに陥りますが、API利用の場合、すべてオプショナル扱いになるので使いたいメソッドだけ実装したらいいようです。

Scroll Viewには全部で12個のデリゲーションメソッドがありますが、ZoomingのメソッドのviewForZoomingInScrollView()を実装してみます*1

先ず、Scrol Viewでデリゲートさせたいメソッドを含んだプロトコールをImageViewController宣言をさせます。これはステップ4になります。

class ImageViewController: UIViewController, UIScrollViewDelegate {
...

次はステップ5で、scrollViewのdelegateプロパティにImageViewController自身を持たせます。ImageViewController上のscrollView宣言部分でdelegate先を指定します。たぶん初心者には分かりにくい説明だと思いますが、これは慣れるしかないでしょう。

@IBOutlet weak var scrollView: UIScrollView! {
    didSet {
        scrollView.contentSize = imageView.frame.size
        scrollView.delegate = self
        scrollView.minimumZoomScale = 0.03
        scrollView.maximumZoomScale = 1.0
    }
}

そして最後のステップ6はメソッドの実装です。

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return imageView
}

たったこれだけで画像のズーミングができるようになりました。

f:id:yataiblue:20150504113359j:plain

今日はデリゲーションの復習でした。

*1:このメソッドは、minimumZoomScaleとmaximumZoomScaleを設定しないと動かないので同時に設定します。