いくつかの異なるジェスチャレスポンダーに応答するように設定したい画像があります。たとえば、画像の一部に触れた場合、1つのセレクターを呼び出し、別のセレクターを画像の別の部分に呼び出します。
UIGestureRecognizer
とクラスを調べましたUITapGestureRecognizer
が、それらに関連付ける画像ゾーンを指定する方法が見つかりませんでした。これはiOSで可能ですか?もしそうなら、どのクラスを使用することを検討する必要がありますか?
いくつかの異なるジェスチャレスポンダーに応答するように設定したい画像があります。たとえば、画像の一部に触れた場合、1つのセレクターを呼び出し、別のセレクターを画像の別の部分に呼び出します。
UIGestureRecognizer
とクラスを調べましたUITapGestureRecognizer
が、それらに関連付ける画像ゾーンを指定する方法が見つかりませんでした。これはiOSで可能ですか?もしそうなら、どのクラスを使用することを検討する必要がありますか?
最も簡単な解決策は、画像の上に非表示のビューを配置し、ジェスチャーレコグナイザーを配置することです。
それが不可能な場合は、ジェスチャレコグナイザーのタップハンドラーでlocationInViewを確認し、ユーザーがタップした場所に基づいて何をしたいかを理解する必要があります。
プロパティを使用しlocationInView:
てタップが発生した場所を特定し、条件付きでメソッドを呼び出します。CGRect
これを行うには、ヒットエリアに対応するいくつかのを設定します。次に、このCGRectContainsPoint()
関数を使用して、タップがヒット領域の1つに着地したかどうかを判別します。
タップジェスチャレコグナイザーアクションは次のようになります。
- (void)tapGestureRecognized:(UIGestureRecognizer *)recognizer
{
// Specify some CGRects that will be hit areas
CGRect firstHitArea = CGRectMake(10.0f, 10.0f, 44.0f, 44.0f);
CGRect secondHitArea = CGRectMake(64.0f, 10.0f, 44.0f, 44.0f)
// Get the location of the touch in the view's coordinate space
CGPoint touchLocation = [recognizer locationInView:recognizer.view];
if (CGRectContainsPoint(firstHitArea, touchLocation))
{
[self firstMethod];
}
else if (CGRectContainsPoint(secondHitArea, touchLocation))
{
[self secondMethod];
}
}