前段时间做了一些小东西,一些关键点记录总结如下
主要是使用UITableView以及NSUserDefaults完成任务管理,可新建、编辑及删除任务。
因为是Demo性质,所以利用NSUserDefaults做数据持久化,作为一个plist存储在应用的沙盒里。需要注意的是更新数据时需要立即同步一下“[[NSUserDefaults standardUserDefaults] synchronize]”,防止遇到异常情况如应用崩溃导致数据丢失等。
进入应用时,再从沙盒里读取已有数据。
效果图如下,可新建、编辑及删除任务,红色代表任务待处理,点击cell颜色变成绿色代表已完成,再点击则变红,通过点击cell更新任务处理情况,其他还有tableView常见的查看详情、排序等。
主要使用CoreData做数据持久层存储数据,利用系统自带的Core Image Filter做滤镜功能(在模拟器上滤镜处理非常慢)。
需要注意的是遇到CoreData模型更新后编译报错,检查代码无误,可能重建模型或者删除模拟器上的对应程序再编译就正常了,暂时没有找到原因,CoreData是iOS自带的ORM框架,但感觉水有点深,需要再专门研究下。
使用Core Image Filter时需要注意filterName的拼写,详细参考:Core Image Filter Reference
主要使用ArcGIS Runtime SDK for iOS 10.2.4开发,需要注意以下几点:
(1)iOS8开始,使用定位功能需要在info.plist里设置
设置“NSLocationWhenInUseUsageDescription”和“NSLocationAlwaysUsageDescription”,这样应用运行时才会弹出提示框供用户选择,也就是平时看到有些应用启动时会提示是否允许一直获得位置信息或仅当应用运行时获得位置信息。例如在info.plist里添加“NSLocationWhenInUseUsageDescription”这一项,value则代表弹出框中的提示语。
(2)在模拟器中可通过新建一个gpx文件来模拟一个具体位置信息,调试时选择根据这个gpx文件进行定位即可。
(3)坐标系的转换,由于ArcGIS Runtime SDK for iOS 没有直接提供wgs1984到WebMercator的转换方法,可通过以下方法进行转换
-(AGSPoint *) wgs1984Point2WebMercatorPoint:(AGSPoint *) point
{
double x = point.x * 20037508.34 / 180; double y = log( tan ((90 + point.y) * M_PI / 360)) / (M_PI / 180); y = y * 20037508.34 / 180; AGSPoint *webMercatorPoint = [[AGSPoint alloc] initWithX:x y:y spatialReference:[AGSSpatialReference spatialReferenceWithWKID:3857]]; return webMercatorPoint ; }
(4)可通过代码控制界面旋转方向,通过工程设置控制设备旋转方向。
(5)用到的一些第三方类库:
下拉刷新控件MJRefresh 、聚类分析clusterlayer-plugin-ios、动态输入框以及常用的JSONKit、AFNetWorking、MBProgressHUD
天气预报信息调用的是百度API Store找到第三方API:http://apistore.baidu.com/astore/serviceinfo/1798.html
(6)使用AFNetWorking时,数据返回格式为"text/plain"时,AFNetWorking默认支持格式是没有此项的,需要在源码AFHTTPResponseSerializer.m中添加此项格式即可。
效果图(模拟器上渲染比较卡):
(1)对于背景图片可直接在Xcode设置为拉伸模式
(2)使用kvc来读写readonly的成员变量,例如重写tabBarViewController后,对tabBar重新设置,方便实现自定义控件效果。
(3)使用ScrollView+PageControl实现新特性页面的效果,移动scrollView时需要实现整页翻动效果,而实际scrollView已经提供了一个属性pagingEnabled,启用即可,否则还是scrollView默认的滚动效果。
(4)应用进入后台状态时,如果想在app图标上显示未读微博数量,需要进行权限设置,否则报错“"Attempting to badge the application icon but haven't received permission from the user to badge the application"
参考资料:
(5)Xcode6以后如果还想像之前一样设置启动图片,需要单独新建LaunchImage,并修改相关设置,如图所示
效果图:
推荐两个插件:写注释专用的VVDocumenter、图片预览插件KSImageNamed
KSImageNamed效果图