2015年

7月

13日

Swift マルチタッチイベント パン・回転  - Gesture Recognizer

マルチタッチイベント パン・回転

ユーザが画面タッチすると、マルチタッチイベントが発生して、「指が画面に触れている」「指が動いた」「指が画面から離された」「何本の指で同時にタッチしているか」ということを認識できるようになります。通常、アプリを作成する上で必ず制御しなければならないイベントとなっています。

ViewController.swift

import UIKit


class ViewController: UIViewController {


    @IBOutlet weak var ivTarget: UIImageView!

    

    override func viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        

        // 背景に画像をセットする

        let image:UIImage = UIImage(named:"bg01")!

        

        // 背景に画像をセットする

        self.view.backgroundColor = UIColor(patternImage:image)

        

        // タッチ / キーイベント許可設定 YES

        self.ivTarget.userInteractionEnabled = true

        

        // アニメーション開始

        animateStart(target: ivTarget, key: "Ani01")


    }


    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    // MARK: - Original Method


    // アニメーション回転開始

    func animateStart(#target: UIView, key: String!) {

    

        // アニメーション設定

        // (種類(Z軸回転))

        let ani:CABasicAnimation = CABasicAnimation(keyPath:"transform.rotation.z")

        

        // 設定(変化値(ラジアン角))

        ani.fromValue = 0.0 // 0°

        ani.toValue   = 2.0 * M_PI // 360°

    

        // (アニメーション時間())

        ani.duration = 2.0;

    

        // (繰返し回数)

        ani.repeatCount = HUGE // 無限

        // アニメーション開始

        target.layer.addAnimation(ani, forKey: key)

    }

    

    // MARK: - Action Method

    

    // ターゲットの移動(パンジェスチャー)

    @IBAction func panTarget(sender: UIPanGestureRecognizer) {

        

        // 移動処理

        sender.view!.center = sender.locationInView(view.superview)

    }

    

    // アニメーション停止

    func animateEnd(#target: UIView, key: String!) {

        

        // アニメーション削除

        target.layer.removeAnimationForKey(key)

    }

}

ポイント

#target

第1引数にも外部名をつけたい場合は、関数の場合と同様、明示的に書くか、内部名の前に#をつけます。


// アニメーション回転開始

func animateStart(#target: UIView, key: String!) {

  ........

}

GitHub GestureSwift

  

目 次