iOS 8 牛刀小试

简介: iOS 8 牛刀小试   1、UIWindow的bounds发生变化(Window本身发生了旋转)   iOS 7之前Window的bounds不会随着方向而变化,但是到了iOS 8以后,随着设备方向的旋转,window.bounds.size.width和window.bounds.size.height也会相应发生变化。

iOS 8 牛刀小试

 

1、UIWindow的bounds发生变化(Window本身发生了旋转)

  iOS 7之前Window的bounds不会随着方向而变化,但是到了iOS 8以后,随着设备方向的旋转,window.bounds.size.width和window.bounds.size.height也会相应发生变化。

  做个很简单的测试,代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(orientationChanged:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];
    
    return YES;
}

- (void)orientationChanged:(NSNotification*)noti {
    
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    NSString *orientationDes = nil;
    switch (orientation) {
        case UIDeviceOrientationLandscapeLeft:
            orientationDes = @"UIInterfaceOrientationLandscapeRight";
            break;
        case UIDeviceOrientationLandscapeRight:
            orientationDes = @"UIInterfaceOrientationLandscapeLeft";
            break;
        case UIDeviceOrientationPortrait:
            orientationDes = @"UIInterfaceOrientationPortrait";
            break;
        case UIDeviceOrientationPortraitUpsideDown:
            orientationDes = @"UIInterfaceOrientationPortraitUpsideDown";
            break;
        default:
            orientationDes = @"";
            break;
    }
    
    NSLog(@"system ver: %@, \rorientaion: %@, \rwindow bounds: %@",
          [UIDevice currentDevice].systemVersion,
          orientationDes,
          NSStringFromCGRect(self.window.bounds));
}

  示例代码很简单,新建一个工程,然后在delegate中直接添加以上代码即可。

  iOS 8上运行结果为:

2014-06-04 09:26:32.016 SviOS8[4143:61114] system ver: 8.0, 
orientaion: UIInterfaceOrientationLandscapeRight, 
window bounds: {{0, 0}, {320, 480}}
2014-06-04 09:26:34.788 SviOS8[4143:61114] system ver: 8.0, 
orientaion: UIInterfaceOrientationPortrait, 
window bounds: {{0, 0}, {480, 320}}
2014-06-04 09:26:35.791 SviOS8[4143:61114] system ver: 8.0, 
orientaion: UIInterfaceOrientationLandscapeLeft, 
window bounds: {{0, 0}, {320, 480}}
2014-06-04 09:26:47.468 SviOS8[4143:61114] system ver: 8.0, 
orientaion: UIInterfaceOrientationPortraitUpsideDown, 
window bounds: {{0, 0}, {480, 320}}

  iOS 7及之前的版本运行结果为:

2014-06-04 09:39:00.527 SviOS8[4380:70b] system ver: 7.0.3, 
orientaion: UIInterfaceOrientationLandscapeRight, 
window bounds: {{0, 0}, {320, 480}}
2014-06-04 09:39:00.895 SviOS8[4380:70b] system ver: 7.0.3, 
orientaion: UIInterfaceOrientationPortrait, 
window bounds: {{0, 0}, {320, 480}}
2014-06-04 09:39:01.225 SviOS8[4380:70b] system ver: 7.0.3, 
orientaion: UIInterfaceOrientationLandscapeLeft, 
window bounds: {{0, 0}, {320, 480}}
2014-06-04 09:39:11.004 SviOS8[4380:70b] system ver: 7.0.3, 
orientaion: UIInterfaceOrientationPortraitUpsideDown, 
window bounds: {{0, 0}, {320, 480}}

  通过对比我们可以清晰的看到iOS 8中UIWindow在处理旋转时策略的变更,虽然会因为与之前的版本不同导致现有项目布局存在的bug,但是可以看到iOS 8中的处理方式更加符合我们的预期,在竖向的时候我们就获取到width < height, 在横向则是 width > height,这个符合所见即所得的原则。

  题外话,不管是iOS 7还是之前的版本,以及最新出的iOS 8,所有的ViewController的bounds都是正确的,所以只需要坚持一个原则“所有布局都是基于VC.view.bounds布局,那么你的App的显示就一切正常。”

  当然如果你有任何View不受VC的管理,直接添加到window上,那么就悲剧了,请添加代码去单独支持。

  好消息:所有基于iOS 7 SDK编译的程序,window的机制还遵循原来的机制,也就是说可以平滑过度到iOS系统,所有界面布局一切正常。不得不说苹果这一点做的真赞,不愧是一家伟大的公司。

  

2、安装iOS 8 beta版本注意事项

  官方给出的注意事项地址: http://adcdownload.apple.com//wwdc_2014/ios_8_beta_wg4j9a/ios_beta_software_installation_guide.pdf

  主要意思是:

  1)升级后不可降级,so升级之前还是想清楚

  2)做好备份工作,因为毕竟是beta版本,可能有些不稳定的地方,可能在升级过程中会丢失数据

  3)支持设备:

  iPhone 4s, iPhone 5, iPhone 5c, iPhone 5s, iPod touch (5th gen),
  iPad 2, iPad with Retina display, iPad Air and iPad mini

  4)目前只支持开发者预览

  5)反馈问题地址如下: https://developer.apple.com/bug-reporting/

  

3、QR Code支持

  Core Image framework (CoreImage.framework)新增了如下API:

  • 支持自定义imageKernels

  • 增加矩形检测和图片中二维码识别功能

  详细文档: Core Image Reference Collection.

 

4、UITableView的Edit模式异常

  iOS 8预览版中TableView进入edit模式以后,调用reloadData以后tableView中cell的编辑模式的样式显示会出现问题(编辑空间消失),不知道后面苹果的正式发布的iOS 8版本中会不会解决这个问题。

 

5、View Debugger

  xCode6中新增加了UI调试神器View Debugger,该工具可以在调试中绘制出当前View层级的3D显示,如下图所示:

  

View debugging. Using the view debugger makes debugging an app’s appearance is as easy as debugging lines of code. A single button click pauses your running app and “explodes” the paused UI into a 3D rendering, separating each layer of a stack of views. Using the view debugger makes it immediately obvious why an image may be clipped and invisible, and the order of the graphical elements becomes clear. By selecting any view, you can inspect the details by jumping to the relevant code in the assistant editor source view. The view debugger also displays Auto Layout constraints, making it easy to see where conflicts cause problems.

  官方文档中解释的很清楚,有了该工具以后遇到View被覆盖,超出父View等原因引起的无法响应用户事件的问题可以轻松解决了,真是开发者的一大福音。

 

注:本篇文章,持续更新,欢迎一起讨论iOS 8

  如果觉得本文帮到了你,请推荐给身边的朋友

  转载请著名出处,有什么问题欢迎留言

 


部门招人: 高级iOS、Android、前端开发,有意私聊,博主请你喝️
如果觉得本文帮到了你,记得点赞哦,当然也可以请博主喝一杯豆浆
微信二维码 QQ二维码
目录
相关文章
|
7月前
|
安全 Java Android开发
探索iOS与Android应用开发的异同
【6月更文挑战第6天】随着智能手机的普及,移动应用开发已成为技术行业的热点。本文将深入探讨iOS和Android两大主流平台在应用开发过程中的不同之处,包括开发环境、编程语言、用户界面设计、市场策略以及安全性等方面的差异,旨在为开发者提供全面的指导和参考。
64 6
|
2月前
|
开发工具 Android开发 Swift
探索iOS与安卓应用开发的异同点
【10月更文挑战第24天】本文通过比较iOS和安卓开发环境,旨在揭示两大移动平台在开发过程中的相似性与差异性。我们将探讨开发工具、编程语言、用户界面设计、性能优化及市场分布等方面,以期为开发者提供全面的视角。通过深入浅出的分析,文章将帮助读者更好地理解每个平台的独特之处及其对应用开发的影响。
|
4月前
|
IDE 开发工具 Android开发
探索iOS与安卓应用开发的异同
在数字时代的浪潮中,移动应用开发成为连接用户与企业的桥梁。本文将深入探讨iOS和安卓这两大主流平台在应用开发上的差异与共通之处,从技术架构、开发工具、市场定位到用户群体等方面进行全面分析,旨在为开发者提供清晰的指导和参考。通过比较这两个系统的开发环境,我们将揭示它们各自的优势和挑战,以及如何根据项目需求选择合适的平台。
|
安全 iOS开发
iOS 逆向编程(二)越狱入门知识
iOS 逆向编程(二)越狱入门知识
216 0
|
存储 编解码 开发框架
iOS 音视频编解码基本常识与开发
内容元素: 封装容器: MP4/MOV/FLV/RM/RMVB/AVI 图像(Image) ⾳频(Audio) 编码格式: Video: H264 Audio: AAC 元信息(Metadata)
526 0
iOS 音视频编解码基本常识与开发
|
XML iOS开发 数据格式
iOS逆向-day7:iOS 命令行工具开发
iOS逆向-day7:iOS 命令行工具开发
369 0
iOS逆向-day7:iOS 命令行工具开发
|
网络安全 文件存储 数据安全/隐私保护
iOS逆向小知识:使用Theos开发插件
iOS逆向小知识:使用Theos开发插件
1728 0
|
Android开发 iOS开发
IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)
233 0
|
iOS开发 开发者
iOS好书籍推荐
iOS好书籍推荐
116 0
|
程序员 iOS开发
如何成为一名成功的 iOS 程序员?
前言: 编程是一个仅靠兴趣仍不足以抵达成功彼岸的领域。你必须充满激情,并且持之以恒地不断汲取更多有关编程的知识。只是对编程感兴趣还不足以功成名就——众所周知,我们工作起来像疯子。 编程是一个没有极限的职业,所以要成为一个成功的程序员,你必须超越现有已存在的极限。

热门文章

最新文章