2012-02-16 5 views
0

Я беру UITapGestureRecognizer, чтобы превратить страницу комиксов. Когда я беру кран, я посылаю:iOS - set MAXIMUM touchCount

[comicScrollView setContentOffset:CGPointMake(nextPageCGPoint) animated:YES]; 

- другие слова, на мероприятии водопроводного анимировать содержимое смещение в целях прокрутки, чтобы показать следующую страницу в окне прокрутки.

Проблема заключается в том, что я не хочу, чтобы другой жест добавления касался содержимого contentOffset, если анимация не закончилась. Проблема в том, что на практике я нашел это очень трудным - я попытался установить «isAnimating» Boolean на YES перед настройкой смещения содержимого, а затем установить его в NO с обратным вызовом; Я попытался настроить анимацию: завершение: - но каждый раз, когда идет крана, tapCount увеличивается.

следующее:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { 
    NSLog(@"%d", [touch tapCount]); 
} 

постоянно увеличивает tapCount так часто, как я нажимаю, и если я это в этом методе:

if ([touch tapCount] > 1) { [gestureRecognizer setEnabled:NO]; } 

она не отключает жест распознаватель, пока tapCount закончил увеличивать &, а затем сбросил до нуля.

Пожалуйста, помогите! Я не могу понять, как остановить tapCount от приращения мимо 1.

ответ

0
[UIView beginAnimations:@"AnimateIn" context:nil]; 
[UIView setAnimationCurve: UIViewAnimationCurveEaseOut]; 
[UIView setAnimationDuration: 0.7f]; 

//Add this 
[UIView setAnimationDelegate:self]; 

[UIView setAnimationDidStopSelector:@selector(loadingViewDisappear:finished:context:)]; 
loadingView.frame = CGRectMake(rect.origin.x, rect.origin.y - 80, rect.size.width, rect.size.height); 
[UIView commitAnimations]; 



- (void)loadingViewDisappear:(NSString *)animationID finished:(NSNumber *) finished context:(void *) context { 
    NSLog((finished ? @"YES!" : @"NO!")); 
    if ([animationID isEqualToString:@"AnimateIn"] && finished) { 
     //do something here 
    } 
} 
+0

Благодарим за установку меня по правильному пути. Я еще раз посмотрел на метод [... анимации: завершение:] и понял это, как описано в моем втором сообщении. – jankins

0

Я не хочу использовать [UIView beginAnimations:] метод, поэтому снова экспериментировал с новым способом, используя блоки. Я пробовал это раньше, чем & не знаю, что я сделал по-другому на этот раз, но результат был благоприятным.

Я обнаружил, что, когда я использовал этот метод для установки contentOffset прокрутки, хотя мой tapCount все еще увеличивается, пока я продолжаю нажимать, как сумасшедший, страницы теперь оживляют с желаемым поведением, а не беспорядочно. Как будто это не позволяет мне «поднять другую анимацию». Это именно то поведение, которое я хочу.

-(void)singleTap:(UITapGestureRecognizer*)tapRecognizer { 

    CGPoint tapLocation = [tapRecognizer locationInView:self.view]; 

    //a tap on the right side turns to the next page: 
    if (tapLocation.x > self.view.frame.size.width/2) { 
     [UIView animateWithDuration:.3 animations:^{ 
      [comicScrollView setContentOffset:nextPagePoint]; 
     }completion:^(BOOL finished){ 
      NSLog(@"finished"); 
     }]; 
    } 
}