我有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。
知道为什么吗?
答案 0 :(得分:0)
好的,根据您的评论完全修改了答案。这可能只是另一个错字,但您的方法签名缺少最终参数。
而不是:
- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale{
NSLog(@"zoomed");
}
你应该:
- (void)scrollViewDidEndZooming:(UIScrollView *)aScrollView withView:(UIView *)view atScale:(float)aScale{
NSLog(@"zoomed");
}
答案 1 :(得分:0)
很抱歉碰到这个帖子,但这是一个非常重要的问题。您没有说明是要实现单独的捏合手势识别器还是使用UIScrollView的内置缩放。根据我自己的研究,我发现如果您只是使用UIScrollView进行缩放,则调用viewForZoomingInScrollView来获取您想要缩放的视图。然后它调用scrollViewWillBeginZooming,然后在它缩放时重复调用scrollViewDidZoom,当它完成时调用scrollViewDidEndZooming。一切如你所料。
但是,如果您实现自己的捏合手势识别器以使缩放更平滑或出于任何其他原因,它只会在开始时重复调用viewForZoomingInScrollView并重复调用scrollViewDidZoom。我认为这是因为你已经覆盖了调用其他方法的内置缩放功能。
如果您需要更多控制权,请将其置于连接到捏合手势识别器的操作方法中。