self.view.frame和self.superview.frame有什么区别以及如何使用它们?

时间:2011-09-12 09:43:16

标签: iphone cgrect device-orientation

我想知道这两行代码有什么区别?

    self.view.frame = CGRectMake(0, 0, 320, 480);
    self.view.superview.frame = CGRectMake(0, 0, 800, 900);

我希望在我的方向改变时更改视图框,因为它会改变标签的位置,我希望它们在屏幕中间,任何人都可以指导我吗?

我正在使用以下委托方法,用于方向,但它不能与

一起使用
self.view.frame

但它可以正常使用以下行

self.view.superview.frame

请参阅以下代码

// Override to allow orientations other than the default portrait orientation.
  - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation     {

// Return YES for supported orientations
//return (interfaceOrientation == UIInterfaceOrientationPortrait);
if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft) {
    NSLog(@"LEFT");
    self.view.frame = CGRectMake(100, 0, 480, 320);
    NSLog(@"Show self.view.frame: %@", NSStringFromCGRect(self.view.frame));
   // self.view.superview.frame = CGRectMake(-50, -70, 800, 900);
    [button setFrame:CGRectMake(340, 320, 100, 30)];
}
if (interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
    NSLog(@"RIGHT");
    self.view.frame = CGRectMake(0, 0, 320, 480);
    NSLog(@"Show self.view.frame: %@", NSStringFromCGRect(self.view.frame));
         //self.view.superview.frame = CGRectMake(10, 90, 800, 900); //It is working if           I will uncomment it
    [button setFrame:CGRectMake(250, 300, 100, 30)];
}
if (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
    self.view.frame = CGRectMake(0, 0, 320, 480);
    //self.view.superview.frame = CGRectMake(0, 0, 800, 900);//It is working if           I will uncomment it
    [button setFrame:CGRectMake(250, 400, 100, 30)];    
}
return YES;
}

2 个答案:

答案 0 :(得分:1)

self.view是self的视图(如果我们讨论的是viewControllers)。 self.view.superview是持有self.view的视图。

因此,简而言之,如果您向窗口添加视图,该视图的超级视图将成为窗口。

如果未正确设置自动调整大小,则设置帧将失败。

答案 1 :(得分:0)

作为一般语句,第一行是尝试设置当前viewController视图的框架,该视图是写入此代码的。

第二行是尝试设置当前viewController视图的视图的父视图的框架。

这究竟意味着什么,以及您应该使用哪一个我害怕取决于您在应用程序中设置的视图层次结构。