在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这个函数,是为了使视图的缩放比例是正确的。
分享到:
相关推荐
功能完善使用简单的图片浏览器, 支持屏幕旋转, 对于使用接口参照了MJPhotoBrowser的设计, 使用方便简单, 动画的效果也还可以, 支持gif, 注意本框架依赖与Kingfisher来加载网络图片 ...
iOS 5中处理屏幕旋转的问题,包括几种解决办法,希望能够帮助大家!
一、旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理...
◆ 介绍如何响应及处理设备旋转以及不同类型的屏幕方向 ◆ 展示如何使用Tabbed、Master-Detail、Single View和Utility等 各种应用程序模板 ◆ 探讨在Master-Detail Application中使用表视图的技术 ◆ 分享关于文件...
iOS开发之UIlabel多行文字自动换行 (自动折行) UIView *footerView = [[UIView alloc]initWithFrame:CGRectMake(10, 100, 300, 180)]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 100, 300, ...
//CGAffineTransformMakeRotation 方法的作用就是传进去一个角度(计量单位不是度,是弧度),方法内部帮你生成一个这个角度所对应的旋转矩阵 //rotate 旋转 CGAffineTransform a = ...
Lios是一个免费的开源软件,可以使用扫描仪或照相机将打印转换为文本,它还可以从其他来源(例如Pdf,图像,包含图像的文件夹或屏幕截图)的扫描图像中生成文本。 程序为视障人士提供了完全可访问性。 Lios是用...
AAKeyboardManager可让您管理 iOS 应用程序版本>7.1的键盘。 它引入了所谓的动画师,让您在键盘显示或隐藏时上下移动视图或滚动视图的内容。 它适用于 iPad 的旋转、硬件键盘模式和脱离/拆分。 如果默认动画不能...
支持屏幕旋转适应同时可自定义横竖屏最大宽度和高度 支持自定义动作添加可动态调整其样式 支持内部添加的功能项的间距范围设置等 支持圆角设置支持阴影效果设置 支持级别和优先级多个同时显示时根据优先级的顺序依次...
orientationchangeend在跟随方向改变事件的屏幕旋转动画结束时触发。 这是为与移动 Safari 一起使用而开发的,尽管实现的性质使其可以安全地与其他供应商一起使用。 底层实现 无法捕获方向更改事件的结束,因为对...
Android 在屏幕旋转时,会销毁视图和 Activity 并重建,此时如何保存视图状态和已加载的数据、正在进行的网络请求即是问题。 Android 对部分视图状态提供了自动保存恢复,而豆芽对于其他需要保存的状态则通过自定义...
GPU Instancer 是一款开箱即用的工具,可显示屏幕上对象的精确数量,性能表现强劲。只需鼠标点击几下,你就可以实例化你的预设、Unity 地形细节和树木。 GPU Instancer 可提供方便操作的工具,让你省去费力学习计算...
最重要的是,它可以处理一些棘手的,未记录的边缘情况,包括键盘,导航控制器和设备旋转。 背景 常见的UIKit自动布局任务涉及创建具有固定布局的视图控制器,该布局太大而无法容纳较旧,较小的设备或横向设备,...
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 在...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...
2.3. 旋转屏幕重新加载 Acitivity .......... 33 第 3 章 第三章 ................... 40 3.1. 缓冲界面 ......................................... 40 3.1.1. Demo1 .................................... 40 ...