在 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