2

いくつかのビューをアニメーション化してanimateWithDuration:いますが、それらのタッチを検出できません。

シンプルなタッチ処理 ( touchesEnded:) とtapGestureRecognizer.

最初にそれらをアニメーション化しましたCGAffineTransformTranslationが、座標をチェックするとこれができないことに気付いたtouchesMoved:ので、フレームプロパティをアニメーション化するように切り替えました。アニメーション中にフレームの値が実際には変化していないことにすぐに気づいたので、touchesEnded: のアイデアを削除しました。だから私も動作しないtapGestureRecognizerに変更しました。

すべてのビューで userInteraction を有効にUIViewAnimationOptionAllowUserInteractionし、アニメーションにもオプションを追加しました。

アニメーションのコードとその前に発生するものは次のとおりです。

// init the main view
singleFingerTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapOnItem:)]; // singleFingerTap is an ivar

// code somewhere:
// userItem is a subview of MainView
[userItem addGestureRecognizer:singleFingerTap];

[UIView animateWithDuration:animationTime
                      delay:0.0f
                    options:UIViewAnimationOptionBeginFromCurrentState | UIViewAnimationOptionCurveLinear | UIViewAnimationOptionAllowUserInteraction
                 animations:^{
                     userItem.frame = CGRectMake(-(self.bounds.size.width + userItem.frame.size.width), userItem.frame.origin.y, userItem.frame.size.width, userItem.frame.size.height);
                 }

                 completion:^(BOOL finished) {
                     if (finished) {
                         [unusedViews addObject:userItem];
                         [userItem removeFromSuperview];
                         [userItem removeGestureRecognizer: singleFingerTap];
                     }
                 }
 ];

ジェスチャ認識機能は次のとおりです。

- (void) handleTapOnItem:(UITapGestureRecognizer *)recognizer{
   NSLog(@"Touched");
}

では、アニメーション化されたビューから実際にタッチするにはどうすればよいですか、または最良の解決策は何ですか? 各ビューに透明な uibutton を追加することはできません。:(

4

2 に答える 2

3

アニメーションがビューに適用されると、アニメーション化されたプロパティはすぐに終了値に変更されます。実際に画面に表示されているのは、ビュー レイヤーのプレゼンテーション レイヤーです。

しばらく前に、ヒット テストのアニメーション ビュー/レイヤーについてのブログ記事を書きました。

于 2012-07-27T13:21:58.297 に答える
0

Core Animationを使用して何かを移動している間、オブジェクトのタッチは、オブジェクトが移動を完了するまで停止します。興味深いことに、オブジェクトを移動して最終的な位置をタッチすると、タッチがピックアップされます。これは、アニメーションが開始されるとすぐに、オブジェクトのフレームが終了点に設定され、画面上を移動するときにオブジェクトが更新されないためです。

ビューが移動しているときにビューのタッチを検出するには、QuartzやOpenGLESなどの代替テクノロジーを調べる必要がある場合があります。

于 2012-07-27T13:15:06.727 に答える