我已经阅读了此处提出的许多关于 UIScrollView 的问题,但没有一个回答了这个问题。
我有一个 UIScrollView 可以缩放包含其他 subview 的 View 。当发生缩放时,我需要将 View 的 subview 移动到某些地方。我可以通过在 UIScrollView 的 layoutSubviews 方法中相应地更改它们的框架来实现这一点。
在 iOS 3.2 及更低版本上,这对于手指缩放和使用 zoomToRect:animated: 方法的实用缩放都非常有效。
在 iOS 4.0 或更高版本上,这仅适用于手指缩放。通过使用 zoomToRect:animated: 进行实用缩放,对 layoutSubviews 的调用只会发生一次(在缩放结束时)。我需要在缩放期间多次调用此方法,以便我的 subview 可以随着缩放平滑地改变位置。
所以总而言之,在 iOS 3.2 上,对 layoutSubviews 的调用会发生多次,而在 iOS 4.0 上,对 layoutSubviews 的调用只会在您调用 zoomToRect:animated: 时发生一次。有谁知道我的问题的解决方案吗?
最佳答案
在 IOS 4.0 中,动画由操作系统完成 - 我假设尽可能多地使用基于 GPU 的硬件加速。这样做的缺点是,很难为从另一个(动画)值派生的值设置动画。与您的情况一样, subview 的位置取决于 UIScrollView 的缩放级别。 为了实现这一点,您应该将 subview 的动画设置为与缩放动画并行。尝试类似的东西:
[UIView animateWithDuration:0.5 delay:0
options:UIViewAnimationOptionLayoutSubviews
animations:^{
theScrollView.zoomScale = zoomScale;
[theScrollView layoutSubViews];
} completion:^(BOOL finished) {}];
这应该在同一个动画上下文中设置 subview 的帧属性,因此,它们应该由操作系统一起动画。 我不确定是否需要明确的 layoutSubViews,或者 UIViewAnimationOptionLayoutSubviews 选项是否已经实现了这一点。
另请参阅此问题的答案:How to make UIScrollView send scrollViewDidScroll messages during animations
关于iphone - UIScrollView 在 iOS 4.0 上缩放时不调用 layoutSubviews,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799153/