iOSジェスチャー操作UIGestureRecognizer
4745 ワード
一、概説
iPhoneでタッチパネルを扱う操作は、3.2以前に主にUIresponderによって行われていた以下の4つの方式が使用されています.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
しかし、このような方法で異なるジェスチャーの操作を選別するのは本当に面倒で、自分で異なるジェスチャーの分解を計算する必要があります.その後...
アップルはUIGestureRecognizerを使用する比較的簡単な方法を提供した.
二、UIGestureRecognizer
たとえば、viewDidLoad関数に次のように追加できます.
[cpp] view plain
copy
print ?
-(void) viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[self.view addGestureRecognizer:panRecognizer;//キー文、self.viewにジェスチャーモニタリングを追加する;
panRecognizer.maximumNumberOfTouches = 1;
panRecognizer.delegate = self;
[panRecognizer release];
}
他のジェスチャーの方法は似ています.
その核心はdelegateを設定し、ジェスチャーモニタリングが必要なview上でaddGestureRecognizerを使用して指定したジェスチャーモニタリングを追加することです.
もちろんdelegateであるviewのヘッダファイルにを付けておくことを忘れないでください.
しかし、いくつかのジェスチャーは関連していますが、どうすればいいですか?例えば、TapとLongPress、SwipeとPan、またはTapは一度にTapと2回です.
ジェスチャー認識は、クリックとダブルクリックなどの反発の原則を有し、ジェスチャーが認識されると、その後のジェスチャーは認識されません.したがって、関連ジェスチャーについては、プログラムの選別を助けるために特殊な処理を行い、現在のジェスチャーをどのジェスチャーにまとめるべきかを説明します.
たとえば、クリックとダブルクリックが併存する場合、処理を行わないと、クリックしたメッセージしか送信されません.ダブルクリックジェスチャーを認識するためには、ジェスチャーがダブルクリックであるか否かを判断し、ダブルクリックが無効な場合にクリックジェスチャーとして処理する特殊な処理ロジックが必要である.使用
[A r e q u i r e G e s t ureRecognizerToFail:B]関数は、Aジェスチャーが発生したときに、Aが条件を満たしていても、すぐにトリガーされず、指定されたジェスチャーBが失敗したと判断してからトリガーされることを指定します.
[cpp] view plain
copy
print ?
- (void)viewDidLoad
{
// をクリックします. Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];
//クリック数
singleTapRecognizer.numberOfTapsRequired = 1; // ツールバーの
//self.viewにジェスチャーモニタリングを追加します.
[self.view addGestureRecognizer:singleRecognizer];
// ダブルクリック Recognizer
UITapGestureRecognizer* doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];
doubleRecognizer.numberOfTapsRequired = 2; // ダブルクリック
//キー文、self.viewにジェスチャーモニタリングを追加します.
[self.view addGestureRecognizer:doubleRecognizer];
// キーこの行で、ジェスチャーをダブルクリックしてモニタリングに失敗したと判断すると、クリックジェスチャーの対応する操作がトリガーされます.
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}
-(void)SingleTap:(UITapGestureRecognizer*)recognizer
{
//クリック操作の処理
}
-(void)DoubleTap:(UITapGestureRecognizer*)recognizer
{
//ダブルクリック操作の処理
}
三、iPhone操作ジェスチャーの大まかな種類
1.クリック(Tap)クリックは最も一般的なジェスチャーとして使用され、コントロールまたはエントリ(通常のマウスクリックと同様)を押したり選択したりするために使用されます.
2.ドラッグ(Drag)ドラッグは、いくつかのページのスクロールとコントロールの移動機能を実現するために使用されます.
3.スライド(Flick)スライドは、ページをすばやくスクロールしたりページをめくったりする機能を実現します.
4.スイープジェスチャーリスト項目をアクティブにするためのショートカットメニュー
5.ダブルクリック(Double Tap)ダブルクリックで拡大して中央に画像を表示するか、元のサイズに戻します(現在拡大している場合).同時に、ダブルクリックすると、テキスト編集メニューがアクティブになります.
6.拡大(Pinch open)拡大ジェスチャーは、購読ソースを開き、文章の詳細を開く機能を実現します.写真を見るときは、拡大ジェスチャーで画像を拡大する機能も実現します.
7.縮小(Pinch close)縮小ジェスチャーは、拡大ジェスチャーとは逆の機能を実現することができる:サブスクリプションソースを閉じてトップページに終了し、文章を閉じてインデックスページに終了する.写真を見るときは、ジェスチャーを小さくして画像を縮小する機能も実現します.
8.長押し(Touch&Hold)私のサブスクリプションページで、長押しサブスクリプションソースは自動的に編集モードに入り、現在押しているサブスクリプションソースを指で選択します.この場合、サブスクリプションソースを直接ドラッグして位置を移動できます.テキストを長押しすると、拡大鏡補助機能が表示されます.放すと、編集メニューが表示されます.画像を長押しすると、編集メニューが表示されます.
9.Shake(Shake)ジェスチャーを揺らすと、取り消しとやり直しメニューが表示されます.主にユーザテキストに対して入力されます.
iPhoneでタッチパネルを扱う操作は、3.2以前に主にUIresponderによって行われていた以下の4つの方式が使用されています.
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
しかし、このような方法で異なるジェスチャーの操作を選別するのは本当に面倒で、自分で異なるジェスチャーの分解を計算する必要があります.その後...
アップルはUIGestureRecognizerを使用する比較的簡単な方法を提供した.
二、UIGestureRecognizer
UIGestureRecognizer
は抽象クラスで、主にそのサブクラスを使用しています(名前にはリンクが含まれています.ios Developer libraryにジャンプするには、公式ドキュメントを参照してください):UITapGestureRecognizer
UIPinchGestureRecognizer
UIRotationGestureRecognizer
UISwipeGestureRecognizer
UIPanGestureRecognizer
UILongPressGestureRecognizer
,
Tap(クリック)、Pinch(つまみ)、Rotation(回転)、Swipe(スライド、クイック移動、スライドの方向をモニタするためのもの)、Pan(ドラッグ、スロー移動、オフセットの量をモニタするためのもの)、およびLongPress(長押し).たとえば、viewDidLoad関数に次のように追加できます.
[cpp] view plain
copy
print ?
-(void) viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];
[self.view addGestureRecognizer:panRecognizer;//キー文、self.viewにジェスチャーモニタリングを追加する;
panRecognizer.maximumNumberOfTouches = 1;
panRecognizer.delegate = self;
[panRecognizer release];
}
他のジェスチャーの方法は似ています.
その核心はdelegateを設定し、ジェスチャーモニタリングが必要なview上でaddGestureRecognizerを使用して指定したジェスチャーモニタリングを追加することです.
もちろんdelegateであるviewのヘッダファイルにを付けておくことを忘れないでください.
しかし、いくつかのジェスチャーは関連していますが、どうすればいいですか?例えば、TapとLongPress、SwipeとPan、またはTapは一度にTapと2回です.
ジェスチャー認識は、クリックとダブルクリックなどの反発の原則を有し、ジェスチャーが認識されると、その後のジェスチャーは認識されません.したがって、関連ジェスチャーについては、プログラムの選別を助けるために特殊な処理を行い、現在のジェスチャーをどのジェスチャーにまとめるべきかを説明します.
たとえば、クリックとダブルクリックが併存する場合、処理を行わないと、クリックしたメッセージしか送信されません.ダブルクリックジェスチャーを認識するためには、ジェスチャーがダブルクリックであるか否かを判断し、ダブルクリックが無効な場合にクリックジェスチャーとして処理する特殊な処理ロジックが必要である.使用
[A r e q u i r e G e s t ureRecognizerToFail:B]関数は、Aジェスチャーが発生したときに、Aが条件を満たしていても、すぐにトリガーされず、指定されたジェスチャーBが失敗したと判断してからトリガーされることを指定します.
[cpp] view plain
copy
print ?
- (void)viewDidLoad
{
// をクリックします. Recognizer
UITapGestureRecognizer* singleRecognizer;
singleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(SingleTap:)];
//クリック数
singleTapRecognizer.numberOfTapsRequired = 1; // ツールバーの
//self.viewにジェスチャーモニタリングを追加します.
[self.view addGestureRecognizer:singleRecognizer];
// ダブルクリック Recognizer
UITapGestureRecognizer* doubleRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:selfaction:@selector(DoubleTap:)];
doubleRecognizer.numberOfTapsRequired = 2; // ダブルクリック
//キー文、self.viewにジェスチャーモニタリングを追加します.
[self.view addGestureRecognizer:doubleRecognizer];
// キーこの行で、ジェスチャーをダブルクリックしてモニタリングに失敗したと判断すると、クリックジェスチャーの対応する操作がトリガーされます.
[singleRecognizer requireGestureRecognizerToFail:doubleRecognizer];
[singleRecognizer release];
[doubleRecognizer release];
}
-(void)SingleTap:(UITapGestureRecognizer*)recognizer
{
//クリック操作の処理
}
-(void)DoubleTap:(UITapGestureRecognizer*)recognizer
{
//ダブルクリック操作の処理
}
三、iPhone操作ジェスチャーの大まかな種類
1.クリック(Tap)クリックは最も一般的なジェスチャーとして使用され、コントロールまたはエントリ(通常のマウスクリックと同様)を押したり選択したりするために使用されます.
2.ドラッグ(Drag)ドラッグは、いくつかのページのスクロールとコントロールの移動機能を実現するために使用されます.
3.スライド(Flick)スライドは、ページをすばやくスクロールしたりページをめくったりする機能を実現します.
4.スイープジェスチャーリスト項目をアクティブにするためのショートカットメニュー
5.ダブルクリック(Double Tap)ダブルクリックで拡大して中央に画像を表示するか、元のサイズに戻します(現在拡大している場合).同時に、ダブルクリックすると、テキスト編集メニューがアクティブになります.
6.拡大(Pinch open)拡大ジェスチャーは、購読ソースを開き、文章の詳細を開く機能を実現します.写真を見るときは、拡大ジェスチャーで画像を拡大する機能も実現します.
7.縮小(Pinch close)縮小ジェスチャーは、拡大ジェスチャーとは逆の機能を実現することができる:サブスクリプションソースを閉じてトップページに終了し、文章を閉じてインデックスページに終了する.写真を見るときは、ジェスチャーを小さくして画像を縮小する機能も実現します.
8.長押し(Touch&Hold)私のサブスクリプションページで、長押しサブスクリプションソースは自動的に編集モードに入り、現在押しているサブスクリプションソースを指で選択します.この場合、サブスクリプションソースを直接ドラッグして位置を移動できます.テキストを長押しすると、拡大鏡補助機能が表示されます.放すと、編集メニューが表示されます.画像を長押しすると、編集メニューが表示されます.
9.Shake(Shake)ジェスチャーを揺らすと、取り消しとやり直しメニューが表示されます.主にユーザテキストに対して入力されます.