在iPad上使用一个UIViewController和两个XIB处理方向更改

在iPad上使用一个UIViewController和两个XIB处理方向更改,第1张

概述我想使用一个UIViewController和两个XIB来处理一个iPad应用程序的方向改变,就是说MenuView和MenuViewLandscape. 那么,在MenuViewController的willRotateToInterfaceOrientation方法中,如何在不使用另一个控制器进行横向模式的情况下更改XIB? 我使用以下代码: if( toInterfaceOrientatio 我想使用一个UIVIEwController和两个XIB来处理一个iPad应用程序的方向改变,就是说MenuVIEw和MenuVIEwLandscape.

那么,在MenuVIEwController的willRotatetoInterfaceOrIEntation方法中,如何在不使用另一个控制器进行横向模式的情况下更改XIB?

我使用以下代码:

if( toInterfaceOrIEntation != UIInterfaceOrIEntationPortrait ){    MenuVIEwController *landscape = [[MenuVIEwController alloc]                                         initWithNibname: @"MenuVIEwLandscape"                                        bundle:nil                                     ];            [self setVIEw:landscape.vIEw];}else {    MenuVIEwController *potrait = [[MenuVIEwController alloc]                                      initWithNibname: @"MenuVIEw"                                     bundle:nil                                   ];            [self setVIEw:potrait.vIEw];}

但是,当我去横向浏览XIB时,景观视图控件没有正确旋转.

解决方法 我不知道这个实现有什么奇怪的副作用,但尝试这样的东西,看看它是否适用于你:

-(voID)willRotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)orIEntation duration:(NSTimeInterval)duration {    if (UIInterfaceOrIEntationIsPortrait(orIEntation)) {        [[NSBundle mainBundle] loadNibnamed:@"MenuVIEw" owner:self options:nil];        if (orIEntation == UIInterfaceOrIEntationPortraitUpsIDeDown) {            self.vIEw.transform = CGAffinetransformMakeRotation(M_PI);        }    } else if (UIInterfaceOrIEntationIsLandscape(orIEntation)){        [[NSBundle mainBundle] loadNibnamed:@"MenuVIEwLandscape" owner:self options:nil];        if (orIEntation == UIInterfaceOrIEntationLandscapeleft) {            self.vIEw.transform = CGAffinetransformMakeRotation(M_PI + M_PI_2);        } else {            self.vIEw.transform = CGAffinetransformMakeRotation(M_PI_2);        }    }}

这假定您的MenuVIEw和MenuVIEwLandscape XIB中的文件所有者都设置为MenuVIEwController,并且视图出口也设置在两个XIB中.当使用loadNibnamed时,所有出口都应该在轮换时正确重新连接.

如果您正在为iOS 4构建,还可以使用以下命令替换loadNibnamed行:

UINib *nib = [UINib nibWithNibname:@"MenuVIEw" bundle:nil];UIVIEw *portraitVIEw = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];self.vIEw = portraitVIEw;

UINib *nib = [UINib nibWithNibname:@"MenuVIEwLandscape" bundle:nil];UIVIEw *landscapeVIEw = [[nib instantiateWithOwner:self options:nil] objectAtIndex:0];self.vIEw = landscapeVIEw;

这些假设您想要显示的UIVIEw立即在XIB中的文件的所有者和第一个响应者代理对象之后.

然后,您只需要确保视图在界面方向正确旋转.对于不是默认纵向方向的所有视图,通过设置视图的transform属性并使用CGAffinetransformMakeRotation()与上述示例中所示的适当值进行旋转.

单独的旋转可能会解决您的问题,而不需要额外加载NIB.但是,加载MenuVIEwController的全新实例并将其视图设置为现有的MenuVIEwController视图可能会在生命周期和循环事件中引起一些奇怪的行为,因此您可能会更安全地尝试上述示例.当您只需要从中查看视图时,他们也可以节省创建新的MenuVIEwController实例的麻烦.

希望这可以帮助!

贾斯汀

总结

以上是内存溢出为你收集整理的在iPad上使用一个UIViewController和两个XIB处理方向更改全部内容,希望文章能够帮你解决在iPad上使用一个UIViewController和两个XIB处理方向更改所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1083403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存