Help us understand the problem. What is going on with this article?

Swiftでジェスチャーの追加

More than 3 years have passed since last update.

2014年に行われたWWDCで発表されて以来、話題になっているSwift言語を勉強してみたい!iOSアプリを開発してみたい!という方は増えてきていると思います。なので、Swift言語を使ったiOS開発をしてみたいという人向けに参考になる記事を書いていこうと思います!

今回は、iOSアプリ開発の中でも最も使われる基本的なものの一つジェスチャーについて解説していきます。

こちらも参考に

ジェスチャーとは?

ジェスチャーとはスマートフォンで画像を拡大したり、ゲームでアイテムをタップするときの指の動きのことです。それぞれの指の動きに対して、対応するジェスチャーがありそれぞれに対応する処理を設定することでUIをリッチな動きにすることができます。

ジェスチャーの種類

iOSには対応するジェスチャーにいくつか種類があります。それぞれのジェスチャーを使い分けることで、様々な処理やアニメーションを表現することができます。

  • Tap
  • Pan
  • Pinch
  • Rotate
  • Swipe
  • LongPress

ジェスチャーの生成

ビューをジェスチャーで操作するためには、ジェスチャーを生成しビューに追加する必要があります。例として、タップジェスチャーを生成します。

ジェスチャー生成
- var tapGestureRecognizer = UITapGestureRecognizer(target: aTarget, action: aSelector)

ジェスチャー処理

ジェスチャーによって何か処理を行いたい場合、その処理はメソッドとして定義する必要があります。定義したメソッドは対応するジェスチャーにセットすることで、ジェスチャーイベントが発生した時に処理されるようになります。

ここでは、"tapGesture"というメソッドを定義します。

func tapGesture(gestureRecognizer: UITapGestureRecognizer){
    // タップviewの色を変える (Red <=> Blue)
    if(view.backgroundColor  == .redColor()) {
         view.backgroundColor == .blueColor()
    }
    else {
         view.backgroundColor == .redColor()
    }
}

メソッドを定義したらSelectorクラスを使って呼び出すメソッドを指定し、ジェスチャー生成時に設定します。

var aSelector = Selector("tapGesture:")
var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: aSelector)

ジェスチャーの追加・削除

ジェスチャーを利用するためには、ジェスチャー判定したいビューに対してRecognizerを追加してあげます。追加するためのメソッドは次の通りです。逆に、ジェスチャーイベントが不要になった際には削除することも可能です。

追加・削除をするには次のメソッドを使用します。

ジェスチャーの追加:view.addGestureRecognizer(gestureRecognizer)
ジェスチャーの削除:view.removeGestureRecognizer(gestureRecognizer)

全体的にこうなります。

ViewController.swift
override func viewDidLoad() {
    super.viewDidLoad()

    self.view.backgroundColor = .whiteColor()

    // ジェスチャーの生成
    var aSelector = Selector("tapGesture:")
    var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: aSelector))

    // ビューの生成
    var view1 = UIView(frame: CGRectMake(30, 30, 100, 100))
    view1.backgroundColor = .redColor()
    // ジェスチャーの追加
    view1.addGestureRecognizer(tapGestureRecognizer) 
    self.view.addSubview(view1)
}

// ジェスチャーイベント処理
func tapGesture(gestureRecognizer: UITapGestureRecognizer){
    // タップviewの色を変える (Red <=> Blue)
    if(view.backgroundColor  == .redColor()) {
         view.backgroundColor == .blueColor()
    }
    else {
         view.backgroundColor == .redColor()
    }
}
h_nagami
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away