0

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

    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;
}
4

2 回答 2

1

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

因此,简而言之,如果您向窗口添加视图,则该视图的父视图将是窗口。

如果未正确设置自动调整大小蒙版,则设置框架将失败。

于 2011-09-12T09:48:11.110 回答
0

作为一个通用语句,第一行尝试设置编写此代码的当前 viewController 视图的框架。

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

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

于 2011-09-12T09:50:31.997 回答