Swiftで遊ぼう! - 698 - Multithreading and Text Field 2
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.3で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
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 } }
これでズームインできるようになりました。大きすぎて判断できなかったイメージを小さくできました。
今日はこれだけ。