内部动画时的 UIScrollView 回调

Posted

技术标签:

【中文标题】内部动画时的 UIScrollView 回调【英文标题】:UIScrollView callbacks while animating internally 【发布时间】:2011-06-27 06:58:34 【问题描述】:

我的 UIScrollView 有一个缩放的子视图(在 viewForZoomingInScrollView:scrollView 中返回)和许多其他子视图,它们注释缩放视图并且应始终以相对坐标定位在缩放视图的顶部

UIScrollView
    - zoomChild (size 100x100 at scale 1)
    - Annotate Child (size 10x10), always placed at relative position (0.2, 0.2) of zoomChild's frame

我继承了 UIScrollView 并覆盖了 scrollViewDidZoom:。我定位一个注释子像

- (void)scrollViewDidZoom:(UIScrollView *)scrollView 

    self.annotateChild.frame = CGRectMake(0.2*100*self.zoomScale, 0.2*100*self.zoomScale, 10, 10);

只要用户正在与滚动视图交互,它就可以正常工作。 scrollViewDidZoom:/scrollViewDidScroll:,不过好像没有调用时

zoomBounce:scrollview 被捏得比 minZoom 小,用户松开手指,scrollview 动画回到 minScale。 scrollViewDidZoom:在动画完成时调用,而不是在动画期间调用。

使用 zoomToRect:animated: 缩放到矩形时。同样,在动画完成之前不会调用 scrollViewDidZoom:。

所以问题归结为:我怎样才能在 self.zoomScale 发生变化时得到通知,包括通过一些内部动画发生这种情况时?

或者,我可以将我的注释视图作为子视图添加到 zoomView 并以某种方式确保它们不被缩放吗?

【问题讨论】:

【参考方案1】:

这是一个可能有效的答案:In ios 4.0, why does UIScrollView zoomToRect:animated: not trigger the scrollViewDidScroll or scrollViewDidZoom delegates while animating?

我需要和你一样做,但我还没来得及尝试。

【讨论】:

以上是关于内部动画时的 UIScrollView 回调的主要内容,如果未能解决你的问题,请参考以下文章

iOS - UICollectionViewCell 内的 UIScrollView - 内部视图的动画不正确(延迟)

更改 NSLayoutConstraint 时的 SWIFT 动画

ios中发生UISwipeGestureRecognizer时的UIImageView动画

UI基础--封装cell滑动时的动画

UIScrollView 跨设备 UI 兼容性

UIWebView 内部滚动视图