`

ios屏幕旋转的处理

 
阅读更多

在iOS中的屏幕变换,也就是横竖屏的转换,虽然可以直接使用UIViewController的

– willRotateToInterfaceOrientation:duration:

– willAnimateRotationToInterfaceOrientation:duration:

– didRotateFromInterfaceOrientation:

– willAnimateFirstHalfOfRotationToInterfaceOrientation:duration:

– didAnimateFirstHalfOfRotationToInterfaceOrientation:

– willAnimateSecondHalfOfRotationFromInterfaceOrientation:duration:

这些函数来响应屏幕旋转时候的事件。之所以相应这些事件当然是为了对视图的显示进行处理,这种写法对于视图的处理并不是十分方便。

还有一种方法就是覆盖UIVIew的

-(void)layoutSubviews方法,在该方法中调整自身的frame的属性,但是苹果文档中也说明了,这个方法是用语对自身的子视图做处理的方法。

 

上面的两种方法虽然都可以实现在屏幕旋转时候对视图进行处理,但是并不理想。

实际上,我们可以使用通知来实现。当屏幕的方向变化的时候,只要注册通知,就可以正确处理屏幕的变换了。

首先我们要注册通知,

在哪里注册呢?肯定是在需要变换的视图的initWithFrame方法中注册通知了。

例如:- (id)initWithFrame:(CGRect)frame { 

    self = [super initWithFrame:frame]; 

    if (self) { 

        [[NSNotificationCenter defaultCenter] addObserver:self 

                                                 selector:@selector(changeFrames:) 

                                                     name:UIDeviceOrientationDidChangeNotification 

                                                   object:nil]; 

        self.backgroundColor=[UIColor greenColor]; 

    } 

    return self; 

}

 

之后在写@selector中的函数changeFrames

如下:

-(void)changeFrames:(NSNotification *)notification

{
    NSLog(@"change notification: %@", notification.userInfo);
    float width=[[UIScreen mainScreen]bounds].size.width*[[UIScreen mainScreen] scale];
    float height=[[UIScreen mainScreen]bounds].size.height*[[UIScreen mainScreen] scale];
    if ([[UIDevice currentDevice] orientation]==UIInterfaceOrientationPortrait
        || [[UIDevice currentDevice] orientation]==UIInterfaceOrientationPortraitUpsideDown) 

    {
        NSLog(@"portrait");
        self.frame=CGRectMake(0, 0, height, width);
    }

     else

     {
        NSLog(@"landscape");
        self.frame=CGRectMake(0, 0, width, height);
     }

    NSLog(@"view is %@",self);
}

 

上面使用了scale这个函数,是为了使视图的缩放比例是正确的。

分享到:
评论

相关推荐

    ios-功能完善使用简单的图片浏览器(用过MJPhotoBrowser的朋友可以试试)-- 更新支持屏幕旋转和处理了长图.zip

    功能完善使用简单的图片浏览器, 支持屏幕旋转, 对于使用接口参照了MJPhotoBrowser的设计, 使用方便简单, 动画的效果也还可以, 支持gif, 注意本框架依赖与Kingfisher来加载网络图片 ...

    iOS 横竖屏适配

    iOS 5中处理屏幕旋转的问题,包括几种解决办法,希望能够帮助大家!

    iOS屏幕适配开发实用技巧

    一、旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理...

    IOs 5编程入门经典

    ◆ 介绍如何响应及处理设备旋转以及不同类型的屏幕方向 ◆ 展示如何使用Tabbed、Master-Detail、Single View和Utility等 各种应用程序模板 ◆ 探讨在Master-Detail Application中使用表视图的技术 ◆ 分享关于文件...

    ios开发小技巧

    iOS开发之UIlabel多行文字自动换行 (自动折行) UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 180)]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, ...

    ios开发记录

    //CGAffineTransformMakeRotation 方法的作用就是传进去一个角度(计量单位不是度,是弧度),方法内部帮你生成一个这个角度所对应的旋转矩阵 //rotate 旋转 CGAffineTransform a = ...

    lios-3:Linux智能OCR解决方案

    Lios是一个免费的开源软件,可以使用扫描仪或照相机将打印转换为文本,它还可以从其他来源(例如Pdf,图像,包含图像的文件夹或屏幕截图)的扫描图像中生成文本。 程序为视障人士提供了完全可访问性。 Lios是用...

    AAKeyboardManager:键盘管理器,用于在键盘显示时快速移动视图,专为 iOS 设计

    AAKeyboardManager可让您管理 iOS 应用程序版本>7.1的键盘。 它引入了所谓的动画师,让您在键盘显示或隐藏时上下移动视图或滚动视图的内容。 它适用于 iPad 的旋转、硬件键盘模式和脱离/拆分。 如果默认动画不能...

    LEEAlert:优雅的可自定义Alert ActionSheet

    支持屏幕旋转适应同时可自定义横竖屏最大宽度和高度 支持自定义动作添加可动态调整其样式 支持内部添加的功能项的间距范围设置等 支持圆角设置支持阴影效果设置 支持级别和优先级多个同时显示时根据优先级的顺序依次...

    orientationchangeend:当设备的方向改变并且相关的旋转动画已经完成时,orientationchangeend 事件被触发

    orientationchangeend在跟随方向改变事件的屏幕旋转动画结束时触发。 这是为与移动 Safari 一起使用而开发的,尽管实现的性质使其可以安全地与其他供应商一起使用。 底层实现 无法捕获方向更改事件的结束,因为对...

    Android项目源码开源的 Material Design 豆瓣客户端.zip

    Android 在屏幕旋转时,会销毁视图和 Activity 并重建,此时如何保存视图状态和已加载的数据、正在进行的网络请求即是问题。 Android 对部分视图状态提供了自动保存恢复,而豆芽对于其他需要保存的状态则通过自定义...

    GPU Instancer v1.4.6

    GPU Instancer 是一款开箱即用的工具,可显示屏幕上对象的精确数量,性能表现强劲。只需鼠标点击几下,你就可以实例化你的预设、Unity 地形细节和树木。 GPU Instancer 可提供方便操作的工具,让你省去费力学习计算...

    ScrollingContentViewController:一个Swift库,简化了使视图控制器的视图可滚动的过程

    最重要的是,它可以处理一些棘手的,未记录的边缘情况,包括键盘,导航控制器和设备旋转。 背景 常见的UIKit自动布局任务涉及创建具有固定布局的视图控制器,该布局太大而无法容纳较旧,较小的设备或横向设备,...

    iphone3开发基础教程

    5.1 使用自动调整属性处理旋转 71 5.1.1 指定旋转支持 71 5.1.2 使用自动调整属性设计界面 73 5.1.3 自动调整属性 74 5.1.4 设置按钮的自动调整属性 75 5.2 在旋转时重构视图 76 5.2.1 声明和连接输出口 77 5.2.2 在...

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    Android学习系列教程实例.pdf

    2.3. 旋转屏幕重新加载 Acitivity .......... 33 第 3 章 第三章 ................... 40 3.1. 缓冲界面 ......................................... 40 3.1.1. Demo1 .................................... 40 ...

Global site tag (gtag.js) - Google Analytics