IOS6 rotation
来源:互联网 发布:软件无法连接服务器 编辑:程序博客网 时间:2024/06/05 07:29
iOS 6的rotation改变了很多。先来看看官方的描述 http://www.bgr.com/2012/08/06/ios-6-beta-4-change-log-now-available/
知识点:
*UIViewController的shouldAutorotateToInterfaceOrientation方法被deprecated。在ios6里,是使用supportedInterfaceOrientations and shouldAutorotate 2个方法来代替shouldAutorotateToInterfaceOrientation。注意:为了向后兼容iOS 4 and 5,还是需要在你的app里保留shouldAutorotateToInterfaceOrientation。
for ios 4 and 5, 如果没有重写shouldAutorotateToInterfaceOrientation,那么对于iphone来讲,by default是只支持portrait,不能旋转。
for ios 6, 如果没有重写shouldAutorotate and supportedInterfaceOrientations,by default, iphone则是"可以旋转,支持非upside down的方向",而ipad是"可以选择,支持所有方向"
example 1: for ios 4 and 5, iphone device, 若要"可以旋转,支持非upside down的方向",则可以在view controller里
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return (interfaceOrientation != UIDeviceOrientationPortraitUpsideDown);
- }
example 2: for ios 6, iphone device, 若要“不能旋转,只支持portait",则可以在view controller里
- - (BOOL)shouldAutorotate
- {
- return NO;
- }
example 3: for ios 6, ipad device, 若要“可以旋转,只支持landscape",则可以在view controller里
- -(NSUInteger)supportedInterfaceOrientations{
- return UIInterfaceOrientationMaskLandscape;
- }
- - (BOOL)shouldAutorotate
- {
- return YES;
- }
* 在iOS 4 and 5,都是由具体的view controller来决定对应的view的orientation设置。而在iOS 6,则是由top-most controller来决定view的orientation设置。
举个例子:你的app的rootViewController是navigation controller "nav", 在”nav"里的stack依次是:main view -> sub view > sub sub view,而main view里有一个button会present modal view "modal view".
那么for ios 4 and 5,在ipad里,如果你要上述view都仅支持横屏orientation,你需要在上面的main view, sub view, sub sub view, model view里都添加
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
- return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation==UIInterfaceOrientationLandscapeRight);
- }
而对于iOS6, 由于是由top-most controller来设置orientation,因此你在main view, sub view, sub sub view里添加下面的代码是没有任何效果的,而应该是在nav controller里添加下列代码。而modal view则不是在nav container里,因此你也需要在modal view里也添加下列代码。
- -(NSUInteger)supportedInterfaceOrientations{
- return UIInterfaceOrientationMaskLandscape;
- }
- - (BOOL)shouldAutorotate
- {
- return YES;
- }
注意:
*你需要自定义一个UINavigationController的子类for "nav controller",这样才可以添加上述代码。
* 和navigation controller类似,tab controller里的各个view的orientation设置应该放在tab controller里
for ios6的top-most controller决定orientation设置,导致这样一个问题:在 top-most controller里的views无法拥有不相同的orientation设置。例如:for iphone, 在nav controller里,你有main view, sub view and sub sub view,前2个都只能打竖,而sub sub view是用来播放video,可以打横打竖。那么在ios 4 and 5里可以通过在main view and sub view的shouldAutorotateToInterfaceOrientation里设置只能打竖,而在sub sub view的shouldAutorotateToInterfaceOrientation设置打竖打横即可。而在ios 6里则无法实现这种效果,因为在main view, sub view and sub sub view的orientation设置是无效的,只能够在nav controller里设置。那么你可能想着用下列代码在nav controller里控制哪个view打竖,哪个view打横
- -(NSUInteger)supportedInterfaceOrientations{
- if([[self topViewController] isKindOfClass:[SubSubView class]])
- return UIInterfaceOrientationMaskAllButUpsideDown;
- else
- return UIInterfaceOrientationMaskPortrait;
- }
是的,这样可以使得在main view and sub view里无法打横,而sub sub view横竖都行。但问题来了,如果在sub sub view时打横,然后back to sub view,那么sub view是打横显示的!
目前想到的解决方法只能是把sub sub view脱离nav controller,以modal view方式来显示。这样就可以在modal view里设置打横打竖,而在nav controller里设置只打竖。
* 说了那么多,其实如果你的app的所有view的orientation的设置是统一的,那么你可以简单的在plist file里设置即可,不用添加上面的代码。而如果你添加了上面的代码,就会覆盖plist里orientation的设置。
* in iOS 6, 当view controller present时,不会call willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration:, and didRotateFromInterfaceOrientation: methods,只有在发生rotate的时候才会call
- IOS6 rotation
- IOS6 rotation issue
- ios6:UIImagePickerController & Rotation
- ios6 自动旋转 (auto rotation)
- Rotation transformation
- 2.rotation
- string rotation
- transform.rotation
- iOS rotation
- Rotation Matrix
- array rotation
- android rotation
- iOS Rotation
- rotation*vector3
- imutils Rotation
- Rotation representation
- Rotation effect
- IOS6横屏
- Perl profiling笔记
- epoll使用
- [CCIE笔记]MPLS_VPN
- [CCIE笔记]MPLS(1)
- C语言编程过程详解
- IOS6 rotation
- Matlab多行注释
- xcode4.3下制作framework——(xcode4.2下也通用)[亲测:xcode4.5也可以]
- 红桃皇后定律
- [CCIE笔记]BGP知识点汇总
- mac 安装window 虚拟机
- Linux 分区指南《Ubuntu Server 最佳方案》
- 简明x86汇编语言教程(3)
- File Delete Absolutely 获得 100% CLEAN Softpedia award