前段时间做了一些小东西,一些关键点记录总结如下

1.ToDoList

主要是使用UITableView以及NSUserDefaults完成任务管理,可新建、编辑及删除任务。

因为是Demo性质,所以利用NSUserDefaults做数据持久化,作为一个plist存储在应用的沙盒里。需要注意的是更新数据时需要立即同步一下“[[NSUserDefaults standardUserDefaults] synchronize]”,防止遇到异常情况如应用崩溃导致数据丢失等。

进入应用时,再从沙盒里读取已有数据。

效果图如下,可新建、编辑及删除任务,红色代表任务待处理,点击cell颜色变成绿色代表已完成,再点击则变红,通过点击cell更新任务处理情况,其他还有tableView常见的查看详情、排序等。

2.相册

主要使用CoreData做数据持久层存储数据,利用系统自带的Core Image Filter做滤镜功能(在模拟器上滤镜处理非常慢)。

需要注意的是遇到CoreData模型更新后编译报错,检查代码无误,可能重建模型或者删除模拟器上的对应程序再编译就正常了,暂时没有找到原因,CoreData是iOS自带的ORM框架,但感觉水有点深,需要再专门研究下。

使用Core Image Filter时需要注意filterName的拼写,详细参考:Core Image Filter Reference

3.地图应用

主要使用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中添加此项格式即可。

效果图(模拟器上渲染比较卡):

4.新浪微博

(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"

参考资料:

http://stackoverflow.com/questions/25973364/attempting-to-badge-the-application-icon-but-havent-received-permission-from-th

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW2

(5)Xcode6以后如果还想像之前一样设置启动图片,需要单独新建LaunchImage,并修改相关设置,如图所示

效果图:

5.Xcode插件

推荐两个插件:写注释专用的VVDocumenter图片预览插件KSImageNamed

       KSImageNamed效果图

iOS开发笔记1:ToDoList、相册、地图应用及新浪微博的更多相关文章

  1. iOS开发笔记7:Text、UI交互细节、两个动画效果等

    Text主要总结UILabel.UITextField.UITextView.UIMenuController以及UIWebView/WKWebView相关的一些问题. UI细节主要总结界面交互开发中 ...

  2. iOS开发笔记-两种单例模式的写法

    iOS开发笔记-两种单例模式的写法   单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...

  3. iOS开发笔记--什么时候调用layoutSubviews

    iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...

  4. IOS开发笔记(4)数据离线缓存与读取

    IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...

  5. IOS开发笔记 IOS如何访问通讯录

    IOS开发笔记  IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...

  6. 【Swift】iOS开发笔记(二)

    前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明  欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯 ...

  7. 菜鸟手下的iOS开发笔记(swift)

    在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...

  8. iOS开发笔记4:HTTP网络通信及网络编程

    这一篇主要总结iOS开发中进行HTTP通信及数据上传下载用到的方法.网络编程中常用的有第三方类库AFNetworking或者iOS7开始新推出的NSURLSession,还有NSURLSession的 ...

  9. iOS开发笔记系列-基础1(数据类型与表达式)

    学习iOS开发快两年了,去年完成MagViewer之后就因为公司的其他业务繁重,除了维护这个应用之外,只是断断续续地自己做一些实验开发,没有再发布新的应用,这里想整理一下学习过程中的笔记,以便加深印象 ...

  10. 【IOS开发笔记03-视图相关】简单计算器的实现

    UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...

随机推荐

  1. codeforces Fedor and New Game

    #include<iostream> #include<stack> #include<cstring> #include<cstdio> #inclu ...

  2. C#中引用类型和值类型

    C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型. C#的引用类型包括:数组,用户定义的类.接口.委托,object,字符串. 值类型和引用类型的区别在于,值类型的变 ...

  3. SQL中对XML的处理

    DECLARE  @PreSOMasterXML XMLDECLARE   @SDA VARCHAR(100)SET @PreSOMasterXML=N'<ProcessTaskRequest& ...

  4. IE11之F12 Developer Tools--控制台工具(Console)

    前面我们介绍了IE11的Developer Tools中的第一个工具--DOM Explorer,这篇文章介绍第二个工具--控制台(Console),使用控制台工具查看错误和其他信息.发送调试输出.检 ...

  5. phpBB论坛 代码 语法高亮 模块 Codebox Plus

    phpBB代码语法高亮模块 Codebox Plus Code-By.Org (https://www.phpbb.com/customise/db/mod/codebox_plus/) (https ...

  6. LeetCode - 44. Wildcard Matching

    44. Wildcard Matching Problem's Link --------------------------------------------------------------- ...

  7. Winform开发框架之字典管理模块的更新,附上最新2013年全国最新县及县以上行政区划代码sql脚本

    在很多项目里面,字典管理是必备的项目模块,而这个又是比较通用的功能,因此可以单独做成一个通用字典管理,例如这个模块,可以通过集成的方式,使用在我的<Winform开发框架>.<WCF ...

  8. 用c#写的一个局域网聊天客户端 类似小飞鸽

    用c#写的一个局域网聊天客户端 类似小飞鸽 摘自: http://www.cnblogs.com/yyl8781697/archive/2012/12/07/csharp-socket-udp.htm ...

  9. ajax回调函数Status问题

    function readyDo() {//            alert(xhr.readyState + "分" + xhr.Status);            if ...

  10. C# 通用验证类 支持 WPF,MVC,Winform

    验证方式,   通过继承 IDataErrorInfo接口 和 DataAnnotations 解释标记语言而实现, 为了能在WPF上通用,所了也要继承属性更改通知接口INotifyPropertyC ...