`

ios屏幕旋转

    博客分类:
  • ios
 
阅读更多

原文:http://blog.sina.com.cn/s/blog_6c9f384f0101538v.html

 

今天遇到一个很郁闷的问题:新做的ipad程序中,界面居然在未作任何配置的情况下不支持旋转了。

通过在uitabbarcontroller的旋转事件添加nslog发现,其完全没有被触发。

通过网上查资料 在cocochina上找到了答案

   是位hanzengbo 的朋友的解答 原文如下

昨天忙乎了一天,没搞定。今天早上终于搞定了。贴出来希望能对遇到相似问题的哥们有用。前面搜到的答案都说是uitabbarcontroller的问题。但是我重新写了个小程序,也使用了tabbar这个控件,发现每个窗体也是能触发旋转事件的。昨天在tabbarcontroller这个地方弄了一天,一直没有弄成功。但是有一点可以肯定,就是旋转事件是被父窗体劫持了,从而使得tabbar中的每个窗体不能接受到旋转事件。今天来重新看了一下程序,发现问题在于我的程序开始有个启动窗体,在delegate文件中,我把tabbarcontroller的view加进了这个启动窗体,所以整个程序的父窗体就是这个启动窗体。我在启动窗体的旋转事件中打印log信息,能够成功。为了让tabbar的每个view能够响应旋转事件,就只能让他们成为单独的父窗体。所以我修改启动窗体代码,首先在delegate中addsubview 启动窗体,然后addsubview tabbar的窗体,在启动画面显示一定时间后,就把启动窗体从window中remove掉,这样下面的tabbar窗体就显示出来了,而且tabbar的窗体成为了父窗体,能够正常接受到旋转时间。

 

和我一样,我也有登录窗 嘿嘿 太巧了 

[[[self.view.superview subviews] objectAtIndex:0] removeFromSuperView];

搞定 。

界面正常了 。ios要学的东西真很多,为自己鼓劲 特此记录


注:

 

要翻转的时候,首先响应的方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
return YES则支持翻转,NO则不支持。

紧接着

-(void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

被调用。这个方法是发生在翻转开始之前。一般用来禁用某些控件或者停止某些正在进行的活动,比如停止视频播放。
再来是

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration

这个方法发生在翻转的过程中,一般用来定制翻转后各个控件的位置、大小等。可以用另外两个方法来代替:willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:   和  willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

最后调用的是

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

这个方法发生在整个翻转完成之后。一般用来重新启用某些控件或者继续翻转之前被暂停的活动,比如继续视频播放。



 

UIViewController没有随着设备一起旋转的原因   转载

引用地址:http://blog.sina.com.cn/s/blog_6de189920101266h.html
对于iPhone app,UIViewController类提供了基本的视图管理模式。当设备改变方向的时候view controller的视图会自动随之旋转的。如果视图和子视图的autoresizing属性设置是对的,这时候视图又没有随着设备一起旋转,可能是以下的原因:

1.view controller没有完成代理方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;

也要实现了shouldAutorotateToInterfaceOrientation方法,同时shouldAutorotateToInterfaceOrientation方法要返回YES来支持所有的旋转方向

 

2.view controller的UIView属性嵌入在UIWindow中,并非是一个附加的view controller

你可能会发现shouldAutorotateToInterfaceOrientation方法只会在view controller启动的时候被调用,不会因为设置的旋转而在被调用。这是因为view controller束缚着他们所管理的视图,view controller是用来处理时间的响应链的一部分。view controller是从UIResponder继承而来,同时他被插入到他所管理的视图和他的superview之间。因此,通常的做法是在你的app中有一个主view controller来作为响应链的一部分。通常来说会添加一个主view controller,例如UINavigationController, UITabBarController或者UIViewControllerUIWindow

例如

[myWindow addSubview:primaryViewController.view]; 

如果你添加了另外一个view controller的UIView属性到UIWindow(anotherController和主view controller在同一个等级上)

[myWindow addSubview:anotherController.view];

anotherController将不会接受旋转事件,只有第一个view controller(primaryViewController)会接受旋转事件。

 

3.你添加了view controller的UIView属性到UIWindow作为subview,但是过早的release它。

UIWindow会retain视图,而不是view controller。你不能过早的release他。UIApplicationDelegate子类中定义他为retain属性。

 

4.在UITabBarController或者UINavigationController中的子view controller没有对同一方向的支持。

为了确保所有的子view controller旋转正确,你的每一个view controller,每一个tab或者额navigation都要完成shouldAutorotateToInterfaceOrientation,而且必须支持对于同一方向的旋转,也就是说对于同一方向的位置要返回为YES。

 

5.重写-(id)init:或者 -(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle 方法的时候没有调用super。

对于对象的初始化,在你的view controller的init或者initWithNibName方法中必须要调用super。

/////////////

音频视频播放:http://blog.sina.com.cn/s/blog_6f1a34260100tlvx.html

////////转载

 iphone提供了优秀的重力加速计,能够很灵敏地感应到手机的屏幕状态。在我们开发iphone应用时,为了提高用户体验,会来监听屏幕的当前状态。
对于UIViewController来说,提供了好几种方法。

    最简单的就是我们可以使用Interface Builder这个工具来帮助我们实现简单的屏幕界面适配,只需要在IB 中的Size Insepector 中通过对Autosizing 的
设置来实现。但这只能做到简单界面的实现,如果界面比较复杂,可能就需要我们通过代码来实现。

    第二个我们可以通过对 willAnimateRotationToInterfaceOrientation:duration:这个方法的重写来配置我们的自动旋转。

    第三,你也可以通过对willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:与willAnimateSencondHalfOfRotationToInterfaceOrientation:duration:两个方法的重写来更加精细地配置我们的自动旋转视图。特别需要注意 的就是前一个方法在执行时,此时的UIInterfaceOrientation仍然是旋转前的原有值,只有后一个方法在执行时UIInterfaceOrientation才是屏幕旋转后的值。

分享到:
评论

相关推荐

    IOS屏幕旋转.zip

    "IOS屏幕旋转.zip"这个压缩包提供了一个解决方案,它着重于在不使用私有API的情况下,通过切换UIViewController来处理屏幕方向的变化,这在需要在App内部支持特定游戏或组件的特定屏幕方向时非常有用。 首先,我们...

    iOS5.1与iOS6.0屏幕旋转兼容demo

    在iOS开发中,屏幕旋转是一个常见的功能需求,但随着系统版本的更新,处理方式也会有所变化。本示例"iOS5.1与iOS6.0屏幕旋转兼容demo"旨在帮助开发者解决在不同iOS版本间实现屏幕旋转时可能遇到的问题。 在iOS 5.1...

    ios屏幕旋转ios屏幕旋转

    在iOS开发中,屏幕旋转是用户体验中的一个重要环节。iOS设备支持不同方向的显示,以便用户在各种场景下舒适地使用应用。本篇文章将深入探讨iOS系统中的屏幕旋转机制,包括如何处理屏幕旋转事件、实现自动旋转以及...

    ios_屏幕旋转

    iOS屏幕旋转是iOS开发中经常需要处理的功能,主要涉及到用户界面的方向变化,如从竖屏变为横屏,或者反过来。在iOS开发中,实现屏幕旋转控制主要有两种方法,一种是全局控制,另一种是局部控制。接下来,我们将详细...

    iOS屏幕旋转与锁屏的示例代码

    iOS屏幕旋转和锁屏的处理涉及到多个层次的控制器管理和状态栏的控制。开发者可以通过`UIViewController`的生命周期方法以及`UIInterfaceOrientationMask`来实现旋转方向的控制和视图布局的调整。对于状态栏的显示和...

    关于iOS屏幕旋转的一些注意事项

    总结来说,实现iOS屏幕旋转的关键在于正确配置全局设置,并在恰当的控制器中实现旋转方法。理解不同iOS版本中旋转方法的调用顺序和处理逻辑至关重要,因为这直接影响到旋转行为的正确性。在实际开发过程中,根据设备...

    ios-屏幕旋转demo.zip

    在iOS开发中,屏幕旋转(Screen Orientation)是用户体验的重要组成部分,尤其在移动设备上,用户经常需要在横屏和竖屏之间切换以适应不同的应用场景。本示例"ios-屏幕旋转demo.zip"提供了关于如何在iOS应用中实现...

    Flutter旋转屏幕,Flutter旋转屏幕

    在Flutter框架中,屏幕旋转是移动应用开发中的一个重要特性,允许用户根据个人偏好或设备方向改变应用程序的布局。本文将深入探讨如何在Flutter中处理屏幕旋转,并提供相关的实践技巧。 一、屏幕方向感知 Flutter...

    iOS强制屏幕旋转兼容iOS11到iOS17

    在iOS系统中,屏幕旋转功能默认是根据应用的设置来决定是否支持横屏或竖屏显示的。然而,有时开发者可能需要实现一个特定的功能,使得应用程序在任何版本的iOS(从iOS11到iOS17)上都能强制进行屏幕旋转。这种需求在...

    ios5旋转屏幕

    在iOS开发中,屏幕旋转是用户体验的重要组成部分。iOS 5引入了新的屏幕旋转管理机制,与之前的版本有所不同。本文将详细解析iOS 5中的屏幕旋转处理,并基于提供的“LandscapeDemoIos5”项目文件进行讲解。 首先,...

    ios全局竖屏部分横屏

    综上所述,iOS全局竖屏部分横屏的实现涉及对屏幕方向的理解、自动旋转机制的掌握以及在特定界面进行定制。通过适当的委托设置和控制器的适配,我们可以灵活地控制应用中每个界面的旋转行为,满足不同场景的需求。在...

    ios-屏幕旋转的对于某个页面不是系统设置(是自定义的).zip

    在iOS开发中,屏幕旋转是一种常见的用户界面交互方式,它涉及到设备方向的改变,比如从竖屏转向横屏。在iOS应用中,我们通常需要对特定的页面或视图控制器实现自定义的屏幕旋转逻辑,而不是简单地依赖系统的自动设置...

    ios6屏幕旋转和支持iphone5的4inch屏幕例子

    ios6.0的屏幕旋转机制和之前的版本有很大的不同了,这个资源就是我自己写的支持ios6.0屏幕旋转的例子。是navigationController作为rootViewController的例子,通过重写一个navigationController类来实现。对屏幕旋转...

    iOS适应屏幕旋转的悬浮窗

    在iOS开发中,创建一个可适应屏幕旋转的悬浮窗是一个常见的需求,这通常涉及到UIWindow的使用和屏幕方向的管理。下面将详细讲解如何利用UIWindow实现这样的功能,并结合"FloatWindowDemo"这个示例项目进行说明。 ...

    《源代码》屏幕旋转

    在iOS开发中,屏幕旋转是一个重要的用户界面交互功能,尤其在iOS6及其后续版本中,对屏幕旋转的处理有了更具体的规定和优化。本篇主要围绕"《源代码》屏幕旋转"这一主题,深入探讨iOS6下的屏幕旋转实现以及相关的...

    [IOS]无xib屏幕旋转,完整demo

    在iOS开发中,屏幕旋转是一个常见的需求,但如果没有使用XIB(Interface Builder)文件,处理起来可能会相对复杂一些。这个“[IOS]无xib屏幕旋转,完整demo”提供了无界面构建器(XIB)环境下处理设备旋转的实例,...

    ios demo,UIInterfaceOrientation,屏幕旋转的实例

    总之,这个“ios demo, UIInterfaceOrientation, 屏幕旋转的实例”是一个非常实用的学习资源,它帮助开发者了解如何在iOS应用中处理屏幕旋转,包括监听设备方向变化、设置视图控制器的旋转行为以及调整界面布局。...

    ios旋转坐标设置

    通过上述方法,可以在iOS应用中实现屏幕旋转时界面布局的自适应调整。这对于提升用户体验非常重要,特别是在用户可能会在不同方向下使用设备的应用场景中。开发者可以根据自己的需求调整`...

Global site tag (gtag.js) - Google Analytics