Rilevare il passaggio del dito UICollectionView

Ho bisogno di eseguire una specifica azione quando l’utente passa il uicollectionview.
Io l’ho costruita in modo che ogni cella cattura a schermo intero.

Ho provato questi modi:

A. scrollViewDidEndDecelerating

# pragma UIScrollView
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    NSLog(@"detecting scroll");
    for (UICollectionViewCell *cell in [_servingTimesCollectionView visibleCells]) {
        NSIndexPath *indexPath = [_servingTimesCollectionView indexPathForCell:cell];
        CGPoint scrollVelocity = [scrollView.panGestureRecognizer velocityInView:_servingTimesCollectionView];
        if (scrollVelocity.x > 0.0f)
            NSLog(@"going right");
        else if (scrollVelocity.x < 0.0f)
            NSLog(@"going left");
    }
}

Ma il scrollVelocity restituisce null. Il metodo è chiamato.

B. UISwipeGestureRecognizer

In ViewDidLoad del mio UIViewController che delega UICollectionViewDataSource e UIGestureRecognizerDelegate ho aggiunto:

UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeRight:)];
swipeRight.numberOfTouchesRequired = 1;
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeLeft:)];
swipeRight.numberOfTouchesRequired = 1;
[swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

[_servingTimesCollectionView addGestureRecognizer:swipeRight];
[_servingTimesCollectionView addGestureRecognizer:swipeLeft];

e seguenti del UiViewController:

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

-(void)didSwipeLeft: (UISwipeGestureRecognizer*) recognizer {
    NSLog(@"Swiped Left");
}

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

Ma nessuno è chiamato.

Cosa c’è di sbagliato? Sto sviluppando per ios7

InformationsquelleAutor Dejell | 2013-10-07



2 Replies
  1. 10

    Non stai settando il delegato dei gesti:

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeRight:)];
        swipeRight.delegate = self;
        swipeRight.numberOfTouchesRequired = 1;
        [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];
    
        UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(didSwipeLeft:)];
        swipeLeft.delegate = self;
        swipeLeft.numberOfTouchesRequired = 1;
        [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
  2. 0

    stavo cercando di fare la stessa cosa con voi (full size cella in un frame UICollectionView). Solo la delega con sé non è sufficiente basta, perché UICollectionView maggio ha il proprio gesto di riconoscimento. Così sotto il trucco è stato lavorato nel maggio del caso.

        override func viewDidLoad() {
        super.viewDidLoad()
    
        collectionView?.backgroundColor = .red
    
        let leftGR = UISwipeGestureRecognizer(target: self, action: #selector(self.swipeHandler_Left(gestureRecognizer:)))
        leftGR.numberOfTouchesRequired = 1
        leftGR.direction = .left
        leftGR.delegate = self
    
        self.view.addGestureRecognizer(leftGR)
    }
    
    @objc func swipeHandler_Left(gestureRecognizer : UISwipeGestureRecognizer!) {
        if gestureRecognizer.state == .ended {
            //Perform action.
            print("***Free to Delete Old Cell")
        }
    }
    
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

    mi dispiace per il mio swifty risposta, pls provare a tradurre objc 🙂

Lascia un commento