Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 685 - Interface Builder, FaceView controller, Gestures, Multiple MVCs 5

講義5も内容豊富なんで先に進まないと...

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

今日はジェスチャーの復習です。ジェスチャーは何度も実装しているので簡単にいきましょう。

基本的にジェスチャーオブジェクトを作って、ジェスチャーが必要なViewオブジェクトに組み込みます。コードで実装する方法とストーリーボードを使って実装する方法。ジェスチャーで使用するメソッドを何処で扱うかなど、いくつかバリエーションがあるのでみていきます。

まず、コードで実装する方法。View(faceView)が持っている変数を、Viewが持つメソッドで変更する場合から見ていきます。

f:id:yataiblue:20160524160221j:plainPinchジェスチャーの実装

ジェスチャーの実装はFaceViewControllerにコードします。faceViewのアウトレットに組み込みますが、このやり方がベストだとは思いませんが、まだ習っていないことが多いのでプロパティのプロパティ・オブザーバーを使用するというのが今のところ望ましいということでしょう。

@IBOutlet weak var faceView: FaceView! {
    didSet {
        faceView.addGestureRecognizer(UIPinchGestureRecognizer(
                      target: faceView, 
                      action: #selector(faceView.changeScale(_:))
        ))
        upDateUI()
}

「target」と「action」の指定は重要です。当然ジェスチャーを組み込むtargetはfaceViewでメソッド(action)もfaceViewに定義します。
chageScaleはカスタムメソッドです。

次にFaceView.swiftを開いて次のパブリックなメソッドを加えます。

func changeScale(recognizer: UIPinchGestureRecognizer) {
    switch recognizer.state {
    case .Changed, .Ended:
        scale *= recognizer.scale
        recognizer.scale = 1.0
    default:
        break
    }
}

ポイントは、パラメーター名を「recognizer」にすること。「switch-case文」は公式みたいなものです。たったこれだけでピンチが実装できました。
f:id:yataiblue:20160524160312j:plain
今日はここまで。