在 removeFromSuperview 和 addSubview 之后界面方向保持不变

Posted

技术标签:

【中文标题】在 removeFromSuperview 和 addSubview 之后界面方向保持不变【英文标题】:interfaceorientation remains same after removeFromSuperview and again addSubview 【发布时间】:2011-03-10 09:30:09 【问题描述】:

我正在使用视图动画在视图之间切换,它可以工作,但我遇到了界面方向问题。

我在窗口上有两个视图。

    authenticationViewCont mainViewCont

两者都有一个按钮,当单击authenticationViewCont 按钮时,我将其删除并显示mainViewCont,反之亦然。

一旦我 addSubview authenticationViewCont.view 并将设备置于纵向模式,然后通过 removeFromSuperview 将其删除,然后我将设备方向更改为横向,然后再次 addSubview authenticationViewCont。它首先以纵向显示动画并在动画后改变方向。

-(void)mainToAuthentication 
    CGRect originalFrame = authenticationViewCont.view.frame;
    CGRect modifiedFrame = originalFrame;
    modifiedFrame.origin.y = originalFrame.size.height;
    // made view out from screen
    authenticationViewCont.view.frame = modifiedFrame;
    // add sub view on top of other views
    [self.window addSubview:authenticationViewCont.view];
    // transiting view from bottom to center of screen
    [UIView animateWithDuration:0.5
        animations:^ authenticationViewCont.view.frame = originalFrame; 
        completion:^(BOOL finished) mainViewCont.view removeFromSuperview; ];


-(void)authenticationToMain 
    CGRect originalFrame = mainViewCont.view.frame;
    CGRect modifiedFrame = originalFrame;
    modifiedFrame.origin.y = -originalFrame.size.height;
    // made view out from screen
    mainViewCont.view.frame = modifiedFrame;
    // add sub view on top of other views
    [self.window addSubview:mainViewCont.view];
    // transiting view from top to center of screen
    [UIView animateWithDuration:0.5
        animations:^ mainViewCont.view.frame = originalFrame; 
        completion:^(BOOL finished) authenticationViewCont.view removeFromSuperview; ];

我怎样才能让它显示在当前界面方向而不是旧界面方向,它是removeFromSuperview

【问题讨论】:

【参考方案1】:

我认为这里的问题是您最初是在另一个 viewController.view 之上添加一个 viewController.view 然后删除旧的。

window 的问题只需要一个 rootViewController。所以窗口只会将旋转事件传递给第一个控制器。这意味着在调用 completionsBlock 之前,您的第二个 viewController 不会获得旋转事件。

解决这个问题的方法是将此切换代码放在窗口上的 rootViewController 中。然后,每当您进行切换时,您都可以传入 rootviewController 的当前旋转,并根据您传递的方向设置您的 authenticationViewController

【讨论】:

以上是关于在 removeFromSuperview 和 addSubview 之后界面方向保持不变的主要内容,如果未能解决你的问题,请参考以下文章

imageview 的 removeFromSuperview 和 .hidden 之间的区别

removeFromSuperView() 和单元格 = 致命错误:在展开可选值时意外发现 nil

UIView 子类中的 self.removeFromSuperview()

自定义 UITableViewCells 和正确使用 prepareForReuse 和 removeFromSuperview

removeFromSuperview() 耗时过长

关于removeFromSuperview