前段時間做了一些小東西,一些關鍵點記錄總結如下
主要是使用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效果圖
新聞熱點
疑難解答