UITapGestureRecognizerでタップを認識し、アニメーションを行う！

# UITapGestureRecognizerとは
タップを解釈する個別のジェスチャ認識機能。

https://developer.apple.com/documentation/uikit/uitapgesturerecognizer

# UITapGestureRecognizerでタップを認識する方法
imageViewをタップすると、UITapGestureRecognizerでタップを認識し、下記のように浮遊感があるアニメーションを実行するサンプルアプリを作ってみます！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/86d4bbaa-2606-f7ab-858a-d78d31353e02.gif" width=300>

## TapGestureRecognizer追加
TapGestureRecognizer追加し、ドラッグし、ImageViewの上に持っていくことで、接続できる！
![906422d1f876d7543220fc7a6a7a848e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/f285de50-a00a-cfef-dd90-65a271732293.png)
 storyboardとViewControllerファイルを接続する！
 ![4e260bbc992441ad96cf1d3abee0d275.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/2f84df4b-4e39-88d2-0236-361ac39a9d2d.png)
**※storyboardでタップを検出するには、下記にチェックを入れる必要がある！**
![b8a36465cdb419d74f5e2531de207e7c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3090887/e50a6752-c1cd-e287-1a1c-60a4f331778c.png)
コードを見ていこう！
```Swift:ViewController.swift
import UIKit
import SpriteKit

class ViewController: UIViewController {

    @IBOutlet weak var skView: SKView!

    @IBOutlet weak var imageView: UIImageView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Sceneを追加
        setupSnow()
    }

    @IBAction func tapImage(_ sender: Any) {
        print("タップしたよ！")

        self.imageView.center = self.view.center
        UIView.animate(withDuration: 1.0, delay: 0.0, options: .autoreverse, animations: {
            self.imageView.center.y += 100.0
        }, completion: nil)
    }
//🟥SpriteKit
    func setupSnow() {
        let scene = SKScene(size: self.view.frame.size)
        let path = Bundle.main.path(forResource: "Snow", ofType: "sks")
        let particle = NSKeyedUnarchiver.unarchiveObject(withFile: path!) as! SKEmitterNode
        particle.name = "Snow"
        particle.position = CGPointMake(self.view.frame.width / 2, self.view.frame.height)
        scene.addChild(particle)
        self.skView!.presentScene(scene)
        self.view.addSubview(self.skView!)
    }
}
```
## UIKitアニメーション

```Swift
self.imageView.center = self.view.center
        UIView.animate(withDuration: 1.0, delay: 0.0, options: .autoreverse, animations: {
            self.imageView.center.y += 100.0
        }, completion: nil)
```

`self.imageView.center = self.view.center`imageViewをViewの中央に表示する！

https://developer.apple.com/documentation/uikit/uiview/1622627-center

**UIView.animateメソッド**
`animate(withDuration:animations:completion:)`
指定された期間および完了ハンドラーを使用して、1 つ以上のビューへの変更をアニメーション化する！

https://developer.apple.com/documentation/uikit/uiview/1622515-animate

`duration`はアニメーション時間とアニメーションの動くスピードに関わる！
`delay`は開始までの遅延時間！
`options`ではアニメーション中に使用するタイミング曲線の種類やアニメーションの逆再生などを指定できる！
`animations`クロージャの中でアニメーションしたいUIViewクラスのプロパティの値を変更する！
今回は、ImageViewのy軸の値を変更し、上に100移動するようなアニメーションになっている！
`completion`クロージャはアニメーションが完了したタイミングで呼ばれるクロージャ！



🟥雪を降らすSpriteKitについて知りたい方は過去の記事を参考にしてみてください！

https://qiita.com/hinakko/items/22836a1fed2da932996c


# 参考文献

https://yuu.1000quu.com/attention_when_use_uigesturerecognizer

https://yuu.1000quu.com/use_storyboard_and_ui_tap_gesture_recognizer

https://hajihaji-lemon.com/swift/uitapgesturerecognizer/

https://qiita.com/hachinobu/items/57d4c305c907805b4a53