【问题标题】:iPad uiviewcontroller - why are bounds and frame different sizes?iPad uiviewcontroller - 为什么边界和框架大小不同?
【发布时间】:2013-01-04 20:44:04
【问题描述】:

在 xcode 4.5.1 中,启动单视图 iOS 应用程序项目,并在 plist 或目标设置中,使其仅支持横向左右方向。然后在 ViewController 中,把这个放进去:

- (void)viewDidAppear:(BOOL)animated {
    NSLog(@"bounds: %.2f,%.2f",self.view.bounds.size.width,self.view.bounds.size.height);
    NSLog(@"frame:  %.2f,%.2f",self.view.frame.size.width,self.view.frame.size.height);
}

当你运行它时你会得到这个:

bounds: 1024.00,748.00
frame:  748.00,1024.00

任何想法为什么?它给我带来了各种过渡、核心动画层等问题。尽管视图是横向的,但视图的 CALayer 之类的东西似乎仍然是纵向的。

编辑:

如果你尝试这样的事情:

CATransition* transition = [CATransition animation];
transition.duration = 2.2;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromBottom;
[self.navigationController.view.layer addAnimation:transition forKey:nil];
[self.navigationController popToRootViewControllerAnimated:NO];

请注意,它来自右侧而不是底部,并且新视图与旧视图重叠,因为它是根据纵向尺寸进行的。

【问题讨论】:

    标签: objective-c ios uiviewcontroller


    【解决方案1】:

    UIView 的边界是矩形,表示为相对于其自身坐标系 (0,0) 的位置 (x,y) 和大小 (width,height)。

    UIView 的框架是矩形,表示为相对于其中包含的 superview 的位置 (x,y) 和大小 (width,height)。

    所以,你得到了这个结果。

    【讨论】:

    • 那么我怎样才能改变 uiview 的坐标系来匹配它的 superview 呢?视图是横向的,所以它的帧大小应该是 1024,768
    • 我应该在原始问题中更清楚 - 我知道边界和框架是不同的东西,所以“为什么”我的意思是为什么框架错误
    • @jonydep 结果无论你得到什么都是正确的,别担心。所以 self.view 没有被使用,而 self.bounds 被用作它在你自己的坐标系中的代表值,即风景或肖像
    • 但是当我尝试进行任何类型的核心动画转换等时,这是错误的 - 尺寸和旋转就像是纵向的一样。
    • 旋转到另一个横向然后再返回顺便修复它(从那时起帧大小与边界大小相同)
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多