背景:我希望动画内容中的更改以及方向。我的内容位置相对于self.view.bounds
。
问题:为了使内容与边界一起设置动画,我需要知道视图的边界到底是什么。我可以硬编码但我希望找到一种更有活力的方式。
代码:所有动画都按照以下内容在willRotateToInterfaceOrientation
进行:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
//centering the image
imageView.frame = CGRectMake(self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2 , self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2, image.size.width, image.size.height);
NSLog(@"%d",[[UIDevice currentDevice] orientation]);
NSLog(@"%f", self.view.bounds.origin.x);
NSLog(@"%f", self.view.bounds.origin.y);
NSLog(@"%f", self.view.bounds.size.width);
NSLog(@"%f", self.view.bounds.size.height);
}
在方向改变之前,界限是。因此,这仅在转换为180度时才有效。如果我使用didRotateFromInterfaceOrientation
,动画将在方向更改后显示非常糟糕。
答案 0 :(得分:11)
请改用willAnimateRotationToInterfaceOrientation:duration:
。从旋转动画块中调用此方法,此时已正确设置了所有边界。 Docs.
答案 1 :(得分:1)
如果你想要它是动态的,那么当你初始化imageView时,设置autoresizingMask
属性,这样当imageView的superview在旋转时调整大小时,边距可以自动调整大小......
imageView = //init imageView
imageView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;
//addtional config
这意味着您只需要设置一次帧,然后imageView将始终自行调整以保持在中间。
查看UIView类引用http://developer.apple.com/library/ios/ipad/#documentation/uikit/reference/uiview_class/uiview/uiview.html,看看你可以用autoresizingMask属性做些什么
答案 2 :(得分:0)
如果我正确理解你,你需要在你的CGRectMake 中交换X / Y坐标和宽度/高度,以获得90度变化的未来布局。如果它是180度变化,则它与当前
相同CGRectMake(self.view.bounds.origin.y + (self.view.bounds.size.height - image.size.height)/2 , self.view.bounds.origin.x + (self.view.bounds.size.width - image.size.width)/2, image.size.height, image.size.width);