Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 300 - Scroll Viewを組み込む

Swiftで遊ぼう!の古い記事-> Life-LOG OtherSide
質問 : Swiftで遊ぼう! - 252 - FaceViewプロジェクト始動 - Swiftで遊ぼう! on Hatena

ScrollViewを組み込む最も簡単な方法は当然Xcodeのオブジェクト・ライブラリからUIScrollViewをドラッグするやり方です。これでrootビューの上にジェネリックなスクロールビューが設置されたので、「Ctrl + ドラッグ」してImageViewControllerに引っぱって名前を「scrollView」にしてoutletを作ります。

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

こういう場合のプロパティ・オブザーバーは常套手段のようです。scrollViewが呼ばれる毎にコンテンツサイズを変化させるようにします。

このoutlet作成で、自動的にrootビュー上にscrollViewがインスタンス化されました。

次はViewControllerが呼ばれた時、viewDidLoad()内でイメージをscrollViewに加える必要があります。

override func viewDidLoad() {
    super.viewDidLoad()
    scrollView.addSubview(imageView)
}

もう一つ重要なステップがあります。imageViewのサイズでscrollView.contentSizeは変化しますが、imageViewはimageのサイズで変化します。

private var image: UIImage? {
    get {
        return imageView.image
    }
    set {
        imageView.image = newValue
        imageView.sizeToFit()
        scrollView?.contentSize = imageView.frame.size
    }
}

imageに新しい画像が書き換えられた時にcontentSizeが変化するようにします。この時のポイントは、imageの書き換えは画面の描画と関係なく内部的に発生するかもしれません。そういう場合はscrollViewが存在しないかもしれないので、オプショナル(?)で回避すると言うことです。

たったこれだけ変更を加えただけで、ラン(Cmd + R)してCassiniボタンを押してしばらく待つと(次のマルチスレッドで対処します)、大きな画像をスクロールできるようになりました。
f:id:yataiblue:20150504102452j:plain

感動です。次はズーミングですね。