iOS开发笔记7:Text、UI交互细节、两个动画效果等
Text主要总结UILabel、UITextField、UITextView、UIMenuController以及UIWebView/WKWebView相关的一些问题。
UI细节主要总结界面交互开发中遇到的一些细节问题,包括Masonry部分的问题。
动画介绍最近用到的两个,算是常用级别的,动画这部分之后会专门研究总结下。
最后介绍两个工具及三个Xcode使用设置的问题。
1.Text
(1)UILabel显示多行文字并且文字置顶显示
不限制UILabel的高度(宽度需要设置,确定文字何时换行),numberOfLines设为0即可(设为0表示不限制行数)。
(2)使用NSMutableAttributedString满足个性化的显示要求
比如对文字的行间距有要求、一行文字某几个文字的大小、颜色有特殊要求等等,都可以通过NSMutableAttributedString来进行设置。
(3)文字换行模式
设置lineBreakMode,比如达到换行条件时按单词来换行NSLineBreakByWordWrapping,末尾显示省略号的NSLineBreakByTruncatingTail等。
(4)textField的clearButtonMode、placeholder、keyboardType、tintColor、tag、secureTextEntry典型应用场景
clearButtonMode,设置一键清空按钮显示模式,一般是在编辑状态下才显示该按钮
placeholder/attributedPlaceholder,设置占位文本,如果对样式有特殊要求,比如颜色等,可以设置attributedPlaceholder。
keyboardType,设置初始进入编辑状态时,默认显示的键盘类型 ,比如输入手机号码的地方,使用数字键盘UIKeyboardTypeNumberPad即可,但是实际使用时发现,如果安装了第三方输入法比如搜狗输入法时,设置UIKeyboardTypeNumberPad不起作用,键盘仍然显示为其他类型,设置为UIKeyboardTypePhonePad则生效,不同的是UIKeyboardTypePhonePad相对UIKeyboardTypeNumberPad而言还允许输入*, #,但基本样式相同。
下图为设置UIKeyboardTypePhonePad后的键盘类型
tintColor,比如对textField的编辑状态下光标的颜色有要求,设置这个属性即可。
tag,对于一个页面含有多个textField,常常需要在代理方法中进行区别单独处理,使用tag属性标明即可,textView等也是通过tag来进行区分
secureTextEntry,设置输入字符的明暗文显示,设置为YES输入字符时则显示为*,一般密码输入时用到,但需要注意的时,针对系统原生的textField,如果添加了一个明暗文开关按钮,通过控制该属性来切换显示模式时,会有一些问题,一是切换明暗文状态切换到暗文状态(secureTextEntry = YES),输入字符时之前的字符串会情况,而是暗文状态下,结束编辑状态在进入编辑状态后,如果点击删除按钮,会清空全部已输入的字符。如果想切换状态后输入不清空,再次进入编辑状态点击删除按钮只删除前一个字符,需要针对该属性重写一下textField。
(5)textField限制输入字数
textField不像textView,代理方法中是没有DidChange事件方法的,但是可以通过监听UIControlEventEditingChanged达到同样效果,进而限制输入字数
update:iOS开发笔记12:iOS7上UITextField限制字数输入导致崩溃问题
(6)textView更改return键类型并自动根据输入情况决定改按键可用性
设置两个属性即可
(7)textView如何响应按下发送按键的事件
在代理方法shouldChangeTextInRange中判断识别处理即可---- if ([text isEqualToString:@"\n"]) {...}
(8)textView实现textField中的placeholder效果
textView本身没有该属性,实现方法是在textView上添加一个UILabel作为placeholder,在代理方法中控制该label的显示情况,需要注意的是,UILabel如果直接加在textView上,后续调整布局在iOS7的设备上可能会崩溃,建议将textView加在一个view上,再将UILabel加在此view上进行控制即可。
(9)textView根据输入内容高度动态变化
写评论时如果字数较多,则textView的高度应该要随着内容的增加而变高,当然还要有一个高度限制,不能无限制增长。
在textView中输入字符时动态调整高度即可,以下方法在iOS7、8、9下测试可用
还有一个需要注意的问题,当再次进入编辑状态且存有上一次的输入草稿时,textView的光标一般应该显示在最后一个字的末尾
(10)使用正则表达式验证手机号码输入有效性
一是判断首位数字是否为1,二是根据现有情况判断第二位数字有效性,三是验证后续9个字符是否为数字
(11)自定义长按后弹出的UIMenuController
(12)UIWebView
需要注意三点,一是注意在代理方法中设置顶部状态栏的转圈,即[UIApplication sharedApplication].networkActivityIndicatorVisible
二是在willDisappear中需要做一些处理
三是loadRequest的时候注意忽略缓存,否则页面可能不是最新数据
(13)WKWebView
使用的与safari一样的引擎,iOS8及以上系统建议使用WKWebView取代UIWebView,比UIWebView好用很多,并且支持进度条显示。
(14)获取键盘高度
当输入对象被弹出的键盘遮挡时,常常需要做上移操作,获取键盘高度是计算移动距离的关键之一,可以在键盘通知事件中获取其高度
2.UI交互细节
(1)根据cell显示内容动态计算高度
需要注意的是,使用Masonry布局cell时,一定不要忽略bottom属性,因为是根据内容撑开的大小来计算高度,才能根据cell里内容确定从顶部到底部的距离,即cell的高度。
(2)使用Masonry更新布局
如果使用mas_updateConstraints方法是更新已经设置过的布局属性,使用mas_remakeConstraints是清除原有布局设置,重新布局。
(3)点击空白区域关闭弹框
对点击区域进行判断,当点击区域在弹框范围外,进行关闭操作即可
(4)view的层级管理
最常用三个,一是将view移动至最上层
二是将view移动至最下层
三是将view加载到window上
(5)使用UIImageView做背景View时注意开启userInteractionEnabled属性
UIImageView默认userInteractionEnabled属性为NO,需要开启,否则在上面添加UIButton后,点击UIButton是无法响应的,因为作为父视图的UIImageView的userInteractionEnabled属性为NO时,触摸事件是不会继续往下传递给子视图的,子视图永远无法处理触摸事件。
(6)UIButton点击区域设置
比如一个很小的图标需要支持点击,需要注意增大UIButton的响应区域,考虑用户的点击体验。
(7)SDWebImage加载进度条显示
SDWebImage已经封装了方法支持监控加载进度
(8)注意关闭UIPageControl的userInteractionEnabled属性
使用轮播图时注意关闭userInteractionEnabled属性,否则点击pageControl区域,小圆点index会变化。
(9)相册处理,PHPhotoLibrary取代ALAssetsLibrary,过滤非照片类型数据
iOS8以上建议用PHPhotoLibrary,使用ALAssetsLibrary当照片数量较多时可能会加载不完全。
另外需要注意的是过滤非照片类型的数据,比如视频等
(10)使用代码拉伸图片
3.两个动画
(1)加载等待转圈
选取一张渐变色的加载转圈图片,对图片设置动画效果
(2)CAShapeLayer + UIBezierPath实现渐变按钮
使用UIBezierPath画一个矩形,控制点添加在中间,且注意最后一个点要闭合,根据滑动的距离,控制点的X坐标随之移动变化即可
效果如下
4.其它
(1)dSYM
app使用友盟统计上线后,根据错误崩溃信息查找问题可以使用“dSYM ”这个工具进行跟踪处理。
(2)Network Link Conditioner
mac上可以下载该工具来模拟网络环境进行测试,在真机上则可以通过设置里的开发者选项找到这些工具。
(3)app启动后顶部和底部空出黑色区域问题
由于设置启动图加载方式为LaunchImage,但是没有给图片导致,系统会根据LaunchImage尺寸来决定显示尺寸,添加LaunchImage后正常显示
(4)Xcode升级后,第三方插件无法使用
获得Xcode的UUID,添加到插件对应的工程里,重新运行一遍即可正常使用。
获取Xcode的UUID:“defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID”
(5)使用代码块提高效率
对于经常重复输入的一些代码,比如一些代理方法,布局代码等,使用代码块进行管理可以提高效率,对于其中的变量,在设置代码块的时候,以<#变量名称#>这样的格式设置即可,下次使用时,编译器就能识别出这里需要输入值。
5.参考
(1)Text Programming Guide for iOS
(2)AssetsLibrary framework broken on iOS 8
(7)Understanding and Analyzing iOS Application Crash Reports
(8)Xcode插件 info.plist/DVTPlugInCompatibilityUUIDs
(9)dSYM 文件分析工具
(10)放肆的使用UIBezierPath和CAShapeLayer画各种图形
iOS开发笔记7:Text、UI交互细节、两个动画效果等的更多相关文章
- iOS开发笔记6:图片轮播及其无限循环效果
平时APP中的广告位或者滚动的新闻图片等用到的就是图片轮播这种效果,实现方式主要有两种,一种是ScrollView+ImageView,另一种则是通过CollectionView,今天总结的是Scro ...
- 【Swift】iOS开发笔记(二)
前言 这个系列主要是一些开发中遇到的坑记录分享,有助于初学者跨过这些坑,攒够 7 条发一篇. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯 ...
- 菜鸟手下的iOS开发笔记(swift)
在阳春4月的一天晨会上,有一个老板和蔼的对他的一个菜鸟手下说:“你既然会Android,那你能不能开发iOS?” 不是说好的要外包的吗?内心跌宕,但是表面淡定的菜鸟手下弱弱的回道:“可以试试”. 第二 ...
- iOS开发笔记-两种单例模式的写法
iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" ...
- iOS开发笔记--什么时候调用layoutSubviews
iOS开发笔记--什么时候调用layoutSubviews 分类: iOS2014-04-22 16:15 610人阅读 评论(0) 收藏 举报 今天在写程序时候遇见layoutSubviews触发时 ...
- IOS开发笔记(4)数据离线缓存与读取
IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...
- IOS开发笔记 IOS如何访问通讯录
IOS开发笔记 IOS如何访问通讯录 其实我是反对这类的需求,你说你读我的隐私,我肯定不愿意的. 幸好ios6.0 以后给了个权限控制.当打开app的时候你可以选择拒绝. 实现方法: [plain] ...
- iOS开发笔记18:一些编译、开发调试、打包的细节整理
1.以链库的方式引用第三方库 一些特殊场景可能会要求使用链库的方式使用第三方库,大体设置如下: ①Other Linker Flags里进行设置,格式为-l+库名称 ②Libray Search Pa ...
- 【IOS开发笔记03-视图相关】简单计算器的实现
UIView 经过前几天的快速学习,我们初步了解的IOS开发的一些知识,中间因为拉的太急,忽略了很多基础知识点,这些知识点单独拿出来学习太过枯燥,我们在今后的项目中再逐步补齐,今天我们来学习APP视图 ...
随机推荐
- ruby -- 进阶学习(十五)friendly_id配置
实现效果:http://127.0.0.1:3000/article/1 => http://127.0.0.1:3000/article/书名 (1)Rails 4.0的friendly_ ...
- django 快速实现注册
前言 对于web开来说,用户登陆.注册.文件上传等是最基础的功能,针对不同的web框架,相关的文章非常多,但搜索之后发现大多都不具有完整性,对于想学习web开发的新手来说不具有很强的操作性:对于web ...
- 你不一定知道的几个很有用的 Git 命令
这里给大家分享一些很有用的 Git 命令,其中很多用法你可能都不知道,无论你是工作在团队环境中或在您的个人项目中,这些命令将对你帮助很大,让你可以更加高效的进行项目开发,更轻松愉快的工作和生活. 您可 ...
- 说说Web API数据格式化——Json
题外话 一同事离职了,我去上厕所的路上正巧碰到他办完离职手续出来,抱着他的全部家当,最值钱的可能就是那个两块钱的蓝色杯子和手中的雨伞了.在一块儿走向厕所的长长楼道里,我对他说:丫的,你是不是找到别的发 ...
- UWP开发入门(十七)——判断设备类型及响应VirtualKey
蜀黍我做的工作跟IM软件有关,UWP同时会跑在电脑和手机上.电脑和手机的使用习惯不尽一致,通常我倾向于根据窗口尺寸来进行布局的变化,但是特定的操作习惯是依赖于设备类型,而不是屏幕尺寸的,比如聊天窗口的 ...
- QCustomplot使用分享(五) 布局
一.历史对比 关于QCPLayoutElement这个元素的讲解之前,我想先对1.3.2release版本和2.0.0beta版本的该元素做以简单的对比介绍,首先,1.3.2release版本时,鼠标 ...
- 《构建之法》第8、9、10章 读书笔记和Sprint总结
第八章:需求分析 这章主要解析了需求的多面方面,不同的项目需要不同的手段,真正的需求稍纵即逝,需要靠火眼金睛和敏捷的身手来发现并抓住它们.另外,很多时候用户并不知道自己确切的需求,或者不愿意表达完整的 ...
- .net中WebService的使用实例
一.创建一个Webwebservice 1.新建一个项目WebserverDemo 2.在项目处添加新建项,添加一个web服务 3.编辑TestServer.asmx文件 3.1 TestServer ...
- Python基础:映射(字典)
一.概述 映射类型(Mapping Types)是一种关联式的容器类型,它存储了对象与对象之间的映射关系. 字典(dict)是Python中唯一的映射类型,它是存储了一个个 键值对(由 键 映射到 值 ...
- c#开发工具软件集合
visual studio 2015(自带Nuget) Resharper de4dot dnspy ILMergeGui Git 大漠插件3.1233 天使插件v4.019 Navicat_Prem ...