【发布时间】:2014-04-02 16:39:18
【问题描述】:
根据可用的 Apple 文档here,UIView 的bounds 属性可以设置动画。
为了以编程方式旋转我的一个视图(在本例中从纵向到横向),我实现了以下代码:
float w = controlsView.bounds.size.width;
float h = controlsView.bounds.size.height;
CGAffineTransform T = CGAffineTransformMakeRotation(M_PI/2);
UIViewContentMode oldContentMode = controlsView.contentMode;
controlsView.contentMode = UIViewContentModeRedraw;
[UIView animateWithDuration:1.0 animations:^{
controlsView.bounds = CGRectMake(0, 0, h, w);
controlsView.transform = T;
}];
controlsView.contentMode = oldContentMode;
我为 contentMode 添加了两条指令,因为我在 StackOverflow 上的某处读到 contentMode 必须设置为该值,以便 UIView 在修改 bounds 属性时重绘内容(但是,在在这种情况下,它不会以任何方式影响行为)。
该代码的问题在于 UIView 没有通过动画调整大小,而是一次性调整大小。
执行该代码,UIView 首先被调整大小(没有动画),然后用动画旋转。
如何为调整大小设置动画?
-- 更新--
我尝试结合缩放和旋转变换。 UIView 在动画中旋转和缩放,但最后它的bounds 属性没有改变:即使它已经旋转到横向(在我的 iPhone 上应该是 568x320),它的宽度和高度保持在纵向值 (320x568)。事实上,controlsView 上的 UI 控件已变形(纵横比错误)并出现拉伸。
【问题讨论】:
-
为什么不使用缩放和旋转变换?
标签: ios uiview core-animation