0

プログラムで作成した UIColletionView に UISwipeGestureRecognizer を追加しようとしましたが、認識機能がアクションを呼び出しません。これが私のコードです。

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
self.currentCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake( 0.0f, 54.0f, 320.0f, 470.0f) collectionViewLayout:flowLayout];
[self.currentCollectionView setBackgroundColor:[UIColor whiteColor]];
self.currentCollectionView.delegate = self;
self.currentCollectionView.dataSource = self;
self.currentCollectionView.showsHorizontalScrollIndicator = NO;
self.currentCollectionView.showsVerticalScrollIndicator = NO;
self.currentCollectionView.scrollEnabled = YES;
self.currentCollectionView.bounces = YES;
[self.currentCollectionView setBackgroundColor:[UIColor lightGrayColor]];
[self.currentCollectionView registerClass:[TripexpPhotoCell class] forCellWithReuseIdentifier:@"photoCell"];
[self.view addSubview:self.currentCollectionView];
self.swipeUpRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeUp:)];
self.swipeUpRecognizer.numberOfTouchesRequired = 1;
[self.swipeUpRecognizer setDirection:UISwipeGestureRecognizerDirectionUp];

self.swipeDownRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeDown:)];
self.swipeDownRecognizer.numberOfTouchesRequired = 1;
[self.swipeDownRecognizer setDirection:UISwipeGestureRecognizerDirectionDown];

[self.currentCollectionView addGestureRecognizer:self.swipeDownRecognizer];
[self.currentCollectionView addGestureRecognizer:self.swipeUpRecognizer];

そして、ここに同じ認識エンジンを同時に受け取るための関数とデリゲートがあります

#pragma mark - UISwipeGestureRecognizer Action
-(void)didSwipeUp: (UISwipeGestureRecognizer*) recognizer {
    NSLog(@"Swiped Up");
}

-(void)didSwipeDown: (UISwipeGestureRecognizer*) recognizer {
    NSLog(@"Swiped Down");
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer     shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    NSLog(@"Asking permission");
    return YES;
}

また、UICollectionView 内でループし、既存の UISwipeGestureRecognizer があるかどうかを確認しましたが、何も見つかりませんでした。2 つのレコグナイザーをアタッチすると、それらの 2 つが表示されます。

4

3 に答える 3

3

これは古い投稿であることは知っていますが、これは誰かを助けるかもしれないので、ここで私の解決策を示しています。

UICollectionView は UIScrollView を継承しています。最初にスクロールを無効にする必要があります

self.currentCollectionView.scrollEnabled = FALSE;
于 2013-03-04T14:43:13.517 に答える
0

間違ったアプローチ @aobs。スクロールをデフォルトとして機能させ、スワイプに応じてより多くのことを行いたい人には機能しません. 私の場合、手動スワイプの場合は自動スクロール動作を停止する必要がありましたが、手動スクロールはすべてのインスタンスで許可されます。(典型的なプロモーション オファーの動作)。

おもう

self.swipeDownRecognizer.delegate=self
self.swipeUpRecognizer.delegate=self

デリゲートがないため、コードに欠けていたものです

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer     shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    NSLog(@"Asking permission");
    return YES;
}

デバッガーでヒットしていません。

これが古い答えであることは知っていますが、これを探している人に役立つことを願っています。

于 2016-07-20T14:10:07.600 に答える
0

試す:

[self.currentCollectionView addGestureRecognizer:self.swipeDownRecognizer];

また、現在swipeUpRecognizerを追加していません。

于 2012-11-13T19:27:37.273 に答える