在 UIView 上旋转/移动对象
Posted
技术标签:
【中文标题】在 UIView 上旋转/移动对象【英文标题】:Rotating/moving objects on a UIView 【发布时间】:2010-10-27 13:24:34 【问题描述】:当方向改变时,我需要在 UIView 上旋转和移动对象。为此,我在willRotateToInterfaceOrientation
if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
[self repositionObjectAfterRotation:scrollView x:0 y:100 width:480 height:150];
[self repositionObjectAfterRotation:pageControl x:50 y:430 width:100 height:30];
我的repositionObjectAfterRotation:x:y:width:height:
看起来像这样,它在设置新边界之前获取对象并更改其边界。
- (void)repositionObjectAfterRotation:(UIView *)anObject x:(int)x y:(int)y
width:(int)width height:(int)height
[UIView animateWithDuration:kAnimationDuration animations:^
CGRect boundsRect = anObject.bounds;
boundsRect.origin.x = x;
boundsRect.origin.y = y;
boundsRect.size.width = width;
boundsRect.size.height = height;
anObject.bounds = boundsRect;
completion:^ (BOOL finished)
if (finished)
[UIView animateWithDuration:kAnimationDuration animations:^
anObject.alpha = 1.0;
];
];
当视图旋转回纵向时,它只显示一半的滚动视图,即使我的 NSLogs 状态框架和边界是正确的......
我是否正确旋转/重新定位对象,或者是否有更简单/首选的方式来支持横向?
谢谢
【问题讨论】:
【参考方案1】:当您旋转到横向时,您明确将高度设置为“150”,但当您返回纵向时不要将其调整回来。
我不知道您在 IB 中的自动调整大小是如何设置的,所以我无法说明这些对象在自行离开时将如何调整大小/移动。
【讨论】:
抱歉,它确实以纵向移动,复制和粘贴错误。我的错。在 IB 中选择了所有的支柱和弹簧。【参考方案2】:3 分:
-
您不需要显式开始动画,系统无论如何都会这样做(除非您的动画“不同于旋转”。
我认为覆盖
layoutSubviews
更方便。每次旋转后都会调用它,[device orientation]
会为您提供新的方向。
您可能想要更改这些视图的 frame
,而不是它们的 bounds
,这是一个内部值(即它只在该视图“内部”重要)。
frame
说'把我放在superivew的这个位置',这就是你想要的。 bound
定义了你的坐标,比如说,scrollView 用于它的子视图。你需要的是框架。
在layoutSubviews
,只要换帧,你想要的动画就会自动套用:
- (void)layoutSubviews
if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation]))
anObject.frame = landscapeFrame;
else
anObject.frame = portraitFrame;
【讨论】:
frame
与超级视图坐标有关,不是吗?覆盖 layoutSubviews 是我以前从未做过的事情。我是否只是覆盖layoutSubviews
并将我的移动代码放在那里?没什么特别的?我想制作动画,因为我的项目不只是旋转,即我有一个滚动视图,旋转时需要从 0,80 到 0,100。
layoutSubviews
在视图旋转时不会被调用...我尝试在willRotateToIntefaceOrientation
中调用[self.view setNeedsLayout];
但它仍然没有进入我的方法
hmm...我每天都在使用这种方法...在最坏的情况下应该在调用setNeedsLayout
时调用layoutSubviews
。我假设您已经检查了 layoutSubviews
在您的视图中是否正确实施?以上是关于在 UIView 上旋转/移动对象的主要内容,如果未能解决你的问题,请参考以下文章