【问题标题】:UIScrollView imageViewDidEndZooming not being calledUIScrollView imageViewDidEndZooming 没有被调用
【发布时间】:2009-10-28 20:48:00
【问题描述】:

我有这个 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 永远不会被调用。

知道为什么吗??

【问题讨论】:

  • 您在哪里以及如何声明这些委托方法?你在哪里打电话给他们?如果您声明自定义委托方法,您有责任从 MyScrollView 类中调用它们。
  • 对不起...我粘贴了错误的代码。现在已经修复了
  • scrollViewWillBeginZooming 怎么样?

标签: iphone delegates uiscrollview


【解决方案1】:

好的,根据您在下面的评论完全修改了答案。这可能只是另一个错字,但您的方法签名缺少最终参数。

代替:

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

你应该有:

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

【讨论】:

  • 我的错误。我剪切并粘贴了错误的行。我解决了这个问题
  • 我的代码是基于那个。为了简化问题,我更改了代表内部的代码以进行 NSLog 调用。结果是一样的:viewForZoomingInScrollView 被调用但 scrollViewDidEndZooming 不是
  • 该死....你是对的。又是打字错误:-(我有它只是你说我应该但它仍然没有被调用。
【解决方案2】:

很抱歉打断了话题,但这是一个非常重要的问题。你没有说你是实现一个单独的捏手势识别器还是使用 UIScrollView 的内置缩放。根据我自己的研究,我发现如果您只使用 UIScrollView 进行缩放,它会调用 viewForZoomingInScrollView 来获取您想要缩放的视图。然后它调用scrollViewWillBeginZooming,然后在缩放时重复调用scrollViewDidZoom,完成后调用scrollViewDidEndZooming。一切如你所愿。

但是,如果您实现自己的捏合手势识别器以使缩放更平滑或出于任何其他原因,它只会在开始时调用 viewForZoomingInScrollView 并重复调用 scrollViewDidZoom。我认为这是因为您覆盖了调用其他方法的内置缩放功能。

如果您需要更多控制,请将其放入连接到捏合手势识别器的操作方法中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-03-31
    相关资源
    最近更新 更多