Swiftで遊ぼう! on Hatena

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

Swiftで遊ぼう! - 686 - Interface Builder, FaceView controller, Gestures, Multiple MVCs 6

講義5はジェスチャーの実装で終了なので、さらっと流します。

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

昨日のピンチジェスチャーはfaceViewが保持しているプロパティ、scaleをfaceViewが持つメソッド、changeScale()を使って制御しました。

次はModelが持っているプロパティを制御します。しかし、Modelにはノータッチで制御しなければならないので、targetもactionもFaceViewControllerにコードします。

f:id:yataiblue:20160524175852j:plainSwipeジェスチャーの実装

ピンチジェスチャーと同様にfaceViewプロパティのプロパティ・オブザーバーに加えます。

@IBOutlet weak var faceView: FaceView! {
    didSet {
        faceView.addGestureRecognizer(UIPinchGestureRecognizer(
            target: faceView, 
            action: #selector(faceView.changeScale(_:))
        ))
        let happierSwipeGestureRecognizer = 
            UISwipeGestureRecognizer(
                target: self, 
                action: #selector(self.increaseHappiness)
        )
        happierSwipeGestureRecognizer.direction = .Up
        faceView.addGestureRecognizer(happierSwipeGestureRecognizer)
        upDateUI()
    }
}

メソッドも同様にFaceViewControllerにコードします。

func increaseHappiness() {
    expression.mouth = expression.mouth.happierMouth()
}

たったこれだけです。ここでenumメソッドを使ってrawValueを辿ってexpression.mouthのレベルを変更しています。これでスワイプ・アップが実装されたので同様にスワイプ・ダウンを実装します。

@IBOutlet weak var faceView: FaceView! {
    didSet {
        faceView.addGestureRecognizer(UIPinchGestureRecognizer(
            target: faceView, 
            action: #selector(faceView.changeScale(_:))
        ))
        let happierSwipeGestureRecognizer = 
            UISwipeGestureRecognizer(
                target: self, 
                action: #selector(self.increaseHappiness)
        )
        happierSwipeGestureRecognizer.direction = .Up
        faceView.addGestureRecognizer(happierSwipeGestureRecognizer)
        let sadderSwipeGestureRecognizer = 
            UISwipeGestureRecognizer(
                target: self, 
                action: #selector(self.decreaseHappiness) 
        )
        sadderSwipeGestureRecognizer.direction = .Down
        faceView.addGestureRecognizer(sadderSwipeGestureRecognizer)
        upDateUI()
    }
}

そして最後にメソッドを加えます。

func decreaseHappiness() {
    expression.mouth = expression.mouth.sadderMouth()
}

これでコードによるUIGestureRecognizerの実装法を学びました。

今日はここまで。