iphone - UIScrollView 在 iOS 4.0 上缩放时不调用 layoutSubviews

标签 iphone ios uiscrollview uiscrollviewdelegate layoutsubviews

我已经阅读了此处提出的许多关于 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/

相关文章:

ios - 在 UIScrollView 问题中裁剪缩放图像

iphone - Cocos2D 和排行榜

ios - 我怎样才能使线路转弯?

iphone - Xcode 4 -- "no provisioned iOS device is connected"与 iPod touch 2

ios - 如何在设置按钮 alpha 的同时更改 UIButton 的 alpha

ios - 多次调用 UIKeyboardDidShowNotification,有时键盘尺寸不正确

iphone - 如何使用 addSubview 在 UIScrollView 中添加按钮?

ios - Swift 中两个 TableView 之间的水平分页

iphone - UILabel文本发光和选框

iphone - 是否可以使用 ANSI C/C++ 或嵌入式 C 开发实体层以在 Android 和 iPhone 平台中使用?