0

タップジェスチャレコグナイザーを使用して、小さなサブビューを別の UIView 内にラベル付きで配置しています。ユーザーがビューをタップすると、ユーザーがタップしたコンポーネントのタイトルがラベルに取り込まれ、サブビューはタップ位置の中央に配置されます。

ジェスチャ認識エンジンの初期位置が、ストーリーボードで定義されているサブビューの中心と一致することを確認する必要があります(ユーザーがビューをタップする前)が、このポイントを通過する方法を見つけることができないようですジェスチャーレコグナイザーに。 ビュー内の特定のポイントでタップ ジェスチャ レコグナイザーを初期化する方法はありますか?

4

2 に答える 2

1

あなたが何を求めているのかよくわかりません。ジェスチャー認識には「開始点」がありません。これらは、特定のビュー内のタッチに対してさまざまなタッチ タイプを受け取り、それぞれを一意に処理できるようにします。

ローディングのタッチをシミュレートしたい場合 (あなたがしようとしているのはそのように聞こえるかもしれません)、コードを次のように再編成します。

- (void)viewDidLoad
{
     //simulate touch here
     [self touchedAtLocation:CGPointMake(100, 100)];
}

//Your delegate method
- (void)handleTap:(UITapGestureRecogizer *)recognizer
{
    [self touchedAtLocation:[recognizer locationInView:self.view]];
}

- (void)touchedAtLocation:(CGPoint)location
{
    //perform action based on location of touch
}

この例では、100,100 でタッチがあった場合にどうなるかに基づいて、サブビューの位置/データを開始できます。

注: ジェスチャ レコグナイザーを構成するコードは省略しました。その部分は既に制御されているように思われるからです。そうでない場合は、より多くのコードを投稿できます。

于 2012-06-26T18:50:22.253 に答える
0

役立つかもしれないいくつかのこと:

ジェスチャレコグナイザは、ビュー階層内の任意のビューにアタッチできます。したがって、小さなサブサブビューでタップを認識したい場合は、そのビューにGestureRecognizerを追加できます。

ジェスチャが認識されると、ジェスチャについて何かを行うことを決定する前に、ジェスチャの場所(およびその状態の他の側面)をテストできます。たとえば、ユーザーがビュー内の非常に小さなスペースをタップした場合にのみジェスチャを機能させたいとします...

- (void)handleTap:(UITapGestureRecogizer *)recognizer {

    // get the location relative to the subview to which this recognizer is attached
    CGPoint location = [recognizer locationInView:recognizer.view];

    // tiny rect to test, also in the recognizer's view's coordinates
    CGRect someSmallerRect = CGRectInset(recognizer.view.bounds, 10, 10);

    if (CGRectContainsPoint(someSmallerRect, location)) {
        // do whatever the touch should do
    }
    // otherwise, it's like it never happened
}
于 2012-06-26T19:13:19.113 に答える