2009-10-28 2 views
1

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

@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 никогда не вызывается.

Любая идея, почему?

+0

Где и как вы объявили эти методы делегата? И где вы их называете? Если вы объявляете пользовательские методы делегирования, вы несете ответственность за их вызов из своего класса MyScrollView. –

+0

Извините ... Я вставил неправильный код. Теперь исправлено – Jorge

+0

Как насчет scrollViewWillBeginZooming? – guruz

ответ

0

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

Вместо:

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

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

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

Моя ошибка. Я вырезал и вставил неправильные строки. Я установил вопрос – Jorge

+0

Мой код основан на этом. Для упрощения вопроса я изменил код внутри делегатов для вызовов NSLog. Результат один и тот же: viewForZoomingInScrollView вызывается, но scrollViewDidEndZooming не – Jorge

+0

Черт ... вы правы. Еще раз :-(У меня есть это только вы сказали, что я должен, но он все равно не вызван. – Jorge

0

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

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

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

Смежные вопросы