iOS:定位获得未来的self.view.bounds

时间:2012-05-02 19:41:37

标签: objective-c ios rotation orientation bounds

背景:我希望动画内容中的更改以及方向。我的内容位置相对于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,动画将方向更改后显示非常糟糕。

3 个答案:

答案 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);