iOS6 APP 适配 iOS7 简易方法

最近需要适配一个iOS6 APP到iOS7下,发现View会顶到最上面。查了下发现,因为iOS7默认开启了导航栏的半透明效果,能够看见View从它下面滑过,这样的话会导致原有布局正常的APP发生界面尺寸错乱,整体上移,底部留白。
通过如下设置可以关掉这个效果,让布局同iOS6一致。

1
self.navigationController.navigationBar.translucent = NO;

iOS地图开发初探

周一接到个Demo任务,一个LBS应用,结合地图实现一个寻找周边停车场并且提供预订以及路线规划的功能。
拿到任务,马上想起iOS自带的Map Kit,到现在还没玩过这个框架,终于可以尝试下了。忙活了几天,基本做出来了,简单总结下几个主流的地图SDK。

Map Kit

苹果自家地图服务,集成最好,iOS6以前数据来自Google,现在换数据提供商了,中国区使用高德的数据。但是不提供路径规划功能。

Google Map SDK

Google出的地图SDK,说实话,数据准确度上面,更相信Google,但是试用了下,依然不提供路径规划功能。

高德地图SDK

高德的数据,没啥感觉,不喜欢不讨厌,但是它提供路径规划功能,最后也采用这个。

百度地图SDK

鼓起勇气尝试百度的SDK,具体细节还没深究,第一映像分就给不高,直接下载然后在touch5上面运行,发现下面没填充完,一行空白,表示根本没做这一代的屏幕适配,尼玛百度你是个大厂啊,这么玩,其它几家都没这么粗心,你这太让人失望了。Demo提供的其它功能也没兴趣试下去,直接切换到高德去了。


NSTimer 不准时的处理

NSTimer作为iOS开发中的定时器,用处广泛,最近在使用它作为倒计时时,出了点小状况,如果使用如下方法初始化:

1
NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:

如果我在拖动UIScrollView并且不放的时候,Timer并不会被触发,1s的间隔,我猜测可能是Timer附着在主线程上,也就是UI线程,如果主线程需要做UI重绘等大量计算或者被阻塞住,那么Timer的计时准确率就会变低,什么时候来都不确定,只有主线程空闲了,才会准确到达(任然有50-100毫秒误差),后来查阅了文档,果然是说Timer附着在NSRunLoop里,所以要保证Timer的触发,就应该换到其他NSRunLoop去,用下面方法就可以解决:

1
2
yourTimer = [NSTimer timerWithTimeInterval:1.0f target:self selector:@selector(updateTime) userInfo:nil repeats:YES];;
[[NSRunLoop currentRunLoop] addTimer:yourTimer forMode:NSRunLoopCommonModes];

具体参数信息就需要自己查文档了。