English 中文(简体)
iPhone + CGAffineTransFormRotate(pi/2) + statusBarHidden:YES + presentModalViewController = 20 pixels of white space iPhone + CGAffineTransFormRotate(pi/2) + statusBarHidden:YES + presentModalViewController = 20像素的白色空间
原标题:
  • 时间:2009-02-19 04:31:17
  •  标签:

我认为标题已经很描述性了:

如果我在一個視圖上執行這3個操作,結果會產生20個像素的白色空間出現在屏幕的左側(如果iPhone是landscapeLeft方向)。

我尝试通过执行CGAffineTransFormTranslate(transform, -20, 0)来修复它。

那只是在空格下方“滑动”视图。

这开始感觉像一个错误,还有其他人遇到这个问题吗?

澄清一下,我没有旋转任何视图。我是感应设备的方向:

[[UIDevice currentDevice] orientation]

如果设备(而不是界面)处于横屏状态,则:

[navigationController presentModalViewController:NewView animated:NO]

转换是为了在显示视图之前将我的视图(在IB中创建)旋转到横向模式。

我的转换代码:

    CGRect myFrame = CGRectMake(0, 0, 480, 320);
    CGAffineTransform transform = [[self.myPeriodicTableViewController view] transform];
    transform = CGAffineTransformRotate(transform, degreesToRadians(rotationDirection * 90));
    transform =  CGAffineTransformTranslate(transform, -20, 0);
    [[self.myPeriodicTableViewController view] setFrame: myFrame];
    CGPoint center = CGPointMake(myFrame.size.height/2.0, myFrame.size.width/2.0);
    [[self.myPeriodicTableViewController view] setTransform: transform];
    [[self.myPeriodicTableViewController view] setCenter: center];
最佳回答

好的,我已经弄清楚了。通常情况下,这是由于不止一个问题引起的。这些问题都出现在我推Modal视图之前:

首先,在我的代码中,我正在调整视图的大小,如下所示:

[self.view setFrame: [[UIScreen mainScreen] applicationFrame]];

After you hide the status bar, applicationFrame STILL returns a 320x460 rect (not 320x480). Not sure why, but the following fixes it:

[self.view setFrame: [[UIScreen mainScreen] bounds]];

这是我从屏幕上捕获的整个界面。

全屏UIView,状态栏和导航栏覆盖在顶部

其次,与同一行代码相同,我并没有与正确的视图控制器交流。由于我在一个基于导航的应用程序中,必须与导航控制器对话。否则,导航栏永远不会收到消息将其移到屏幕顶部以覆盖状态栏留下的空间(导致我的空白)。因此,对于这行代码还需要进行一次更正:

  [[self.navigationController view] setFrame: [[UIScreen mainScreen] bounds]];

最后,在所有这些之后,我可以有信心地推出我的模态视图。

问题回答

我觉得您可能需要重新调整中心点:

// Set the center point of the view to the center point of the window s content area.      
self.view.center = CGPointMake(160.0, 240.0);

这是我用于横向视图的完整init方法,而且运行没有问题。只要确保将nib设置为正确的大小即可。

// Implement viewDidLoad to do additional setup after loading the view.
- (void)viewDidLoad {
  [super viewDidLoad];

  // Rotate to landscape
  self.view.frame = CGRectMake(0, 0, 480.0, 320.0);
  if ([[UIApplication sharedApplication] statusBarOrientation] == UIInterfaceOrientationLandscapeRight) {
    CGAffineTransform transform = self.view.transform;

    // Set the center point of the view to the center point of the window s content area.      
    self.view.center = CGPointMake(160.0, 240.0);

    // Rotate the view 90 degrees around its new center point.
    transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
    self.view.transform = transform;
  }
}

None of those work for me. What DID work was the following: I declared a (global) variable in my ViewController.h file

CGRect                  contentRect;

并且在我的ViewController.m文件中的viewDidLoad方法中,我像这样初始化它:

contentRect = self.view.frame;

然后,要关闭选择器,我使用

  [self dismissModalViewControllerAnimated:YES]; // Or any other command 
  [self.view setFrame:contentRect]; // ta-da! all set back to normal.




相关问题
热门标签