読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 698 - Multithreading and Text Field 2

2016年6月6日:この記事を書いて数日後に2年前の記事と全く同じだった事に気がつきました(^_^;) Swiftで遊ぼう! - 301 - Scroll Viewのデリゲート・メソッド - Swiftで遊ぼう! on Hatena


講義8の前半はScrollViewの続きです。デモプロジェクト「Cassini」に取り組んでいますが、今日になってやっとProtocolとDelegationの実装練習です。

Developing iOS 9 Apps with Swift - Free Course by Stanford on iTunes U

プロトコールとデリゲーション、今まで散々苦しんで理解したので、今回はサラリと済ませます。

ScrollViewのズームイン、ズームアウトは、ScrollViewDelegationプロトコールのデリゲーションメソッドとして用意されているので、これに準拠させればいいんです。

まずプロトコール型をプロパティとして持つ必要があります。どこでプロパティを持つのか?

今までならためらいも無くviewDIdLoad()メソッドに加えていたでしょう。しかし、ViewControllerライフスタイルを勉強した今は、Outletが作られるタイミングの方がいいんだろうなって思えます。ポール先生もそうしています。

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

するとエラーがでます。このdelegateは「ScrollViewDelegate」タイプなのにUIVewControllerタイプのselfを指定したからです。ここでプロトコールに準拠させてやればいいんです。

import UIKit

class ImageViewController: UIViewController, UIScrollViewDelegate {
 
....

ScrollViewDelegateプロトコールに用意されているメソッドに必須メソッドは用意されていないため、この時点でエラー表示はありません。ということは何も機能が追加されません。

ズームに関するメソッド加える必要があります。

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

これでズーム機能が実装されたはずですが、このままではズームのサイズ、ミニマム値もマキシマム値も1.0で変化がないので何も起こらないようです。ということで値を変更します。

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

これでズームインできるようになりました。大きすぎて判断できなかったイメージを小さくできました。

f:id:yataiblue:20160606144246j:plain

今日はこれだけ。