0

我有一个视图 A 和一个视图控制器 B,当视图 A 退出时(设备处于横向,视图 A 覆盖在 B 上),我想将 B 转换为纵向(设备保持在横向,所以 B 在转换之前应该处于横向,但是我已经修复了B的框架,所以如果B出现在风景中,屏幕的一部分应该是黑暗的并且不负责任)。但是我在屏幕底部得到一个不负责任的黑色区域。视图 B 在此屏幕的一个较小窗口中显示,我可以滚动它。我的转换代码为:

    CGFloat r = 1.5 * M_PI;
    CGAffineTransform t;
    t = CGAffineTransformMakeRotation( r );
    UIApplication *application = [ UIApplication sharedApplication ];
   self.view.frame = frame;
   self.view.center = CGPointMake(frame.origin.x + ceil(frame.size.width/2), frame.origin.y + ceil(frame.size.height/2));
self.view.bounds = [[ UIScreen mainScreen ] bounds ];
    t = CGAffineTransformTranslate(t, 130, 105);
    [self.view setTransform:t];

    [ application setStatusBarOrientation: UIDeviceOrientationPortrait animated: YES ];
4

1 回答 1

0

你的代码有点奇怪,我想这不是你的代码源的复制/粘贴:你用 double 初始化 t 而它的 CGAffineTransform r 没有声明 frame 没有声明

对于您的问题,不同点:如果在 UIScreen 的视图边界上应用转换包含 statusBar 的 20 点高度,请不要使用 UIView 的 frame 属性,而是使用 UIScreen 的 applicationFrame 方法为什么要设置中心然后应用翻译 ?

如果您的 viewController 是您的 rootViewController (因此它的视图是窗口的直接子视图),您可以尝试以下操作:

[self.view setTransform:CGAffineTransformIdentity];
[self.view setCenter:CGPointMake(160, 240)];
[self.view setBounds:CGRectMake(0, 0, 320, 460)];

如果您的 viewController 不是您的 rootViewController,您确实必须设置旋转,但中心取决于超级视图边界

于 2012-07-11T16:24:40.550 回答