`
119568242
  • 浏览: 427022 次
  • 性别: Icon_minigender_1
  • 来自: 深圳/湛江
社区版块
存档分类
最新评论

[iOS] iOS 6的Rotation

    博客分类:
  • ios
 
阅读更多

keyword:*UIViewController的shouldAutorotateToInterfaceOrientation方法被deprecated。在ios6里,是使用supportedInterfaceOrientations and shouldAutorotate 2个方法来代替

=========================

转自:http://www.2cto.com/kf/201209/156634.html

=========================

知识点:

*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里
[cpp]
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
return (interfaceOrientation != UIDeviceOrientationPortraitUpsideDown); 

example 2: for ios 6, iphone device, 若要“不能旋转,只支持portait",则可以在view controller里
[cpp] 
- (BOOL)shouldAutorotate 

    return NO; 

example 3: for ios 6, ipad device, 若要“可以旋转,只支持landscape",则可以在view controller里
[cpp] 
-(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里都添加

[cpp] 
- (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里也添加下列代码。
[cpp] 
-(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打横

[cpp] 
-(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

分享到:
评论

相关推荐

    iOS 3D星球效果demo

    6. **互动反馈**:良好的交互体验是关键。Demo可能通过手势识别(如UIPanGestureRecognizer)来检测用户的滑动动作,并实时响应,确保星球滚动的流畅性。 7. **数据结构和算法**:为了高效地管理和渲染大量星球,...

    IOS应用源码——Rotation.rar

    《iOS应用源码——Rotation深度解析》 在iOS开发中,屏幕旋转(Rotation)是一项重要的功能,它涉及到用户界面的动态调整,以适应设备的不同方向。"Rotation.rar"压缩包包含了一个专门研究这一主题的iOS应用源码,...

    IOS6 开发基础教程 (英文版)

    《iOS6 开发基础教程(英文版)》是一本专注于苹果iOS6版本的软件开发入门教程书籍。由于iOS6版本的软件开发环境与iOS5相比有着显著的差别,即便是有iOS5开发经验的开发者也需要通过学习这本书来掌握iOS6的开发。...

    《iOS传感器应用开发最佳实践》源码

     第2章介绍了手势识别,通过两种方式实现iOS常用手势,这些手势包括了:Tap(点击)、Long Press(长按)、Pan(拖动)、Swipe(滑动)、Rotation(旋转)和Pinch(手指的合拢和张开)。  第3章介绍了加速度计与...

    IOS核心动画-左右摆动Demo

    创建一个`CABasicAnimation`实例,设置其`keyPath`为`position.x`或`transform.rotation`,这取决于我们选择哪种方式来实现摆动效果。`keyPath`指定了动画将作用于的CALayer的哪个属性。 2. **动画参数设置** - `...

    IOS6基础(清晰版)

    IOS6开发涉及了iOS SDK的探索,涵盖了从基础到进阶的多个方面。具体来说,书中首先介绍了开发者如何开始使用iOS 6进行移动应用开发。它按照章节顺序,逐步深入地引导读者理解苹果iOS系统下的应用程序开发流程。 第...

    IOS 基本动画(旋转、移动、闪烁、缩放等)

    在iOS开发中,动画是提升用户体验的关键因素之一。本文将深入探讨如何在iOS平台上实现基本的动画效果,包括旋转、移动、闪烁以及缩放。这些动画效果能够使用户界面更加生动,增强应用的视觉吸引力。 ### 旋转动画 ...

    ios-各种文字小型动画.zip

    在iOS开发中,视图动画是提升用户体验的重要手段之一,特别是在设计吸引人的用户界面时,文字小型动画可以起到画龙点睛的作用。"ios-各种文字小型动画.zip"这个压缩包很可能包含了多种不同类型的文本动画实现,比如...

    ios-turnTable.zip

    6. 注意处理动画结束后的状态,如果需要停留在特定角度,可能需要手动设置layer的transform属性,因为动画结束后会恢复到原始状态。 由于代码未进行封装,开发者需要自行理解并修改代码,使其适应自己的项目需求。...

    iOS手势(全)

    5. **旋转(Rotation)**: 通过两个手指同时在屏幕上转动,可以旋转内容,如图片或页面。这种手势在查看照片或文档时特别有用,允许用户调整图像的方向。 6. **拖拽(Drag)**: 拖拽是指将一个元素从一处移动到...

    IOS应用源码Demo-手势和触摸-毕设学习.zip

    而手势识别则是对这些触摸事件的高级抽象,例如轻扫(Swipe)、捏合(Pinch)、旋转(Rotation)和长按(Long Press)等,它们由手势识别器(Gesture Recognizer)类来处理。 在iOS中,UIKit框架提供了多种内置的...

    Android 高仿IOS加载数据时圆形的进度条

    这可以通过创建一个ObjectAnimator对象,改变View的rotation属性来实现。当数据加载时,动画开始,数据加载完成时,动画停止。 3. **进度控制**: 实现进度控制功能,需要设置一个公开的方法,如setProgress(),...

    ios登录开门特效.zip

    如果是旋转效果,需要改变transform的scale和rotation。 4. **动画参数**:设置动画的duration(持续时间)、timingFunction(时间曲线)等,以控制动画的流畅度和节奏感。你可以选择线性、easeInEaseOut等预设曲线...

    IOS四方块动画

    let animation = CAKeyframeAnimation(keyPath: "transform.rotation.z") animation.values = [0, M_PI_2, M_PI, M_PI_2] animation.keyTimes = [0, 0.5, 1] animation.duration = 2.0 animation.fillMode = ....

    ios-3D旋转.zip

    在iOS开发中,3D旋转是一种常见的视图动画效果,它可以为用户界面带来生动和立体的感受。本项目“ios-3D旋转.zip”显然聚焦于如何在iOS应用中实现这样的特效,尤其是通过代码来操控视图进行3D旋转。下面我们将深入...

    iOS 图片旋转动画

    6. **移除动画** 如果需要在某个时刻移除动画,可以使用以下代码,但此时图片会保持最后的状态。 ```swift imageView.layer.removeAnimation(forKey: "rotationAnimation") imageView.layer.removeAnimation(for...

    ios-弹钢琴.zip

    iOS SDK提供了多种内置手势,如轻扫(Swipe)、捏合(Pinch)、旋转(Rotation)、拖拽(Pan)以及点击(Tap)等。在这个"弹钢琴"项目中,开发者可能主要使用了Tap手势,因为弹钢琴的动作主要是对琴键进行单击。 ...

    ios-圆圈动画.zip

    在iOS开发中,动画是提升用户体验的关键元素之一。"ios-圆圈动画.zip"这个压缩包文件显然包含了一个实现特定圆圈动画的示例代码或资源。这种动画通常被用作下拉刷新或者加载更多数据时的视觉反馈,让用户知道应用...

    ios-水印背景.zip

    6. **性能优化**:在处理大量图片时,性能是一个重要的考量因素。YHWaterMark通过使用Core Graphics进行绘图,减少了内存占用,提高了效率。 7. **GitHub仓库**:项目的Demo地址是...

    ios练习按钮控制图片操作

    self.imageView.transform = CGAffineTransform(rotationAngle: .pi / 2) } ``` 在实际应用中,可能需要结合多个动画,例如同时移动和缩放图片。这可以通过嵌套动画或者使用`UIView.animate(withDuration:delay:...

Global site tag (gtag.js) - Google Analytics