私はプログラミングとObjective Cを初めて使用します。空白の画面と1分間続くタイマーを備えたアプリを作成する方法を知りたいと思っていました。あなたはできるだけ早く、できるだけ長くタップすることを意図しています。 UITapGestureRecognizer
をコードに実装する方法を知りたいと思っていました。
これは、クラスにジェスチャレコグナイザーを実装する方法に関するステップバイステップガイドです。
クラスをUIGestureRecognizerDelegate
プロトコルに適合させます。
ジェスチャー認識をインスタンス化します。たとえば、UITapGestureRecognizer
をインスタンス化するには、次のようにします。
UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapFrom:)];
ここで、アクションはジェスチャーを処理するセレクターです。ここで、セレクターhandleTapFromは次のようになります。
- (void) handleTapFrom: (UITapGestureRecognizer *)recognizer
{
//Code to handle the gesture
}
セレクターへの引数はジェスチャレコグナイザーです。このジェスチャレコグナイザーを使用してそのプロパティにアクセスできます。たとえば、UIGestureRecognizerStateBegan
、UIGestureRecognizerStateEnded
などのジェスチャレコグナイザーの状態を見つけることができます。
インスタンス化されたジェスチャ認識エンジンで目的のプロパティを設定します。たとえば、UITapGestureRecognizer
の場合、プロパティnumberOfTapsRequired
およびnumberOfTouchesRequired
を設定できます。
ジェスチャを検出するビューにジェスチャレコグナイザを追加します。サンプルコード(参照用にこのコードを共有します)では、次のコード行を使用してジェスチャレコグナイザーをimageViewに追加します。
[self.imageView addGestureRecognizer:tapGestureRecognizer];
ジェスチャレコグナイザをビューに追加した後、ジェスチャレコグナイザのデリゲート、つまり、すべてのジェスチャレコグナイザのものを処理するクラスを設定します。サンプルコードでは、次のようになります。
tapGestureRecognizer.delegate = self;
注:ジェスチャー認識機能をビューに追加した後、デリゲートを割り当てます。そうでない場合、アクションメソッドは呼び出されません。
UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)];
[self.tableView addGestureRecognizer:gestureRecognizer];
self.tableView.userInteractionEnabled = YES;
gestureRecognizer.cancelsTouchesInView = NO; // this prevents the gesture recognizers to 'block' touches
Swiftの例:
import UIKit
class ViewController: UIViewController {
@IBOutlet var myUIImageView: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
let singleTap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "myUIImageViewTapped:")
singleTap.numberOfTapsRequired = 1
singleTap.numberOfTouchesRequired = 1
self.myUIImageView.addGestureRecognizer(singleTap)
self.myUIImageView.userInteractionEnabled = true
}
func myUIImageViewTapped(recognizer: UITapGestureRecognizer) {
if(recognizer.state == UIGestureRecognizerState.Ended){
println("myUIImageView has been tapped by the user.")
}
}
}
Swift(iOS9)およびSpriteKitで作業している場合は、次を試してください。
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
let singleTap = UITapGestureRecognizer(target:self, action:#selector(self.handleSingleTap:))
singleTap.numberOfTouchesRequired = 1
singleTap.addTarget(self, action:#selector(self.handleSingleTap))
view.userInteractionEnabled = true
view.addGestureRecognizer(singleTap)
}
//event handler
func handleSingleTap(sender:UITapGestureRecognizer){
print("tapped")
}
}