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

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. AC_Dream 1211 Reactor Cooling

    /* 题意:无源无汇,并且每条边的容量有上下界限的网络流问题!既然无源无汇,那么素有的节点都应该满足“入流==出流”! 输出每一条边的流量,使得满足上面的条件.(如果u->v有流量,那么v-&g ...

  2. Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)

    概要 学完了Map的全部内容,我们再回头开开Map的框架图. 本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同 转 ...

  3. Reinforcement Learning

    Q-learning 高潮博文 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 模式识别与机器学习的区别. http://www. ...

  4. fis3使用环境

    1.全局安装nodejs 2.安装http-server npm install http-server -g 3.安装fis3 npm install -g fis3 如要限制版本号写法是:npm ...

  5. 【Beta阶段】团队源代码管理

    0. 快速上手与理解 如果你的团队来了一个新队员,有一台全新的机器,你们是否有一个文档,只要设置了相应的权限,她就可以根据文档,从头开始搭建环境,并成功地把最新.最稳定版本的软件编译出来,并运行必要的 ...

  6. 非聚集索引中的临界点(Tipping Point)

    什么是临界点? 注意,我要说的问题是非聚集索引的执行计划从Seek+Lookup变成Table/Clustered Index Scan的临界点.SQL Server的访问数据的IO最小单元是页. 我 ...

  7. MySQL忘记root用户密码修改方法

    一般来说在MySQL修改用户密码有好几种方法: 1.修改自己的密码可用: set password=password('123456'); 2.修改其它用户的密码可用: set password fo ...

  8. Jquery对象,DOM对象

    jquery对象就是通过Jquery包装Dom对象后产生的对象,Dom对象想要通过jquery进行操作,先转换为jquery对象: dom对象转化为jquery对象,使用$(dom对象): jquer ...

  9. 用C#编程的建议

    1.如果可能尽量使用接口来编程       .NET框架包括类和接口,在编写程序的时候,你可能知道正在用.NET的哪个类.然而,在这种情况下如果你用.NET支持的接口而不是它的类来编程时,代码会变得更 ...

  10. Dev gridView中设置自适应列宽和日期显示格式、金额的显示格式

    在Dev GridView控件中,数据库中表数据日期都是长日期格式(yyyy-MM-dd HH:mm:ss),但显示在控件变成短日期格式(yyyy-MM-dd),金额显示要显示精确的数值, 比如80. ...