UIScrollView обнаруживает увеличение масштаба щепотки - PullRequest
6 голосов
/ 26 января 2011

Я пытаюсь получить уведомление, когда UIScrollView масштабируется сверх минимального предела увеличения и собирается оживить назад, но я нахожу это очень трудным. Есть ли способ сделать это только с помощью delegate методов или мне нужно переопределить UIScrollView's обработку касаний?

Ответы [ 4 ]

10 голосов
/ 16 декабря 2013

Используйте scrollViewDidZoom: и проверьте, если scrollView.zoomBouncing == YES.Затем используйте zoomScale, чтобы определить, в каком направлении прыгает представление.

- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
    if (scrollView.zoomBouncing) {
        if (scrollView.zoomScale == scrollView.maximumZoomScale) {
            NSLog(@"Bouncing back from maximum zoom");
        }
        else
        if (scrollView.zoomScale == scrollView.minimumZoomScale) {
            NSLog(@"Bouncing back from minimum zoom");
        }
    }
}
2 голосов
/ 04 марта 2011

Вы можете использовать метод делегата UIScrollView scrollViewDidZoom, чтобы определить момент, когда он собирается оживить назад. Вы увидите, что scrollView.zoomScale упадет ниже scrollView.minimumZoomScale, пока изображение сжимается. Затем, как только пользователь отпустит свои пальцы, scrollViewDidZoom будет вызван еще раз с scrollView.zoomScale == scrollView.minimumZoomScale, но scrollView.zooming == NO.

Захватить этот момент хорошо и все, но попытка сделать что-нибудь, чтобы выгрузить анимацию bounce-back-to -imumZoomScale, кажется для меня действительно странными побочными эффектами. (

1 голос
/ 13 января 2019

В Swift 4.0:

func scrollViewDidZoom(_ scrollView: UIScrollView) {
    if scrollView.zoomScale == scrollView.minimumZoomScale
    {
        print("zoomed out")
    }
}

Это будет вызвано именно тогда, когда пользователь закончил масштабирование, а zoomScale достигнет минимально возможного значения, то есть когда вид прокрутки полностью уменьшен.

0 голосов
/ 12 января 2013

Я сделал это с UIPinchGestureRecognizer.

-(void)viewDidLoad{
    UIPinchGestureRecognizer *gestureRecognizer = 
     [[[UIPinchGestureRecognizer alloc] initWithTarget:self 
                                                action:@selector(pinched:)] 
                                                               autorelease];
    gestureRecognizer.delegate=self;
    [self.scrollView addGestureRecognizer:gestureRecognizer];
    //your code
}
-(void)pinched:(UIPinchGestureRecognizer*)gestureRecognizer{
    if(gestureRecognizer.state==UIGestureRecognizerStateEnded){
        //pinch ended
        NSLog(@"scale: %f",scrollView.zoomScale);
    }
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
        shouldRecognizeSimultaneouslyWithGestureRecognizer:
                          (UIGestureRecognizer *)otherGestureRecognizer{
    return YES;
}
...