UIScrollView imageViewDidEndZooming не вызывается - PullRequest
1 голос
/ 28 октября 2009

У меня есть этот подкласс UIScrollView:

@interface MyScrollView : UIScrollView <UIScrollViewDelegate>

И у меня есть те методы делегата

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale(float)aScale{
    NSLog(@"zoomed");
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)aScrollView{
    NSLog(@"willzoom");
}

Когда я увеличиваю MyScrollView, вызывается viewForZoomingInScrollView, но scrollViewDidEndZooming никогда не вызывается.

Есть идеи, почему ??

Ответы [ 2 ]

0 голосов
/ 10 июня 2013

Извините, что натолкнулся на тему, но это очень важный вопрос. Вы не говорите, реализуете ли вы отдельный распознаватель жестов или используете встроенное масштабирование UIScrollView. Из моих собственных исследований я обнаружил, что если вы просто используете UIScrollView для масштабирования, он вызывает viewForZoomingInScrollView, чтобы получить вид, который вы хотите увеличить. Затем он вызывает scrollViewWillBeginZooming, затем по мере увеличения он несколько раз вызывает scrollViewDidZoom, а когда он закончил, вызывает scrollViewDidEndZooming. Все как и следовало ожидать.

Однако, если вы реализуете свой собственный распознаватель жестов, чтобы сделать масштабирование более плавным или по любой другой причине, он только вызывает viewForZoomingInScrollView при запуске и повторно scrollViewDidZoom. Я думаю, это потому, что вы переопределили встроенную функцию масштабирования, которая вызывает другие методы.

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

0 голосов
/ 29 октября 2009

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

Вместо:

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale{
    NSLog(@"zoomed");
}

Вы должны иметь:

- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale:(float)aScale{
    NSLog(@"zoomed");
}
...