iOS SDK详解之UIScreen
2015-07-19 16:04
573 查看
原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
不知不觉这个专栏已经写了45篇文章了,我想应该至少还有100篇吧。iOS开发的东西太多太多
前言:UIScreen封装访问着硬件显示屏相关的信息。一个iOS设备通畅只有一个硬件显示屏。当然,如果通过USB或者无线投影到其他显示器的时候,就有可能有多个。
对于链接多个屏幕的情况,本文并不会讲解,因为绝大多数App用不到这个功能。
例如
效果
![](http://img.blog.csdn.net/20150719203348841)
这个函数返回遵循
把UIView的一个点进行坐标系转换到固定的UIScreen坐标系
和上文CoordinateSpace唯一不同的是,这个返回的是 portrait-up的坐标系,也就是说是不变的。而CoordinateSpace会随着设备下旋转而改变。
NativeBounds 以像素为单位,固定为portrait-up的坐标系
举例
监听屏幕旋转并且log
竖
横
普通屏幕上
5s 6
6p
preferredMode 偏好的显示模式
availableModes 支持的显示模式
currentMode 当前的显示模式
返回对象是
size 屏幕的大小,以像素为单位
pixelAspectRatio,像素的横纵比
举例
5s输出
blog.csdn.net/hello_hwc
欢迎关注我的iOS SDK详解专栏
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
不知不觉这个专栏已经写了45篇文章了,我想应该至少还有100篇吧。iOS开发的东西太多太多
前言:UIScreen封装访问着硬件显示屏相关的信息。一个iOS设备通畅只有一个硬件显示屏。当然,如果通过USB或者无线投影到其他显示器的时候,就有可能有多个。
对于链接多个屏幕的情况,本文并不会讲解,因为绝大多数App用不到这个功能。
获取主屏幕对象
UIScreen * screen = [UIScreen mainScreen];
截屏
利用的当前在Screen上的部分生成一个UIView,利用这个UIVIew可以做一些全屏的动画。注意,这样的效果是比生成一副图片的效率要高的。- (UIView * nonnull)snapshotViewAfterScreenUpdates:(BOOL)afterUpdates
例如
self.view.backgroundColor = [UIColor redColor]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ UIScreen * mainScreen = [UIScreen mainScreen]; UIView * snapshot = [mainScreen snapshotViewAfterScreenUpdates:NO]; snapshot.frame = CGRectMake(0, 0,mainScreen.bounds.size.width/2,mainScreen.bounds.size.height/2); snapshot.center = self.view.center; [self.view addSubview:snapshot]; self.view.backgroundColor = [UIColor whiteColor]; });
效果
坐标系相关
coordinateSpace
这个函数返回遵循
UICoordinateSpace协议的对象,这个协议封装了坐标系的信息以及坐标系转换的函数。UIView和UIScreen的对象都实现了这个协议。
UIScreen * screen = [UIScreen mainScreen]; id<UICoordinateSpace> coor = [screen coordinateSpace]; [self LogFrame:[coor bounds]];
把UIView的一个点进行坐标系转换到固定的UIScreen坐标系
[myView convertPoint:point toCoordinateSpace:myView.window.screen.fixedCoordinateSpace];
fixedCoordinateSpace
和上文CoordinateSpace唯一不同的是,这个返回的是 portrait-up的坐标系,也就是说是不变的。而CoordinateSpace会随着设备下旋转而改变。
Bounds/NativeBounds
bounds 以点为单位,随着屏幕方向变化而变化NativeBounds 以像素为单位,固定为portrait-up的坐标系
举例
监听屏幕旋转并且log
-(void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ UIScreen * screen = [UIScreen mainScreen]; [self LogFrame:[screen bounds]]; [self LogFrame:[screen nativeBounds]]; }
竖
2015-07-19 18:02:27.417 NewOcTest[2615:147772] 0.000000 0.000000 320.000000 480.000000 2015-07-19 18:02:27.417 NewOcTest[2615:147772] 0.000000 0.000000 640.000000 960.000000
横
2015-07-19 18:02:23.455 NewOcTest[2615:147772] 0.000000 0.000000 480.000000 320.000000 2015-07-19 18:02:23.456 NewOcTest[2615:147772] 0.000000 0.000000 640.000000 960.000000
NativeScale/Scale
从一个point到像素点的转换关系。例如:在普通屏幕上,1个点对应一个像素,5s和6等视网膜显示屏1个点对应4个像素。在6p上,一个点对应9个像素。普通屏幕上
NativeScale//1 Scale //1
5s 6
NativeScale//2 Scale //2
6p
NativeScale//3 Scale //3
亮度
通过修改属性brightness来修改亮度。
Screen Mode
三个属性preferredMode 偏好的显示模式
availableModes 支持的显示模式
currentMode 当前的显示模式
返回对象是
UIScreenMode,包含了
size 屏幕的大小,以像素为单位
pixelAspectRatio,像素的横纵比
举例
UIScreen * screen = [UIScreen mainScreen]; UIScreenMode *perferedMode = screen.preferredMode; NSLog(@"Width:%f Height:%f AspectRatio:%f",perferedMode.size.width,perferedMode.size.height,perferedMode.pixelAspectRatio);
5s输出
2015-07-19 20:42:00.791 NewOcTest[860:31850] Width:640.000000 Height:1136.000000 AspectRatio:1.000000
相关文章推荐
- PAT (Advanced Level) 1004. Counting Leaves (30) 层序遍历,两个queue辅助
- java中queue的使用
- easyui组件解析的实现思路
- Vision Acquisition Software安装后IMAQdx,IMAQ函数不出现的问题
- [APUE]fork后子进程的运行情况
- CodeForces 373B——模拟——Making Sequences is Fun
- DirectUI界面编程(三)从XML文件中加载界面
- DirectUI界面编程(三)从XML文件中加载界面
- DirectUI界面编程(三)从XML文件中加载界面
- [Android UI]分享:简洁大方的自定义的进度条NumberProgressBar
- UIPickerView选择省市
- hdu 1242 Rescue(BFS搜索)
- cell自定义方式一 高度一致时
- UIcolor RGB颜色
- map(function, sequence)
- Android SystemUI源代码分析和修改
- Making Sequences is Fun373B
- RequireJS实例分析
- hdu5286 wyh2000 and sequence 分块处理
- UITableViewQQ列表效果