ios5.0.1的特性里有个双击顶部栏可以直接到顶。那点击什么可以到底?

极客公园微信号:geekpark
iOS 10 最新体验
北京时间 6 月 14 日凌晨 3:00,带着一丝兴奋和疲倦,看完 WWDC 2016,我迫不及待的把我手上的 iPhone 5c 升级了最新的开发者版本 iOS 10,上手几个小时之后,发现了很多有意思的「隐藏关卡」。
在这次 iOS 10 的支持设备列表中,iPhone 4s「光荣退役」,支持机型从 iPhone 5 开始,包括 5c 在内的 iPhone 都能升级,所以苹果在明示你「快换手机吧如果你还在用 4s」,而作为配置最落伍的机型 iPhone 5c,这一次升级之后我并没有感受到卡顿,感觉和之前的 iOS 9 差别不大,所以如果你想升级 iOS 10,完全不用担心是否卡顿 ,真正重要的,是 iOS 10 的新特性:
“功能补足大于创新
1. 更「安卓」的 iOS 锁屏
打开锁屏界面就让人吃惊不小,相比起之前的 iOS 锁屏界面,这一次改动很大,操作上完全改变了从 iOS 初代就创造的「滑动解锁」特性,改为「按下主屏幕按钮以解锁」,当然,你也可以用「小圆点」来代替 home 键完成解锁操作。同时加入了向右滑动呼出插件栏,向左滑动打开相机的功能。
这个操作方式让人立即联想到原生安卓系统的锁屏滑动,在安卓 4.0 时代,原生锁屏向左滑动即可打开相机,向右滑动即可添加桌面插件。在升级 iOS 后,我每一次打开手机,都还会习惯性地滑动屏幕想要去解锁,不知道这个操作改变对于广大果粉来说是否能够接受呢?
在这一次的苹果官方演示过程中,3D touch 功能得到了极大地拓展,通过 3D touch 功能在插件栏中可以快速对某个 app 进行操作,可以在解锁状态下查看信息并回复。不过由于 3D touch 是 6s 系列的功能,在我的 5c 上,我只能在插件栏中通过双击来快速打开某个应用而不能在插件栏直接操作,所以很多新奇有趣的功能就与我无缘了。
2.起床闹钟——为睡眠打造
点开平时最常用的「时钟」,吸引人的是过去一直使用的白色背景转变为暗色,好不好看,见仁见智。而功能上,也由原本的世界时钟、闹钟、秒表、计时器四种增加到五种,新加入了「就寝」功能,即起床闹钟选项,你可以设定自己的睡眠习惯,睡眠时间等信息,通过这个「起床闹钟」的功能,你的 iPhone 会检测并帮助你改变睡眠习惯,提高睡眠质量。这是继夜间模式(night shift mode)之后,苹果再次在改善睡眠质量上做出的改进。不过具体效果如何还得看使用后的反馈。
3.下拉菜单——放大版的 watchOS
不得不说这一次下拉菜单界面变化很大,消息和插件的 UI 风格转变为毛玻璃大圆角矩形,多了几分直观,但是和 iOS 9 相比起来,美观度有些许下降!也许看的时间长了会习惯。
我猜测苹果这样做至少有两点考虑:
1. 卡片式圆角矩形的设计和 iOS 图标的圆角矩形保持一致,体现了 iOS 系统的整体一致性;
2. 这样的设计可以将 iOS 和 watchOS 的设计语言统一起来,在苹果生态圈内提升用户体验。
不过这个圆角矩形的消息卡片倒让我想起了 webOS 的卡片式设计,不管是不是一种巧合,反而让人感觉到一种回味。
在使用过程中我也发现了另外一件事情,当你在某个 app 内下拉通知栏时,会有插件和消息两个选择(和之前 iOS 9 一样),但是当你退回到桌面上再次下拉菜单时,你只会见到消息这一个选择,如果不仔细观察还以为这是系统 bug ,估计初次上手 iOS 10 的用户都需要时间才能适应。
另外,上滑菜单也变为两页,UI 风格也是圆角矩形毛玻璃,只不过配色比原来更鲜艳,第一页为开关快捷操作栏,第二页为音乐,还有快捷音乐按钮,让一些开关操作更加方便。
4.下拉回复通知——终于不用羡慕安卓
通知界面可以直接下拉选择回复方式了(比之前更进一步),这也是安卓系统已经具有的功能。虽然迟到,但也算是来到了 iOS 上面,想必大家都会喜欢。
5.预装软件删除——强迫症有救了?
或许是抵不住大家的呼声,这一次水果家终于允许用户删除自带应用了。作为强迫症的我终于可以删掉那些碍眼的应用了,除了电话,照片,信息,App Store 这些核心功能之外,大部分自带应用都能够删除。如果想要再用回它们,你只需要在 App Store 重新下载即可。
不过进一步上手后,我发现自带应用删除之后在商店重新点击下载基本上瞬间完成,推断预装应用并不是真正卸载,而是被「冷冻」了。再次查看手机的应用管理,证实了我的猜测,那些预装应用只是在桌面「移除」,在应用管理中依旧没有删除选项。
所以说这并不是真正意义上的「卸载」,只不过是图标被「隐藏」,不得不说苹果还是「高明」。
6.更方便的日历
打开日历,显示增加了三个新功能。分别是「发现事件」,「出发时间」和「位置建议」。
「发现事件」能够通过你的邮件和消息来建议你的行程安排,这样你可以轻松地将行程计划加入日历;「出发时间」通过利用你的地图信息查看你的位置,交通状况,然后在日历上安排你的出发时间;「位置建议」会根据你过去的行程安排来建议你的行程安排。
不过这些并没有吸引我,还是第三方日历更实用。
7.iMassage ——既生瑜,何生亮?
发布会上被大肆宣传的 iMassage 新功能也全部登场,聊天时候可以发送个性气泡,涂鸦,表情贴图,照片和音乐分享功能,但最终,因为对方手机没有升级 iOS 10 而以装 X 失败告终。
所以苹果告诉我们一个道理,聊天还是用微信靠谱点。
8.Homekit 家庭系统——暂时没有使用场景的 App
通过连接 iPhone 来控制家里的各种智能家居,比如苹果官网售卖的智能电灯,智能摄像机和智能睡眠系统等,不过目前很难找到使用的场景,不过壁纸倒是很漂亮。
9.更加本地化的服务
通过天气和地图内的空气质量指数,可以让用户更直观的了解空气状况,不得不说,这个本地化也来晚了。
通过和腾讯合作,iPhone 终于有了原生的来电拦截服务,这应该是很多商务人士很中意的功能。
10.键盘声音
键盘的声音变了,从原来的清脆变成了沉闷的声音,反正我是不太喜欢。
“到底你的 5s 该不该升级新系统
目前的 iOS 10 因为是测试版本,还存在一些问题,包括我在使用过程中的三次微信闪退,微博不能正常登陆,在主页任意处向下滑动出现的只有键盘没有搜索栏的情况,另外有网友更新之后支付宝不能提现,都说明了新系统目前不稳定。
而本次升级安装包的超过 1G 内容下载(我的 5c 是 1.2G 的安装包),换来的仅仅是预装应用可以「冻结」,新的睡眠闹钟,锁屏改变这样一些小打小闹的功能也不足够吸引人,因此我不建议各位手持 iPhone 5,5c 以及 5s 的用户升级新系统。
假如你是喜欢尝鲜,非常强烈的想去体验一下新系统,或者你是一位和我一样的强迫症患者想要删掉预装应用,那么你可以尝试一下。但要注意 iPhone 升级系统之后想要再降级基本是不可能的事情,所以非常强烈的希望大家能够三思而后升,升级一定要备份!想体验新系统的用户,可以等秋季的正式版发布。
每一次 iOS 版本的更新,都意味着苹果生态圈的进一步完善。这次 iOS 10 的更新,发力点在于 3D touch 的拓展,在于将其他产品进一步连接到 iPhone 上,还有更进一步的中国化。
虽然这一次 iOS 10 继续支持很多老机型,但是不难发现,如果你的手机没有 3D touch ,没有更大的屏幕和更强的处理器,那么系统更新带来的吸引力会下降许多,如果你是 5 代的旧机型,那么我十分不建议你现在升级 iOS 10,假如你使用的是带有 3D touch 的 6s 系列,那么你可以尝鲜试试这一次的新系统,相信 3D touch 功能的拓展会让你喜欢上 iOS 10 的。
还是那句老话,「尝鲜有风险,升级需谨慎」。
本文为极客公园原创
你可能还想看:
文章出自微信公众号
关注互联网产品创新
手机微信扫描上方二维码进行订阅
极客公园微信公众号最新文章
精品号随机推荐
最值得关注的微信公众号
每天签到送现金;每天抽奖送现金,天天送钱哦,值得关注。
赏金侠,一个可以赚钱的公众号~
带你去领悟那美妙的世界
喜欢电影朋友关注我吧,我们一起学习交流
瘦身小瑜伽,美腿塑形小平腹,每日分享美丽秘诀!
搜罗更多劲爆事件,娱乐花边新闻,最受关注的图片更多精彩敬请关注!八卦娱乐头条!!!
提倡国人品质生活,选择有机生态的生活方式,健康,养生,休闲,品味,修炼自己,温暖他人!
野史君一一道来,让你看到不一样的历史,让你发现原来历史可以这样看。
每日新鲜美女推送,分享优雅女神高清图片
想了解有关科技、趣味、创意和新奇的产品吗,想寻找创意小礼品和新鲜玩意吗?我升级了 iOS 10,发现了这些「隐藏关卡」北京时间 6 月 14 日凌晨 3:00,带着一丝兴奋和疲倦,看完 WWDC 2016,我迫不及待的把我手上的 iPhone 5c 升级了最新的开发者版本 iOS 10,上手几个小时之后,发现了很多有意思的「隐藏关卡」:在这次 iOS 10 的支持设备列表中,iPhone 4s「光荣退役」,支持机型从 iPhone 5 开始,包括 5c 在内的 iPhone 都能升级,所以苹果在明示你「快换手机吧如果你还在用 4s」,而作为配置最落伍的机型 iPhone 5c,这一次升级之后我并没有感受到卡顿,感觉和之前的 iOS 9 差别不大,所以如果你想升级 iOS 10,完全不用担心是否卡顿 ,真正重要的,是 iOS 10 的新特性:功能补足大于创新1、更「安卓」的 iOS 锁屏打开锁屏界面就让人吃惊不小,相比起之前的 iOS 锁屏界面,这一次改动很大,操作上完全改变了从 iOS 初代就创造的「滑动解锁」特性,改为「按下主屏幕按钮以解锁」,当然,你也可以用「小圆点」来代替 home 键完成解锁操作。同时加入了向右滑动呼出插件栏,向左滑动打开相机的功能。这个操作方式让人立即联想到原生安卓系统的锁屏滑动,在安卓 4.0 时代,原生锁屏向左滑动即可打开相机,向右滑动即可添加桌面插件。在升级 iOS 后,我每一次打开手机,都还会习惯性地滑动屏幕想要去解锁,不知道这个操作改变对于广大果粉来说是否能够接受呢?在这一次的苹果官方演示过程中,3D touch 功能得到了极大地拓展,通过 3D touch 功能在插件栏中可以快速对某个 app 进行操作,可以在解锁状态下查看信息并回复。不过由于 3D touch 是 6s 系列的功能,在我的 5c 上,我只能在插件栏中通过双击来快速打开某个应用而不能在插件栏直接操作,所以很多新奇有趣的功能就与我无缘了。2、起床闹钟——为睡眠打造点开平时最常用的「时钟」,吸引人的是过去一直使用的白色背景转变为暗色,好不好看,见仁见智。而功能上,也由原本的世界时钟、闹钟、秒表、计时器四种增加到五种,新加入了「就寝」功能,即起床闹钟选项,你可以设定自己的睡眠习惯,睡眠时间等信息,通过这个「起床闹钟」的功能,你的 iPhone 会检测并帮助你改变睡眠习惯,提高睡眠质量。这是继夜间模式(night shift mode)之后,苹果再次在改善睡眠质量上做出的改进。不过具体效果如何还得看使用后的反馈。3、下拉菜单——放大版的 watchOS&不得不说这一次下拉菜单界面变化很大,消息和插件的 UI 风格转变为毛玻璃大圆角矩形,多了几分直观,但是和 iOS 9 相比起来,美观度有些许下降!也许看的时间长了会习惯。我猜测苹果这样做至少有两点考虑:1,卡片式圆角矩形的设计和 iOS 图标的圆角矩形保持一致,体现了 iOS 系统的整体一致性;2,这样的设计可以将 iOS 和 watchOS 的设计语言统一起来,在苹果生态圈内提升用户体验。不过这个圆角矩形的消息卡片倒让我想起了 webOS 的卡片式设计,不管是不是一种巧合,反而让人感觉到一种回味。在使用过程中我也发现了另外一件事情,当你在某个 app 内下拉通知栏时,会有插件和消息两个选择(和之前 iOS 9 一样),但是当你退回到桌面上再次下拉菜单时,你只会见到消息这一个选择,如果不仔细观察还以为这是系统 bug ,估计初次上手 iOS 10 的用户都需要时间才能适应。另外,上滑菜单也变为两页,UI 风格也是圆角矩形毛玻璃,只不过配色比原来更鲜艳,第一页为开关快捷操作栏,第二页为音乐,还有快捷音乐按钮,让一些开关操作更加方便。4、下拉回复通知——终于不用羡慕安卓通知界面可以直接下拉选择回复方式了(比之前更进一步),这也是安卓系统已经具有的功能,虽然迟到,但也算是来到了 iOS 上面,想必大家都会喜欢。5、预装软件删除——强迫症有救了?或许是抵不住大家的呼声,这一次水果家终于允许用户删除自带应用了,作为强迫症的我终于可以删掉那些碍眼的应用了,除了电话,照片,信息,App Store 这些核心功能之外,大部分自带应用都能够删除,如果想要再用回它们,你只需要在 App Store 重新下载即可。不过进一步上手后,我发现自带应用删除之后在商店重新点击下载基本上瞬间完成,推断预装应用并不是真正卸载,而是被「冷冻」了,再次查看手机的应用管理,证实了我的猜测,那些预装应用只是在桌面「移除」,在应用管理中依旧没有删除选项,所以说这并不是真正意义上的「卸载」,只不过是图标被「隐藏」,不得不说苹果还是「高明」。6、更方便的日历打开日历,显示增加了三个新功能。分别是「发现事件」,「出发时间」和「位置建议」。「发现事件」能够通过你的邮件和消息来建议你的行程安排,这样你可以轻松地将行程计划加入日历;「出发时间」通过利用你的地图信息查看你的位置,交通状况,然后在日历上安排你的出发时间;「位置建议」会根据你过去的行程安排来建议你的行程安排。不过这些并没有吸引我,还是第三方日历更实用。7、 iMessage ——既生瑜,何生亮?发布会上被大肆宣传的 iMessage 新功能也全部登场,聊天时候可以发送个性气泡,涂鸦,表情贴图,照片和音乐分享功能,但最终,因为对方手机没有升级 iOS 10 而以装 X 失败告终,所以苹果告诉我们一个道理,聊天还是用微信靠谱点。8、Homekit 家庭系统——暂时没有使用场景的 app通过连接 iPhone 来控制家里的各种智能家居,比如苹果官网售卖的智能电灯,智能摄像机和智能睡眠系统等,不过目前很难找到使用的场景,不过壁纸倒是很漂亮。9、更加本地化的服务通过天气和地图内的空气质量指数,可以让用户更直观的了解空气状况,不得不说,这个本地化也来晚了。通过和腾讯合作,iPhone 终于有了原生的来电拦截服务,这应该是很多商务人士很中意的功能!10、键盘声音键盘的声音变了,从原来的清脆变成了沉闷的声音,反正我是不太喜欢。到底你的 5s 该不该升级新系统目前的 iOS 10 因为是测试版本,还存在一些问题,包括我在使用过程中的三次微信闪退,微博不能正常登陆,在主页任意处向下滑动出现的只有键盘没有搜索栏的情况,另外有网友更新之后支付宝不能提现,都说明了新系统目前不稳定,而本次升级安装包的超过 1G 内容下载(我的 5c 是 1.2G 的安装包),换来的仅仅是预装应用可以「冻结」,新的睡眠闹钟,锁屏改变这样一些小打小闹的功能也不足够吸引人,因此我不建议各位手持 iPhone 5,5c 以及 5s 的用户升级新系统。假如你是喜欢尝鲜,非常强烈的想去体验一下新系统,或者你是一位和我一样的强迫症患者想要删掉预装应用,那么你可以尝试一下,但要注意 iPhone 升级系统之后想要再降级基本是不可能的事情,所以非常强烈的希望大家能够三思而后升,升级一定要备份!想体验新系统的用户,可以等秋季的正式版发布。总结每一次 iOS 版本的更新,都意味着苹果生态圈的进一步完善。这次 iOS 10 的更新,发力点在于 3D touch 的拓展,在于将其他产品进一步连接到 iPhone 上,还有更进一步的中国化,虽然这一次 iOS 10 继续支持很多老机型,但是不难发现,如果你的手机没有 3D touch ,没有更大的屏幕和更强的处理器,那么系统更新带来的吸引力会下降许多,如果你是 5 代的旧机型,那么我十分不建议你现在升级 iOS 10,假如你使用的是带有 3D touch 的 6s 系列,那么你可以尝鲜试试这一次的新系统,相信 3D touch 功能的拓展会让你喜欢上 iOS 10 的,还是那句老话,「尝鲜有风险,升级需谨慎」。分享ipad使用技巧:你不知道的20个小技巧
ipad使用技巧:你不知道的20个小技巧
学习啦【产品使用方法】 编辑:未知
  1 揭开隐藏的键盘字符
  iPad屏幕上的键盘不仅仅是你所见的。按住某键能提供额外的字符选项。长按逗号键会带来一撇号。旁边的Period键还提供引号。在数字键盘上,如图所示,按住引号键一秒钟,你会发现隐藏的智能引号和其他符号。如果你不知道,双击空格键便会插入一个period键。
  2 以Flash形式登陆应用程序
  对与你的iPad,你可能有太多的应用程序需要处理。(现在,应用程序商店提供超过65000平板电脑专用程序,而且每天都在增加!)一旦你开始囤积应用程序,你不得不一个一个的文件夹,一页一页找程序,想快速寻找你的程序变得越来越难。有个容易的方法解决这个问题。从主屏幕,向左轻扫,你会看见搜索屏幕,在这里你可以快速键入你想要寻找的应用程序名称,预测键使之变的更简单。搜索不紧能搜索到你的应用程序,还能搜索媒体,电子邮件,日历事件等等。自定义你的搜索设置:设置&一般&Spotlight Search
  3 抓取屏幕图片
  想抓取iPad上任何的图片,按住电源按钮(Power button),点击主页按钮。你将看到屏幕闪烁和一下快门声,这个图片就被你保存到相机相册(Camera Roll)中拉!在相册中,点击右上角的箭头图标,可以进行电子邮件,打印或复制图片,用作墙纸,或是发送给你的朋友等操作。
  4 对电子邮件图片附件的简易存储
  如果电子邮件有图片,点击它,你会得到一个弹出式菜单,让您选择复制或保存图像。选择后,图像将被保存到你的相机胶卷中。你可以将图片复制粘贴到其它应用程序中。
  5 防止数据漫游收费
  每个人都会听到一些,由于忘记关闭手机漫游程序,而导致花费数千元在流量收费上的恐怖故事。如果你是有3G功能的iPad,有两种方法可以禁用你的手机收音机,这样你就不会为流量使用付费了。进入设置--蜂窝数据(Cellular Data),禁用它,并禁用数据漫游。或将你的iPad设置成飞行模式,开启无线(两选项都在设置菜单的顶层),当你在饭店或是休息地方时候。在旅行期间,你可以使用iPad做一些无需数据连接的娱乐,如:充电,听音乐看视频或是玩游戏。
  6 修改定位配置
  iPad集成GPS和无线的好处是,大量的应用程序可以提供基于位置的信息。但是它要求应用程序知道你在哪里。在&设置&定位服务&,您可以选择应用程序允许访问您的位置。或者,如果你想完全隐姓埋名,关闭所有的定位服务。
  7 最大化您的地图体验
  iPad集成GPS好处是Google-powered地图应用程序可以帮助你寻找路线。但当你看地图的时候,有可能一些地方看不清楚,右下角有个&turned-up&按钮。如果拉回来,你可以选择地图视野(经典,卫星,混合,或地形)和交通覆盖选项。(谷歌还可以提醒你是否遇到交通堵塞)。
  8 看地图上细节
  另一个很酷的地图功能:针脚(Pins)!按住地图上任何一个点,便会放置一个针。你会得到一个弹出框:左边的橙色图标显示在您所选择的地点街景,并在右侧的蓝色图标会出现一个对话框,提供指示,在其他选项之中,可以通过电子邮件共享该位置。
  9 自定义侧面开关
  iPad的简洁的设计和几乎完全触摸界面是其最大的特点之一。你有三个硬件按钮:屏幕下方的主按钮,面板右上角的音量调大调小按钮,和正上方的一个自定义开关。该开关可以作为静音控制或屏幕方向锁,它基本上禁用iPad的加速度计。进入&设置&一般&,在&使用侧面开关:&选择选择锁定旋转或静音。
  10 查看和关闭运行应用程序
  多任务处理是iOS系统中一个受欢迎的功能,但一旦你打开一个应用程序,它保持运作,除非你手动关掉。快速双击主页按钮可以看到你正在运行的程序,如果数量多,你需要向右扫几次才能才能全部看见它们。按住一个图标,它们开始闪动(就像你移动主屏幕上的图标一样)。点击图标左上角的小红色减号,便可以关闭应用程序。
  11 随意控制iPod
  如果你向左扫页面,当你双击主页按钮,你会看到视频/音乐播放控制,音量和屏幕亮度滑块。依据你是否开启侧面开关的&锁定旋转或静音&功能,你会看到左上角的其他选择。以下图片显示出屏幕方向锁。
  12 无需存储,在同一网络中共享媒体
  启动主页分享:设置& iPod&主页共享,在你的电脑上(高级&开启iTunes 10.2及以上版本的主页共享功能)你可以在同一个无线网络中共享媒体(音乐,视频和播客)。通过这个方法,你可以听10,000首歌曲,而无需存储。另外:你还可以分享iPhone和基于iOS的iPod,只要在同一个网络中。
  13 Safari浏览器安全上网
  在上网时,你会看到成千上万的文本连接,但哪些是合法的呢?持续按住任何一个链接,你会得到一个对话框,上面显示完整的网址让你打开或复制链接。
  14 随意切换搜索引擎
  iOS一个新附件:自由切换自己的搜索引擎。在&设置&Safari &搜索引擎&中,还可以更改成Bing,Yahoo等搜索引擎。
  15 调节网络视频大小
  尽管在手机版本的Safari缺少Flash支持功能,但你可以在iPad上看大量的网络视频。如果你想在网络页面内增大视频窗口的大小,双击视频窗口,便会全屏。捏窗口便返回到原来的大小。
  16 一键访问网站
  如何让快速访问自己最喜爱的网站呢?比Safari还要更快一步的方法就是在主屏幕上创建一个图标。只需浏览该网页,直接到地址栏的左边,你会看见一个箭头图标,按下它,您会得到一个下拉选择&添加到主屏幕&。你还可以重命名你的图标,这样你就可以在主屏幕上一键访问网页啦。
  17 快速观看幻灯片
  iPad有着9.7英寸的屏幕,在iPad上看幻灯片,应该是件赏心悦目的事情吧。进入相框模式(设置&相框)你可以选择图片,选择转移,以及其他关于幻灯片的选项,设置你的幻灯片。你还可以在&设置&一般&密码锁定&相框&中设计相框。做好后,iPad的锁屏幕会在右下角按钮处显示一个小花朵图标,点击它,便会开启你的幻灯片。
  18设置密码,保护数据
  在设置菜单中,可以设置iPad密码。毕竟,平板电脑时随时携带的,会有丢失的危险。没有密码,别人就会完全访问您的电子邮件,网络历史记录,应用程序等。设置一个四位数的密码是:一般&密码锁定&简单的密码。最好是:取消选择简单的密码,用全键盘设置密码。
  19 自动擦除数据信息
  为了确保你的数据信息不会落入坏人手中。在密码锁定菜单中,你可以设定在输入十次密码尝试后,iPad自动擦除所有的数据信息。定期同步您的ipad很重要,这样一些重要的数据会备份在你的电脑上。
  20 免费寻找你的iPad
  对于Find my iPhone功能,一般是需要收费的。如今你只需一个苹果账号,便可以在App Store中免费下载,按照设定的指示,你可以从您的计算机或手机上查看iPad所在的地理位置。   还有的一个更好的方法,利用GPS功能,定位3G功能的iPad。若是登录了无线网络,那么无线版iPad也可以被定位。你还可以利用应用程序远程显示消息,播放铃声,设置密码,锁定装置,或清除其数据。所有的东西都可以帮助你寻找iPad。
本文已影响 人
[ipad使用技巧:你不知道的20个小技巧]相关的文章
看过本文的人还看了
19477人看了觉得好
【产品使用方法】图文推荐
Copyright & 2006 -
All Rights Reserved
学习啦 版权所有苹果园为iOS用户提供和下载,最新的、、、等,分享最权威的资讯、、及解决办法,拥有最火爆的,苹果园一家专注解决iOS所求的网站。【385】【scrollView不接受点击事件,是因为事件传递失败】
//& MyScrollView.m
//& Created by beyond on 15/6/6.
//& Copyright (c) 2015年
All rights reserved.
//& 不一定要用继承,可以使用分类
#import &MyScrollView.h&
#import &CoView.h&
@implementation MyScrollView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
& & if(!self.dragging)
& & & & UITouch *touch = [touches anyObject];
& & & & CGPoint loc = [touch locationInView:self];
& & & & // x y转成coView中的坐标
& & & & CGFloat x = loc.x - 10;
& & & & CoView *coView = (CoView *)[self viewWithTag:5267];
& & & & CGFloat y = loc.y - coView.y;
& & & & CGPoint newLoc = [coView convertPoint:loc fromView:self];
& & & & // 经过验证:x == newLoc.x & y == newLoc.y
& & & & x = newLoc.x;
& & & & y = newLoc.y;
& & & & // 现在就是通过point 算出 row,col,进而的推算出i
& & & & int col = x/(kBtnWH+kBtnMarginH);
& & & & int row = y/(kBtnWH+kBtnMarginV);
& & & & int i = row*kBtnColumnNum +
& & & & [[self nextResponder] touchesBegan:touches withEvent:event];
& & & & // 注意,coView处理的时候,i越界的情况要处理;i从0开始
& & & & DLog(@&--点了第%d个---&,i);
& & & & [coView btnTouched:i];
& & [super touchesBegan:touches withEvent:event];
& & //NSLog(@&MyScrollView touch Began&);
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
& & if(!self.dragging)
& & & & [[self nextResponder] touchesEnded:touches withEvent:event];
& & [super touchesEnded:touches withEvent:event];
【382】【带暂停和继续的NSTimer】
@interface NSTimer (Pause)
@property (nonatomic, strong, readwrite) NSString *
///////////////////////////////////////////////////////////////////////////
#import &NSTimer+Pause.h&
static void *state = (void *)@&state&;
@implementation NSTimer (Pause)
-(void)pause
& & if (![self isValid]) {
& & [self setFireDate:[NSDate distantFuture]]; //如果给我一个期限,我希望是 00:00:00 +0000
-(void)resume
& & if (![self isValid]) {
& & [self setFireDate:[NSDate date]];
- (NSString *)state
& & return objc_getAssociatedObject(self, state);
- (void)setState:(NSString *)s
& & objc_setAssociatedObject(self, state, s, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
【381】【给分类添加属性】
// Declaration
@interface MyObject (ExtendedProperties)
@property (nonatomic, strong, readwrite) id myCustomP
@end Implementation
static void * MyObjectMyCustomPorpertyKey = (void *)@&MyObjectMyCustomPorpertyKey&;
@implementation MyObject (ExtendedProperties)
- (id)myCustomProperty
& & return objc_getAssociatedObject(self, MyObjectMyCustomPorpertyKey);
- (void)setMyCustomProperty:(id)myCustomProperty
& & objc_setAssociatedObject(self, MyObjectMyCustomPorpertyKey, myCustomProperty, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
【367】【评论提示后返回】
[SVProgressHUD showSuccessWithStatus:@&提交成功&];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
& & [blockSelf.navigationController popViewControllerAnimated:YES];
【365】【每一组的最新记录:分组之前 先排序】
select max(FTime),* FROM DynamicInfoTable WHERE FUID = 'd441e1d7-e-4b3232' group by FOrgID,FType order by max(FTime) DESC
【363】【label文字左边距】
UIView *leftview = [[UIView alloc] initWithFrame:frame];
textField.leftViewMode = UITextFieldViewModeA
textField.leftView = //imageView
【362】【返回之前,必须退出键盘】【#pragma mark - 返回提示 // 返回,由于是发布页面,所以要检查 提示 防止误操作 - (void)back:(id)sender { BOOL hasSomething = [self formHasSomething]; if (hasSomething) { // 提示 // 发送请求,删除 UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@&温馨提示& message:@&您确定要放弃发布并返回吗?& delegate:nil cancelButtonTitle:@&取消& otherButtonTitles:@&确定&, nil]; alertView.confirmBlock = ^(){ // 调用父类的返回 [super back:sender]; }; [alertView show]; }else{ [self.view endEditing:YES]; [super back:sender]; } }】
【358】【3G4G自动下载图片】
#import &UIImageView+Download.h&
// 异步下载图片
#import &UIImageView+WebCache.h&
#import &KLNetworkStatus.h&
#import &KLTools.h&
@implementation UIImageView (Download)
- (void)downloadImgWithUrlString:(NSString *)urlString placeHolderImgName:(NSString *)placeHolderImgName
& & if (!(urlString.length & 0)) {
& & & & //没有图片,直接使用默认图
& & & & self.image = [UIImage imageNamed:placeHolderImgName];
& & NSURL *url = [NSURL URLWithString:urlString];
& & // 1.先从缓存中取,如果缓存中有:直接设置
& & SDWebImageManager *manager = [SDWebImageManager sharedManager];
& & BOOL isImgAlreadyExists = [manager cachedImageExistsForURL:url];
& & if (isImgAlreadyExists) {
& & & & UIImage *image = [manager.imageCache imageFromDiskCacheForKey:urlString];
& & & & [self setImage:image];
& & // 2.如果缓存中没有,如果是WIFI,下载
& & BOOL isWifi = [[KLNetworkStatus sharedKLNetworkStatus] isReachableViaWifi];
& & if (isWifi) {
& & & & [self sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:placeHolderImgName]];
& & // 3.如果是3G/4G,则要再进行判断用户是否开启了 自动下载
& & BOOL isWWAN = [[KLNetworkStatus sharedKLNetworkStatus] isReachableViaWWAN];
& & if (isWWAN) {
& & & & BOOL isAllowDownload = [KLTools isNetworkDownloadSet];
& & & & if (isAllowDownload) {
& & & & & & [self sd_setImageWithURL:url placeholderImage:[UIImage imageNamed:placeHolderImgName]];
& & & & & &
【348】【判断是否安装weixin】
[WXApi isWXAppInstalled]方法无效
使用下面这个
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@&weixin://&]])
& & NSLog(@&OK weixin://&);
【347】【导航标题】【self.navigationItem.title = @&发布&;】
【346】【xib中的cell无故多出一个半透明灰灰的40高、300宽的label,通过po打印,发现是两个label,猜测是contentLabel和detailLabel】
产生原因:是由于在xib选择了一次cell的accessory为detail,结果 在xib代码中 添加了两个label,
因此,即使 再次将accessory选择为no,那两个label依然在xib代码中。。。。
(lldb) po self
(lldb) po self.contentView
; layer = &
(lldb) po [self.contentView subviews]
&__NSArrayM 0x6ffb850&(
【345】【正则,表情匹配{:001:}对应的是@&\\{:\\d\\d\\d:\\}&,注意括号都要转义】
@&\\{:\\d\\d\\d:\\}&反解析 表情文字
+(NSString *) FContentPrettyFaceText:(NSString *)faceText
& & NSString *str = faceT
& & NSString *pattern = @&\\{:\\d\\d\\d:\\}&;
& & NSError *error = NULL;
& & //定义正则表达式
& & NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error];
& & //使用正则表达式匹配字符
& & NSArray *arr = [regex & matchesInString:str options:0 range:NSMakeRange(0, [str length])];
& & NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@&facesDic.plist& ofType:nil]];
& & if (arr.count != 0)
& & & & for (long i = arr.count - 1; i &= 0; i--) {
& & & & & & NSTextCheckingResult *result = arr[i];
& & & & & & NSRange range = [result range];
& & & & & & // 开始位置比如:9
& & & & & & int loc = range.
& & & & & & // 长度固定是 7
& & & & & & int len = range.
& & & & & & // {:067:}
& & & & & & NSString *subStr = [str substringWithRange:range];
& & & & & & NSString *key = [subStr substringWithRange:NSMakeRange(2, 3)];
& & & & & & // key:067
& & & & & & NSString *value = [dict objectForKey:key];
& & & & & & // [爱心]
& & & & & & // 首
& & & & & & NSString *head = [str substringToIndex:loc];
& & & & & & // 尾
& & & & & & NSString *tail = [str substringFromIndex:loc + len];
& & & & & & str = [NSString stringWithFormat:@&%@%@%@&,head,value,tail];
【343】【奇怪的bug】
问题描述:
1、tableView是通过IB,并且有自动布局;
2、headView是通过代码创建的
3、给tableView加headView,没有问题
4、给tableView加footerView,当用代码创建时,也没有问题
5、但是:当footerView是用自动布局时,tableView首次展示时,footView高度为0;
但是,当jump到一个控制器,并且再次返回时,tableView再次显示,此时footView高度正常了。。。
问题原因:
猜测是:tableView的自动布局影响的
解决方法:
当前 想到的是:线程延迟几秒再给tableView设置footView
self.tableView.tableHeaderView = self.headV
_footerView = [RowView RowView];
// 这里加个延迟,不然会高度为0,应该是自动布局导致的问题
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.05 * NSEC_PER_SEC)),dispatch_get_main_queue(), ^{
& & kStrongSelf
& & strongSelf.tableView.tableFooterView = _footerV
& & [UIView animateWithDuration:5 animations:^{
& & & & [strongSelf.view layoutIfNeeded];
& & & & [strongSelf.tableView layoutIfNeeded];
【342】【只要约束改变后,就要手动刷新对应的view】
_topView.bigImgHeightConstraint.constant = 0;
[UIView animateWithDuration:0.3 animations:^{
& & [self.view layoutIfNeeded];
& & [_topView layoutIfNeeded];
【340】【IB控件用weak,String用copy,delegate用weak,block用copy,对象类型用Strong,基本类型用assign】
@property (nonatomic,weak) IBOutlet UILabel *
- (IBAction)xxxBtnClicked:(UIButton *)
【335】【label图文混排CBEmotionView】【 使用core text 和 core graphics 实现的文字与表情图片的并排绘制】
【334】【Localizable.strings】
//& Localizable.strings
&本地资源文件
//& Created by beyond on 15/3/19.
//& Copyright (c) 2015年 beyond. All rights reserved.
&appName&=&XXX&;
&login_now&=&立即登录&;
&vip_showmsg&=&请联系您孩子的班主任开通VIP服务&;
NSString *str = NSLocalizedString(@&vip_showmsg&, nil);
UIActionSheet *sheet = [[UIActionSheet alloc]initWithTitle:str delegate:self cancelButtonTitle:@&关闭& destructiveButtonTitle:@&购买VIP& otherButtonTitles:@&联系客服&, nil];
[sheet showInView:self.view];
【333】【禁用单个页面手势滑动返回功能】
在有的时候,我们不需要手势返回功能,那么可以在页面中添加以下代码:
- (void)viewDidAppear:(BOOL)animated
& & [super viewDidAppear:animated];
& & // 禁用 iOS7 返回手势
& & if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
& & & & self.navigationController.interactivePopGestureRecognizer.enabled = NO;
- (void)viewWillDisappear:(BOOL)animated
& & [super viewWillDisappear:animated];
& & // 开启
& & if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]) {
& & & & self.navigationController.interactivePopGestureRecognizer.enabled = YES;
#define KLNavigationBarHidden [self.navigationController setNavigationBarHidden:YES animated:YES];
#define KLNavigationBarShow [self.navigationController setNavigationBarHidden:NO animated:YES];
【332】【反斜杠】
在吗 NSString 如何表示反斜杠呀 \
NSString *path = @&main\&;
打一个错误, \和“挨一起就出错,打两个 NSString *path = @&main\\&;可以,但是后面
[path appendString @&d盘&];以后,
实际的path内容为&main\\d盘& 怎么弄一个单反斜杠呀??
NSString *str = [NSString stringWithFormat:@&%@\\%@&,@&main&,@&d盘&];
NSLog(@&str:%@&,str);
我发现了,这是个显示的问题,在Debuger Console里可以正常显示,在调试中却显示成两个斜杠,转意字符应该是好使的,即NSString中,&&\\&&,就是 一个&\& 的转意字符,和c的和c++的一样,只是调试时显示的值有bug罢了。
【331】【data--&string--&OC对象】
(lldb) po data
&7b65 223a5 de794 a8e688b7 e4b88de5 ad98e59c a8e6e7 a081e994 99e8afaf efbc36f 6e7a6e 756c6c7d&
(lldb) po responseString
{&StatusCode&:500,&ErrorMessage&:&用户不存在或密码错误!&,&Content&:null}
14:26:31.952 JZH[161:60b] __70-[NetRequest initWithAction:userId:password:otherParam:completeBlock:]_block_invoke [Line 209] responseObject ==== {
& & Content = &&;
& & ErrorMessage = &\U\U4e0d\U5b58\U\U5bc6\U\U8bef\Uff01&;
& & StatusCode = 500;
【330】【label中显示表情】【查看原文】
【327】【金额用NSNumber接收,必须strong引用 否则 内存释放,崩掉】
@property (nonatomic,strong) NSNumber *orderP
double currentPrice = [model.FCurrentPrice doubleValue];
_topView.currentLabel.text = [NSString stringWithFormat:@&¥%.02lf&,currentPrice];
【326】【xcode6建分类】【左上角file菜单---》new File----&Objective-c File----&Category】
【325】【通知】
- (void)xxxNoti:(NSNotification *)noti
& & //获取键盘的高度
& & NSDictionary *dict = [noti userInfo];
- (void)dealloc
& & [[NSNotificationCenter defaultCenter]removeObserver:self];
// 监听支付成功
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(paySuccess) name:@&notificationCenter_paySuccess& object:nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@&notificationCenter_paySuccess& object:nil];
【324】【webview死活不执行js代码】
webview加载本地html需要时间,同时,通过id向服务器获取详情也需要时间,因此:很可能当服务器已经获取到detail信息时,本地的html尚未加载完毕,故出现上述情况
【323】【UIAlertView+Block】
typedef void (^UIAlertViewBlock)(UIAlertView *alertView, NSInteger buttonIndex);
typedef void (^ConfirmBlock)(void);
@interface UIAlertView(Block)
@property (nonatomic,copy)ConfirmBlock confirmB
@property (nonatomic,copy)UIAlertViewBlock clickB
// 必须手动用运行时绑定方法
- (void)setConfirmBlock:(ConfirmBlock)confirmB
- (ConfirmBlock)confirmB
- (void)setClickBlock:(UIAlertViewBlock)clickB
- (UIAlertViewBlock)clickB
@end====================
#import &UIAlertView+Block.h&
@implementation UIAlertView(Block) 必须手动用运行时绑定方法
- (void)setConfirmBlock:(ConfirmBlock)confirmBlock
& & objc_setAssociatedObject(self, @selector(confirmBlock), confirmBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
& & if (confirmBlock == NULL) {
& & & & self.delegate =
& & else {
& & & & self.delegate =
- (ConfirmBlock)confirmBlock
& & return objc_getAssociatedObject(self, @selector(confirmBlock));
&必须手动用运行时绑定方法
- (void)setClickBlock:(UIAlertViewBlock)clickBlock
& & objc_setAssociatedObject(self, @selector(clickBlock), clickBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
& & if (clickBlock == NULL) {
& & & & self.delegate =
& & else {
& & & & self.delegate =
- (UIAlertViewBlock)clickBlock
& & return objc_getAssociatedObject(self, @selector(clickBlock));
#pragma mark - UIAlertViewDelegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
& & if (buttonIndex == 1) {
& & & & // 确定
& & & & if (self.confirmBlock) {
& & & & & & // self.confirmBlock(self, buttonIndex);
& & & & & & self.confirmBlock();
& & } else {
& & & & // 取消或其他
& & if (self.clickBlock) {
& & & & self.clickBlock(self, buttonIndex);
@end====================
// 发送请求,删除
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@&温馨提示& message:@&您确定要放弃发布并返回吗?& delegate:nil cancelButtonTitle:@&取消& otherButtonTitles:@&确定&, nil];
alertView.confirmBlock = ^(){
& & // 调用父类的返回
& & [super doBack:sender];
[alertView show];
【322】【按钮,左图 右文字】
#import &OperationBtn.h&
#define kMargin 5
@implementation OperationBtn
- (void)setHighlighted:(BOOL)highlighted
& & // do nothing 就是取消默认的高亮状态
- (CGRect)imageRectForContentRect:(CGRect)contentRect
& & // 图片等宽高(15,整个按钮是25,图片左上边距全是5)
& & CGFloat wh = contentRect.size.height - kMargin - kM
& & CGRect rect = CGRectMake(kMargin, kMargin, wh, wh);
- (CGRect)titleRectForContentRect:(CGRect)contentRect
& & // 文字居右 (图片15*15)
& & CGFloat wh = contentRect.size.height - kMargin - kM
& & CGFloat x = kMargin + 15 + 3;
& & CGFloat y = kMargin + 3;
& & CGRect rect = CGRectMake(x, kMargin,contentRect.size.width - x, wh);
- (void) setEnabled:(BOOL)enabled
& & DLog(@&setEnabled方法:%d&,enabled& );
& & [super setEnabled:enabled];
【321】【No matching provisioning profiles found】
问题:Your build settings specify a provisioning profile with the UUID “dedebf56-8f41-4af9-aeb8-5ec59fe02fedbeyond”, however, no such provisioning profile was found.& Xcode can resolve this issue by downloading a new provisioning profile from the Member Center.
解决方法:
targets---build settings---- code signing----provisioning profile----debug
【320】【自动布局按钮排列】【先全部与父类对齐,然后设置一下乘积因子】【查看原文】
【315】【webview执行js函数注意事项】
url has prefix 判断时,要注意ios统一加http://并且注意大小写哦~~~
字符串参数要用单引号
true用数字1
并且jsonString必须使用NSJSONReadingMutableLeaves,
不能使用pretty风格,如下所示:
NSData *data = [NSJSONSerialization dataWithJSONObject:bigDict options:NSJSONReadingMutableLeaves error:nil];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
【314】【奇怪的问题】【在cell的xib文件中 添加了一个控件如label,并且IBOutlet连线,但是:运行的时候该label却没有初始化显示为nil】
【312】【JSBadgeView 是一个可定制的在视图上显示徽章的 iOS 组件】
【311】【iphone6截屏750 X 1334】
【310】【框架请求失败,提示405不支持POST,只allow GET】
位于类:AFHTTPRequestOperation.m
位于方法:
- (void)setCompletionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure;
具体代码:
id responseObject = self.responseO
if (self.error) {
& & if (failure) {
& & & & dispatch_group_pletionGroup ?: http_request_operation_completion_group(), pletionQueue ?: dispatch_get_main_queue(), ^{
& & & & & & failure(self, self.error);
& & & & });
& & if (success) {
& & & & dispatch_group_pletionGroup ?: http_request_operation_completion_group(), pletionQueue ?: dispatch_get_main_queue(), ^{
& & & & & & success(self, responseObject);
& & & & });
(lldb) po self.response
{ URL: http://192.168.1.124:555/api/System/GetUserIdentityInfo } { status code: 405, headers {
& & Allow = GET;
& & &Cache-Control& = &no-cache&;
& & &Content-Length& = 73;
& & &Content-Type& = &application/ charset=utf-8&;
& & Date = &Mon, 11 May :47 GMT&;
& & Expires = &-1&;
& & Pragma = &no-cache&;
& & Server = &Microsoft-IIS/7.5&;
& & &X-AspNet-Version& = &4.0.30319&;
& & &X-Powered-By& = &ASP.NET&;
(lldb) po self.responseObject
& & Message = &The requested resource does not support http method 'POST'.&;
【309】【关于xcode自己revoke(吊销)certificate(证书)的问题】
原因:新target运行项目的时候,提示找不到描述文件;xcode提议 自动fix issue
描述:这时候,xcode会 revoke(吊销)原来的certificate(证书),因此,与原来证书相关联的描述文件,全部会失效;
解决方法:正确的做法是:从团队其他人员拷贝描述文件到本机,双击导入;在xcode项目配置的设置中 选择刚才导入的描述文件,进而选择code sign identity
【308】【方形图片变圆】
70 * 70的话,圆角只要设置成half即可,即:35
// 从xib中加载 实例化一个SynClassCell对象
+ (ParentDetailTopView *)ParentDetailTopView
& & // mainBundel加载xib,扩展名不用写.xib
& & NSArray *arrayXibObjects = [[NSBundle mainBundle] loadNibNamed:@&ParentDetailTopView& owner:nil options:nil];
& & ParentDetailTopView *topView = [arrayXibObjects firstObject];
& & topView.headImgView.layer.masksToBounds = YES;
& & topView.headImgView.layer.cornerRadius = 35.f;
& & return& topV
【305】【scrollView滚动范围】【// 重置contentView的滚动范围必须大于其bounds的高,才能滚动】
【304】【cell侧滑ime删除】
1.dataSource的方法:
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
此方法就是给一个空的实现滑动也会出现删除按钮!!
2. 必须先删除数据源
[blockSelf.arrayData removeObjectAtIndex:indexPath.row];
// 再删除view
[blockSelf.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
[blockSelf.tableView reloadData];
【301】【弹出动画】
注意在viewDidAppear调用
- (void)addKeyAnimation
& & CAKeyframeAnimation *
& & animation = [CAKeyframeAnimation animationWithKeyPath:@&transform&];
& & animation.duration = 0.5;
& & animation.delegate =
& & animation.removedOnCompletion = YES;
& & animation.fillMode = kCAFillModeF
& & NSMutableArray *values = [NSMutableArray array];
& & [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
& & [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
& & [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]];
& & [values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
& & animation.values =
& & [_contentView.layer addAnimation:animation forKey:nil];
【299】【ineligible devices】
iphone 6 with 8.3系统,连接到xcode 6.01 时,
提示:ineligible devices
原因:xcode版本太低
解决办法:
换成xcode 6.1 即可
==============
Xcode 6.1 update. The 6.0.1 does't support iOS 8.1.
【查看原文】
【298】【二次包装过程】
将一个字典,包装成一个大的大典,再转成jsonString
// 二次包装过程
NSArray *modelArr = [MarkModel objectArrayWithKeyValuesArray:dataArr];
MarkBigModel *bigModel = [[MarkBigModel alloc]init];
bigModel.FScore = 5;
NSArray *dictArray = [MarkModel keyValuesArrayWithObjectArray:modelArr];
bigModel.MciMcBusiSiteRemarkItems = dictA
bigModel.RemarkCount = modelArr.
// 模型 转 字典,之后就可以用字典 转 jsonString
NSDictionary *bigDict = bigModel.keyV
&另1种是& 通过NSJSONSerialization 转成Data,再从Data 转成jSON string,会有反斜线
NSData *data = [NSJSONSerialization dataWithJSONObject:bigDict options:NSJSONReadingMutableLeaves error:nil];
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
【297】【OC的字典转成jsonString】
// 重要说明:content此时已经从json串 转成了OC的字典 1种是 通过JSONKIT,可将字典转成json字符串;
// self.jsonString = [(id)content JSONString]; 另1种是& 通过NSJSONSerialization 转成Data,再从Data 转成jSON string
NSData *data = [NSJSONSerialization dataWithJSONObject:content options:NSJSONWritingPrettyPrinted error:nil];
self.jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
【296】【appdelegate中的支付回调1】
// pay ---- 3
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
& & [Pingpp handleOpenURL:url withCompletion:nil];
& & [[NSNotificationCenter defaultCenter]postNotificationName:@&notificationCenter_userPayOrNot& object:nil];
& & return& YES;
& & (lldb) po url
jzh://pingpp?result=success
& & (lldb) po sourceApplication
& & com.apple.mobilesafari
& & (lldb) po annotation
& & (lldb)
【293】【代码改约束】
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
& & //& & & & //& & 当事件触发时,改变其constant值,然后调用约束所在的对象的 layoutIfNeeded方法,固定的~ 例如:
& & //& & & & _topView.collectionViewHeightConstraint.constant = 50;
& & //& & & & //& & self.leftMarginConstraint.constant = 100;
& & //& & & & //& & self.widthConstraint.constant = 200;
& & //& & & & [UIView animateWithDuration:2.0 animations:^{
& & //& & & & & & [self.view layoutIfNeeded];
& & //& & & & & & [_topView layoutIfNeeded];
& & //& & & & }];
【292】【cell图片在xib中aspect fit无效,只能用代码调整】
self.img.contentMode = UIViewContentModeScaleAspectF
self.img.clipsToBounds = YES;
【291】【cell分割线设置,其实是tableView的属性separatorStyle】
将UITableView的separatorStyle属性设置为UITableViewCellSeparatorStyleNone即可,如下:
tableView.separatorStyle = UITableViewCellSeparatorStyleN
【289】【隐藏导航条】
// 导航控制器的显示和隐藏【提示,如果使用navigationBarHidden属性,侧滑会出问题】
- (void)viewWillAppear:(BOOL)animated
& & [super viewWillAppear:animated];
& & self.navigationController.navigationBar.hidden = YES;
- (void)viewWillDisappear:(BOOL)animated
& & [super viewWillDisappear:animated];
& & self.navigationController.navigationBar.hidden = NO;
【286】【Cell点击特效 取消】
cell.selectionStyle = UITableViewCellSelectionStyleN
【285】【动画特效1】
CAKeyframeAnimation *
animation = [CAKeyframeAnimation animationWithKeyPath:@&transform&];
animation.duration = 0.5;
animation.delegate =
animation.removedOnCompletion = YES;
animation.fillMode = kCAFillModeF
NSMutableArray *values = [NSMutableArray array];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.2, 1.2, 1.0)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(0.9, 0.9, 0.9)]];
[values addObject:[NSValue valueWithCATransform3D:CATransform3DMakeScale(1.0, 1.0, 1.0)]];
animation.values =
[_contentView.layer addAnimation:animation forKey:nil];
【284】【url schemes】
工程---&targets---&info---&urlTypes
identifier:& com.sg31.www
url schemes: beyond
下面的为接收到外部调用的时候程序启动,响应方法,在safari输入:beyond://com.sg31.www
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
& & if ([[url scheme] isEqualToString:@&beyond&]) {
& & & & NSLog(@&外部调用成功&);
& & return YES;
【283】【iOS开发的一些奇巧淫技】【进入网址】
【282】【auto adjust cell】
viewdidload
tableView.rowHeight = UITableViewAutomaticD
tableView.estimatedRowHeight = 10;
cellForRow
[cell layoutIfNeeded];
【281】【btn得到cell得到table得到row】
while (![btn isMemberOfClass:[self class]]){
& & btn = (UIButton *)[btn superview];
MyProjectCell *cell = (MyProjectCell *)
UITableView *tableView = (UITableView *)
while (![tableView isMemberOfClass:[UITableView class]]){
& & tableView = (UITableView *)[tableView superview];
NSIndexPath *path = [tableView indexPathForCell:cell];
row = path.
// 已经弃用,调用外界的控制器的block,并将cell的行号传递过去
// _wannaChangeStatusBlock(row); 调用外界的控制器的block,并将cell的行号传递过去
_wannaChangeStatusBlockExt(row,cell);
【279】【textView占位】
Easy way, just create placeholder text in UITextView by using the following UITextViewDelegate methods:
- (void)textViewDidBeginEditing:(UITextView *)textView
& & if ([textView.text isEqualToString:@&placeholder text here...&]) {
& & & & textView.text = @&&;
& & & & textView.textColor = [UIColor blackColor]; //optional
& & [textView becomeFirstResponder];
- (void)textViewDidEndEditing:(UITextView *)textView
& & if ([textView.text isEqualToString:@&&]) {
& & & & textView.text = @&placeholder text here...&;
& & & & textView.textColor = [UIColor lightGrayColor]; //optional
& & [textView resignFirstResponder];
just remember to set myUITextView with the exact text on creation e.g.
UITextView *myUITextView = [[UITextView alloc] init];
myUITextView.delegate =
myUITextView.text = @&placeholder text here...&;
myUITextView.textColor = [UIColor lightGrayColor]; //optional
and make the parent class a UITextViewDelegate before including these methods e.g.
@interface MyClass ()
【进入网址】
【274】【nsrange,是 一个结构体,方法:& & & & NSMakeRange(&#NSUInteger loc#&, &#NSUInteger len#&)】
【273】【iOS开发的一些奇巧淫技】【查看原文】
【272】【awakeFromNib】
- (id)initWithFrame:(CGRect)frame
& & self = [super initWithFrame:frame];
& & if (self) {
& & & & // Initialization code
- (void)awakeFromNib{
& & [super awakeFromNib];
& & NSLog(@&call %s&, __FUNCTION__);
& & self.backgroundColor = [UIColor redColor];
& & // 其他初始化方法
【271】【先对数组统一排序,再进行分组,再组内排序】
// 其他情况,返回是数组
NSMutableArray *contentDictArr = (NSMutableArray *)
DLog(@&返回是数组,长度是 %d&,contentDictArr.count);
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// NSArray 转成 NSMutableArray
// 0、对于不启用的,即enabled为0的字典模型,删除掉
NSMutableArray *dictArr = [NSMutableArray array];
for (NSInteger i = 0; i & contentDictArr. i++) {
& & NSDictionary *dict = contentDictArr[i];
& & if ([[dict objectForKey:@&FEnabled&]intValue] == 1) {
& & & & [dictArr addObject:dict];
// DLog(@&清除未启用的字典后的数组:%@&,dictArr);
// 0.1、对于被包含的模块,暂时剔除
NSMutableArray *tempdictArr = [NSMutableArray array];
for (NSInteger i = 0; i & dictArr. i++) {
& & NSDictionary *dict = dictArr[i];
& & // 如果有值,则说明是某个模块的子模块@&26e8e1-a7d5-6d513c02de39&
& & // 如果没有值,即NSNull,表示是根目录模块,直接展示
& & if ([[dict objectForKey:@&FUpCMID&] class] == [NSNull class]) {
& & & & [tempdictArr addObject:dict];
} 1、对数组按GroupTag排序
NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@&FGroupTag& ascending:YES]];
NSArray *sortedArr = [tempdictArr sortedArrayUsingDescriptors:sortDesc];
// DLog(@&排序后的数组:%@&,sortedArr);
&2、对数组进行分组,按GroupTag
// 遍历,创建组数组,组数组中的每一个元素是一个模型数组
NSMutableArray *testGroupArr = [NSMutableArray array];
NSMutableArray *currentArr = [NSMutableArray array];
// 因为肯定有一个字典返回,先添加一个
[currentArr addObject:sortedArr[0]];
[testGroupArr addObject:currentArr];
// 如果不止一个,才要动画添加
if(sortedArr.count & 1){
& & for (NSInteger i = 1; i & sortedArr. i++) {
& & & & // 先取出组数组中& 上一个模型数组的第一个字典模型的groupID
& & & & NSMutableArray *preModelArr = [testGroupArr objectAtIndex:testGroupArr.count-1];
& & & & NSInteger preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@&FGroupTag&] intValue];
& & & & // 取出当前字典,根据groupID比较,如果相同则添加到同一个模型数组;如果不相同,说明不是同一个组的
& & & & NSDictionary *currentDict = sortedArr[i];
& & & & NSInteger groupID = [[currentDict objectForKey:@&FGroupTag&] intValue];
& & & & if (groupID == preGroupID) {
& & & & & & [currentArr addObject:currentDict];
& & & & }else{
& & & & & & // 如果不相同,说明 有新的一组,那么创建一个模型数组,并添加到组数组testGroupArr
& & & & & & currentArr = [NSMutableArray array];
& & & & & & [currentArr addObject:currentDict];
& & & & & & [testGroupArr addObject:currentArr];
// 3、遍历 对每一组 进行排序
NSMutableArray *tempGroupArr = [NSMutableArray array];
for (NSArray *arr in testGroupArr) {
& & // NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@&FOrder& ascending:YES]];
& & NSArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
& & & & if([[obj1 objectForKey:@&FOrder&]intValue] & [[obj2 objectForKey:@&FOrder&]intValue]){
& & & & & & return NSOrderedA
& & & & if([[obj1 objectForKey:@&FOrder&]intValue] & [[obj2 objectForKey:@&FOrder&]intValue]){
& & & & & & return NSOrderedD
& & & & return NSOrderedS
& & [tempGroupArr addObject:tempArr];
testGroupArr = tempGroupA
DLog(@&封装好的group数组:%@&,testGroupArr);
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// testGroupArr 将封装好的字典数组缓存起来,以便下次调用 userDefault_localGroupArr
// 根据用户上次选择的,展示
NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
[userDefault setBool:YES forKey:@&userDefault_hasCached_moduleDictArr&];
NSString *jsonStr = testGroupArr.JSONS
DLog(@&没有网络的时候用:jsonStr:%@&,jsonStr);
[userDefault setObject:jsonStr forKey:@&testGroupArr_jsonStr&];
[userDefault sync
&【270】【自动布局scrollView】
&contentSize 必须明确指定,如label距离下方多少,距离右边多少,这样才可以 让scrollView计算出contentSize
&【查看原文】
&【267】【inDatabase: was called reentrantly on the same queue, which would lead to a deadlock】
&在使用时,如果在queue里面的block执行过程中,又调用了 indatabase方法,则会检查 是不是同一个queue,如果是同一个queue会死锁;原因很简单:
&队列里面 放了一个block,该block又在 本队列 后面放了一个 block;
&从而:前一个block 里面 调用了 后一个block,必须等后一个block执行完成了,
&前一个block才会 出队列;
&而后一个block想要执行,则又必须先等 前一个block出队列;
&因此 死锁!!!!
&解决方法:在indatabase的block中,不要再调用indatabase方法
&[[[DBHelper shareInstance] dbQueue]inDatabase:^(FMDatabase *db){
& & isSuccess = [self.helper update4Table:TB_User_Friend withArgs:args where:where];
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&- (void)inDatabase:(void (^)(FMDatabase *db))block {
&& & /* Get the currently executing queue (which should probably be nil, but in theory could be another DB queue
& & & * and then check it against self to make sure we're not about to deadlock. */
&& & FMDatabaseQueue *currentSyncQueue = (__bridge id)dispatch_get_specific(kDispatchQueueSpecificKey);
&& & assert(currentSyncQueue != self && &inDatabase: was called reentrantly on the same queue, which would lead to a deadlock&);
&【261】【ios_xib_preview预览】
&右上方----show the assistant edit ---- 选择新窗口中manual最下方的Preview
&【258】【应该竖屏,仅在视频播放页面横屏】
&在app delegate中,启动时,
&[userDefault setBool:NO forKey:@&userDefault_isAllowLandscape&];
&[userDefault synchronize];
&在app delegate中,通过一个本地保存的key进行判断,是否进行横屏
&- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
& & // 全局的设置:允许竖屏+横屏
& & NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];
& & BOOL isAllowLandscape = [userDefault boolForKey:@&userDefault_isAllowLandscape&];
& & if (isAllowLandscape) {
& & & & return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskL
& & } else {
& & & & return UIInterfaceOrientationMaskP
&在视频播放控制器中,更改本地保存的key即可
&【257】【模拟器上面 播放视频崩溃】
&iphone 4s& 8.0系统的模拟器上面 播放视频:
&Apr& 9 11:44:39 [jun] rtcreporting[57158] : logging starts...
&Apr& 9 11:44:39 [jun] rtcreporting[57158] : setMessageLoggingBlock: called
&在模拟器上面播放视频
&解决办法:
&去掉全局断点,这是一个bug
&【256】【iphone真机死活不旋转】
&死活不走代理方法:
&- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
& & return (interfaceOrientation == UIInterfaceOrientationPortrait
& & & & & & || interfaceOrientation == UIInterfaceOrientationLandscapeLeft
& & & & & & || interfaceOrientation == UIInterfaceOrientationLandscapeRight);
&原因可能是:手机上拉快速设置栏中:竖排方向锁定 :打开了
&【255】【导航返回按钮】
&UIButton* btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, image.size.width+10, 40)];
&btn.showsTouchWhenHighlighted = YES;
&[btn setImage:image forState:UIControlStateNormal];
&[btn addTarget:theTarget action:sel forControlEvents:UIControlEventTouchUpInside];
&UIBarButtonItem *backBtn = [[UIBarButtonItem alloc] initWithCustomView:btn];
&backBtn.tag = 9528;
&vc.navigationItem.leftBarButtonItem = backB
&【254】【ios_VLC】
&VLC for iOS 2.3.0
&关于VLC配置问题,根据个人经验整理了一下,希望能帮到需要的朋友。
&官网链接:https://wiki.videolan.org/IOSCompile/
&百度云盘链接:/s/1bnEOXPH 密码:ur4l
&配置说明(百度云盘)
&官网按照说明操作就可以了只是下载的地址是个谷歌的什么网站,所以你懂得。
&百度云盘下载下来后需要配置下文件VLC/ios/External 这个文件夹下面有六个文件(快捷方式):MediaLibraryKit,MobileVLCKit,PLCrashReporter,QuincyKit,gtl,upnpx
&重新配置下这六个文件路径就可以用了,vlc源码是区分真机和模拟器的
&终端配置路径
&1、在终端进入External文件夹
&2、ln -s -f是终端修改文件路径的,关于终端命令不懂的朋友请百度,在此就不班门弄斧了。
&真机就用Release-iphoneos,模拟器就用Release-iphonesimulator
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/MediaLibraryKit/build/Release-iphoneos MediaLibraryKit
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/VLCKit/build/Release-iphoneos MobileVLCKit
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/PLCrashReporter/build/Release-iphoneos PLCrashReporter
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/QuincyKit/client/iOS/QuincyLib/build/Release-iphoneos QuincyKit
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/GDrive/build/Release-iphoneos gtl
&ln -s -f /Users/stlink/Desktop/VLC/ios/ImportedSources/upnpx/projects/xcode4/upnpx/build/Release-iphoneos upnpx
&3、路径正确的话就没问题了,ls -l 查看文件路径
&修改完成后就可以启动了VLC/iOS/VLC for iOS.xcodeproj
&注意:我有时候配置正确路径但是文件还是报错,这种情况的话解压重新搞吧,暂时不知道怎么处理。
&SimplePlayback
&这个是VLC在线播放的一个demo,路径:VLC/ios/ImportedSources/VLCKit/Examples_iOS/SimplePlayback
&项目直接拷贝出来不能用的,要配置下。
&libMobileVLCKit.a 这个demo用到这个静态库。静态库区分真机和模拟器的。静态库我不太懂怎么配置,搞了几次没搞定
&不过有另外的办法MobileVLCKit.framework这个不区分真机和模拟器的。
&路径:VLC/ios/ImportedSources/VLCKit/build
&注意:Deployment target 要低于7.0
&最后希望能帮到需要的朋友,不懂得可以联系我,qq:,加好友请说明谢谢,由于工作原因可能无法及时回复请见谅,而且我也是刚接触vlc。
&关键词:iOS VLC
&MediaLibraryKit项目中的Search paths使用相对路径就可以了。
&Header Search Paths --&& ../../External/MobileVLCKit/include
&Library Search Paths --& ../../External/MobileVLCKit
&MediaLibraryKit项目中相对路径$(SRCROOT)得到的值是/XXX/XXX/VLC/ios/ImportedSources/MediaLibraryKit,而不是想象中的/XXX/XXX/VLC/ios/
&多谢LZ的奉献~~~
&【查看原文】
&【253】【ios_VLC】【查看原文】
&【247】【dispatch_after延时改变约束】
&dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
& & //& & 当事件触发时,改变其constant值,然后调用约束所在的对象的 layoutIfNeeded方法,固定的~ 例如:
& & _topView.collectionViewHeightConstraint.constant = 50;
& & //& & self.leftMarginConstraint.constant = 100;
& & //& & self.widthConstraint.constant = 200;
& & [UIView animateWithDuration:2.0 animations:^{
& & & & [self.view layoutIfNeeded];
& & & & [_topView layoutIfNeeded];
&【246】【this class is not key value coding-compliant for the key HeightConstraint】
&this class is not key value coding-compliant for the key HeightConstraint
&在IB上拖线时的时候,有多的 ,删除掉即可
&【227】【ios_数组中放枚举】
&NSInteger & _btnTagArr[4] = {ContactSelectBtnChatting,ContactSelectBtnTel,isTeacher?ContactSelectBtnLeave:ContactSelectBtnDetail};
&【226】【实时获得webView的contentSize】
&iOS 如何计算UIWebView的ContentSize
&首选要等UIWebView加载内容后,然后在它的回调方法里将webview的高度Height设置足够小,就设置为1吧,因为这样才能用
&sizeThatFits才能计算出webview得内容大小
&- (void)webViewDidFinishLoad:(UIWebView *)aWebView {
&& & CGRect frame = aWebView.
&& & frame.size.height = 1;
&& & aWebView.frame =
&& & CGSize fittingSize = [aWebView sizeThatFits:CGSizeZero];
&& & frame.size = fittingS
&& & aWebView.frame =
&& & NSLog(@&size: %f, %f&, fittingSize.width, fittingSize.height);
&UIWebView计算高度 ( 14:48:39)转载?
&标签: uiwebview 高度 计算 sizethatfits 分类: ios
&- (void)webViewDidFinishLoad:(UIWebView *)webView{
&& & float height = [[webView stringByEvaluatingJavaScriptFromString:@&document.body.offsetH&] floatValue];
&& & //document.body.scrollHeight
&- (void) webViewDidFinishLoad:(UIWebView *)webView
& & CGRect frame = webView.
& & CGSize fittingSize = [webView sizeThatFits:CGSizeZero];
& & frame.size = fittingS
& & webView.frame =
&- (void)viewDidLoad {
&& & [super viewDidLoad];
&& & webview.delegate =
&& & [webview loadHTMLString:@&
& & & fdasfda
& & & & baseURL:nil];
& & & - (void)webViewDidFinishLoad:(UIWebView *)webView
& & & & & NSString *output = [webview stringByEvaluatingJavaScriptFromString:@&document.getElementByIdx_x_x_x(&foo&).offsetH&];
& & & & & NSLog(@&height: %@&, output);
& & & 【224】【popping动画演示】【进入网址】
& & & 【223】【第3方集成支付】【进入网址】
& & & 【222】【IOS7新特性之XCODE】【进入网址】
& & & 【218】【变量名和类型相同时的异常错误】
& & & FilterCtrl *FilterCtrl = [[FilterCtrl alloc]init];
& & & 这样命名变量,会报错,提示:没有声明alloc方法。。。。
& & & 【217】【定义枚举】
& & & // 定义一个枚举
& & & typedef enum {
& & & & & // 返回按钮
& & & & & FootViewBtnTypeBack,
& & & & & // 我的
& & & & & FootViewBtnTypeMine,
& & & & & // 写评论
& & & & & FootViewBtnTypeWriteComment,
& & & & & // 查看评论
& & & & & FootViewBtnTypeReadComment,
& & & & & // 关注、取消关注
& & & & & FootViewBtnTypeAttention,
& & & & & // 更多按钮
& & & & & FootViewBtnTypeMore
&& & & & &
& & & } FootViewBtnT
& & & 【216】【scrollView滚动方向】
& & & 向上拉时,contentOffset.y为正
& & & 向下拉时,contentOffset.y为负
& & & 滚动判断用到的变量:
& & & typedef void (^ScrollBlock)(void);
& & & // 向上滚动时的block
& & & @property (nonatomic,strong) ScrollBlock scrollUpB
& & & // 向下滚动时的block
& & & @property (nonatomic,strong) ScrollBlock scrollDownB
& & & // 滚动判断
& & & CGFloat startY;
& & & BOOL isNowUp;
& & & BOOL isD
& & & BOOL isUserD
#pragma mark - 滚动,新增,显示,隐藏
& & & - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
& & & & & // 开始时,标记置真
& & & & & isUserDrag = YES;
& & & & & // 记录一下开始滚动的offsetY
& & & & & startY = scrollView.contentOffset.y;
& & & - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
& & & & & // 结束时,置flag还原
& & & & & isUserDrag = NO;
& & & - (void)scrollViewDidScroll:(UIScrollView *)scrollView
& & & & & // 只有用户drag时,才进行响应
& & & & & if(isUserDrag){
& & & & & & & // 实时
& & & & & & & // 判断一下,并发出通知
& & & & & & & CGFloat newY = scrollView.contentOffset.y;
& & & & & & & if(startY - newY &0){
& & & & & & & & & // 说明向上滚动
& & & & & & & & & if(!isNowUp){
& & & & & & & & & & & //通过block告诉外部控制器
& & & & & & & & & & & if(_scrollUpBlock){
& & & & & & & & & & & & & _scrollUpBlock();
& & & & & & & & & & & }
& & & & & & & & & & & isNowUp = YES;
& & & & & & & & & & & isDown = NO;
& & & & & & & & & }
& & & & & & & }else if(startY - newY&0){
& & & & & & & & & // 说明向下滚动
& & & & & & & & & if(!isDown){
& & & & & & & & & & & //通过block告诉外部控制器
& & & & & & & & & & & if(_scrollDownBlock){
& & & & & & & & & & & & & _scrollDownBlock();
& & & & & & & & & & & }
& & & & & & & & & & & isDown = YES;
& & & & & & & & & & & isNowUp = NO;
& & & & & & & & & }
& & & & & & & }
& & & & & & & startY = scrollView.contentOffset.y;
& & & & & }
&& & & & &
& & & - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
&& & & & &
& & & & & if (_scrollDownBlock && self.tableView.contentSize.height - (self.tableView.contentOffset.y+self.tableView.bounds.size.height) & 1) {
& & & & & & & _scrollDownBlock();
& & & & & & &
& & & & & }
& & & & & if(_scrollUpBlock){
& & & & & & & _scrollUpBlock();
& & & & & & & isNowUp = YES;
& & & & & & & isDown = NO;
& & & & & & &
& & & & & }
&& & & & &
& & & 【214】【MJRefresh的github】【点击下载】
& & & 【211】【如何设置appIcon】【点击targets---&general---&use asset catalog】【查看原文】
& & & 【210】【DLog】
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@&%s [Line %d] & fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#define DLog(...)
& & & 【209】【特效滤镜】【点击下载】
& & & 【208】【往模拟器里添加照片的最简单的方法:直接把照片拖到模拟器上就可以了】
& & & 【202】【OCR图像识别】【可以实现类似taobao客户端扫描银行卡号的功能】【查看原文】
& & & 【201】【Not a git repository】
&& & & & & & & & & & & fatal: Not a git repository (or any of the parent directories): .git
& & & 解决办法:git init 即可
& & & 【199】【第3方_VKPlayer播放器】【进入网址】
& & & 【198】【pod install报错 版本不兼容】【VKVideoPlayerTests` (iOS 5.0) is not compatible with `Expecta (0.3.2)` which,解决方法:将项目deployment改高一点如:6.1即可】
& & & 【197】【CardI扫描卡没有反应】【 card.io only scans 5 card types (MasterCard, Visa, Discover, American Express, JCB),后面是stackoverflow的解答】【进入网址】 【查看原文】
& & & 【196】【无法在真机运行,XCode提示ineligible device】【解决办法:在targets----&build settings----&iOS Deployment Target选择iOS6.1或者更低的版本】
& & & 【195】【正则NSPredicate检查中文】
& & & // 检查汉字,YES代表全是汉字
& & & - (BOOL)isHanziCheck:(NSString *)str
& & & & & //& & NSString *regex = @&[a-zA-Z\u4e00-\u9fa5][a-zA-Z0-9\u4e00-\u9fa5]+&;
& & & & & NSString *regex = @&[\u4e00-\u9fa5]{2,8}&;
& & & & & NSPredicate *pred = [NSPredicate predicateWithFormat:@&SELF MATCHES %@&, regex];
& & & & & if(![pred evaluateWithObject: str]){
& & & & & & & /*
&& & & & & & & //此动画为在顶上显示文字
&& & & & & & & [MPNotificationView notifyWithText:@&昵称只能由中文、字母或数字组成&
&& & & & & & & andDuration:0.5];
&& & & & & & & */
& & & & & & & return NO;
& & & & & }
& & & & & return YES;
& & & 【186】【判断包含字符串NSRange】
& & & NSRange range = [requestURLStr rangeOfString:@&&];
& & & if (range.length & 0) {
& & & 或者
& & & if(range.location !=NSNotFound){
& & & 【184】【SDWebImage默认会永久缓存一张图片】【但如果同一个url下的图片是变化的,那暂时想到的是用内存缓存,[imgView sd_setImageWithURL:url placeholderImage:imgPlace options:SDWebImageCacheMemoryOnly];】
& & & 【180】【URL Schemes打开app】【进入网址】
& & & 【179】【URL Schemes打开app】【进入网址】
& & & 【165】【UILabel显示:标题。。。张数,设置NSLineBreakByTruncatingMiddle即可】
& & & 【162】【UserDefault写入的目录是:/var/mobile/Applications/Library/Preferences/com.beyond.testUserD.plist】
& & & 【161】【自动定位:中国浙江省杭州市西湖区西溪街道文二路下宁巷3-1号, 中国浙江省杭州市西湖区西溪街道文二路下宁巷3-1号 @ &+30.0.& +/- 100.00m, region (identifier &+30.0.& radius 49.29) &+30.0.& radius 49.29m】
& & & 【160】【自动定位:No. 3-1 Xianing Alley, No. 3-1 Xianing Alley, Wen'er Road& Xixi Residential District, Xihu Hangzhou, Zhejiang China @ &+30.0.& +/- 100.00m, region (identifier &+30.0.& radius 49.29) &+30.0.& radius 49.29m】
& & & 【80】【打开模拟器】【XCode--&Open Developer Tool--&Simulator】
& & & 【79】【Unable to determine simulator device to boot】【原因:XCode不知道选择哪一个模拟器去运行app. 解决方法:退出所有XCode和模拟器,若还不行,就重启mac】
& & & 【78】【错误installAppearanceSwizzlesForSetter】【原因是:[[UINavigationBar appearance] setTranslucent:NO]在iOS8中才有, 解决办法:#define IOS8 [[[UIDevice currentDevice] systemVersion] floatValue] &= 8.0 & & if(IOS8 && [UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) { & & & & [[UINavigationBar appearance] setTranslucent:NO]; & & }】
& & & 【71】【判断tableView滚动到了最后一行】【self.tableView.contentSize.height =contentOffset+bounds.size.height】
& & & 【61】【Cell中,先执行这个- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier,再执行这个-(void)awakeFromN】
& & & 【60】【AutoLayout中,如何让ImageView保持固定的宽高比?例如1:1】【先将imageViewframe手动写成:宽20,高20,再勾选Aspect Ratio添加宽高比约束】【查看原文】

我要回帖

更多关于 ios5.0.1 的文章

 

随机推荐