当方向改变时,我需要在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声明框架&界限是正确的......
我是否正确旋转/重新定位对象,还是有更简单/首选的方式来支持景观?
由于
答案 0 :(得分:0)
旋转到横向时,您明确将高度设置为“150”,但在返回纵向时不要将其调整回来。
我不知道你的自动调整大小是如何在IB中设置的,所以我不能说明这些对象在自己离开时如何调整大小/移动。
答案 1 :(得分:0)
3分:
layoutSubviews
会更方便。它在每次轮换后调用,[device orientation]
为您提供新的方向。frame
,而不是bounds
,这是一个内部值(即仅在该视图中“内部”)。 frame
说'把我放在了上司的这个位置',这就是你想要的。 bound
定义了scrollView用于其子视图的坐标。你需要的是框架。
在layoutSubviews
中,只需更改框架,您想要的动画将自动应用:
- (void)layoutSubviews {
if (UIInterfaceOrientationIsLandscape([[UIDevice currentDevice] orientation])) {
anObject.frame = landscapeFrame;
}
else {
anObject.frame = portraitFrame;
}
}