2

したがって、ループを繰り返して、UIViewsを含むUIImageViewsを作成します(特定の部分を選択的に表示できるようにするため)。これらUIViewはすべてに保存されますUIScrollView

ジェスチャレコグナイザーを、UIViewそれらを作成したループのsに追加します。

プログラムを実行すると、最初に表示されたアイテムのみUIScrollViewがジェスチャを認識します。以前に非表示にしたアイテムまでスクロールしてタップしても、何も起こりません(ジェスチャが認識されたり、認識されたりすることはありません)。

初期化コード:

UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
  gestRec.delegate = self;

  [imageholder addGestureRecognizer:gestRec];

ジェスチャーを処理するコード:

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
 float count = [self._imageHolders count];
 NSLog(@"handling gesture: %f",count);
 while(count--){
  UIView* object = (UIView*) [self._imageHolders objectAtIndex:count];
 // NSLog(@"Whats going on: %@, %@, %b",object,gestureRecognizer.view, object == gestureRecognizer.view);
  if(object == gestureRecognizer.view){
   object.alpha = .1;
   count = 0;
  }
 // [object release];
 }
}

何か案は?

- - アップデート :

で使用可能なさまざまな機能とジェスチャレコグナイザーを調べて、scrollview何かUIViewがそのように切断された場合に備えて境界をいじってみました...興味深いことに、部分的にしか表示されていないアイテムが1つあり、それを移動した場合したがって、完全に表示され、元々表示されていた部分のみがジェスチャを認識します。

UIKitこの問題を理解するために、アーキテクチャ内でジェスチャレコグナイザがどのように機能するかについては十分にわかりません。ジェスチャを使用したスクロールビューのAppleの例では、この問題は発生していないようですが、実際の違いは見つかりません。ただし、自分UIImageViewsの中にネストしている場合を除きます。UIViews

4

2 に答える 2

5

同様の問題が発生しましたが、サブビューをトップレベルビューに追加してから、そのトップレベルビューをスクロールビューに追加したことが原因であることがわかりました。トップレベルビューは、スクロールビューのcontentSize(境界ではない)と同じサイズにする必要がありました。そうしないと、サブビューがスクロールして表示された場合でも、タッチイベントがサブビューに渡されませんでした。

于 2010-10-29T02:57:40.877 に答える
2

cancelsTouchesInViewプロパティをNOに設定してみてください。

UITapGestureRecognizer* gestRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
  gestRec.delegate = self;
  **gestRec.cancelsTouchesInView  = NO;**

  [imageholder addGestureRecognizer:gestRec];
于 2011-07-06T16:04:06.980 に答える