UIKit
动画在iOS开发中是非常常见的组成部分 能给用户带来一些有趣的用户体验 同时也能让用户更快的聚焦到App上来 以达到更好的展示效果 动画能很大程度上的提高用户对App的喜爱程度
iOS中的动画API
//最基础的动画API
UIView animateWithDuration: animations:
//带有回调的动画API
UIView animateWithDuration: animations: completion:
//可设置动画效果的API
UIView animateWithDuration: delay: options: animations: completion:
//弹簧动画 iOS7以后大面积使用
UIView animateWithDuration: delay: usingSpringWithDamping: initialSpringVelocity: options: animations: completion:
-Duration:表示动画播放时长
-animations:将动画内容包括在里面
-delay:延迟多少时间以后播放动画
-options:设置动画属性 例如repeat EaseInOut之类
-completion:动画完成以后的回调 如果不需要则为nil
-usingSpringWithDamping:弹簧动画独有 表示阻尼 阻尼和弹簧的弹性成反比
-initialSpringVelocity:弹簧动画独有 表示初始速度 初始速度和弹簧的弹性成正比
iOS中可以动画形式呈现的属性有:
frame
bounds
center
alpha
transform
backgroundColor
centerStretch
同时 可以将动画写在ViewWillAppear中 避免view在load的时候就已经加载过动画 导致界面不正常或糟糕的用户体验
以alpha为例
//现将要以动画形式展现的label的alpha设置为0.0(完全透明 界面上没有显示)
- (void)viewDidLoad {
[super viewDidLoad];
self.locationLabel.alpha = 0.0;
}
//在view要出现的时候同时显示label以达到动画效果 EaseInOut是表示label显示速度递增 从慢到快的显示过程
-(void)viewWillAppear:(BOOL)animated{
[UIView animateWithDuration:3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
self.locationLabel.alpha = 1.0;
} completion:nil];
}
这样就完成了一个iOS中最简单的animation
附自己用swift实现的各类基础动画github地址:https://github.com/ThecoadeR/iOS-Animation-Swift-
View Transition
View Transition各个界面之间的专场动画 例如:小说App中的当前页翻到下一页
当前页面的subView修改
使用这个API好坏都显而易见 好处是他会将subView以一个snapshot image的形式加载 对性能的优化非常好 但是坏处就是 不可以做多余的修改 如果需要做多余的修改 则需要将option改成 UIViewAnimationOptionsAllowAnimatedContent(OC这么长的函数真是反人类 = =)
subview修改.png
View和View之间的替换
较多应用于场景变化 其实也就是show和Hide 不过反复加载对性能会是个负担
View之间切换.png
Core Animation
Core Animation是对layer层进行动画修改 能做的事比基础的UIKit动画多很多 功能也较为强大
对Layer的属性修改都会通过CATransaction然后提交 因此可以将所有的修改完成以后 一次性全部提交 不需要一个个单独提交
CATransaction.png
隐式动画
Core Animation会默认开启隐式动画 对CALayer层进行修改以后 就会触发动画 比如修改颜色 会自动出现过度颜色的动画
CALayer可动画的属性
非常多= =就不一一列举了。。
CALayer动画属性.png
网络编程
iOS中提供了一套原生的API(NSURLSession和NSURLConnection)
由于NSURLConnection已经被废弃 所以就不多说啦 各位老板见谅╮(╯▽╰)╭
NSURLSession的结构
首先构造一个NSURLSession对话 对话里头有config config可以配置缓存、各类Cookies(账号密码之类)、协议、签名 同时可以使用不同的设置 例如在ipv6或ipv4环境下运行
然后再纷发Task 一个NSURLSession可以有多个Task
NSURLSession结构.png
NSURLSession使用过程
1、根据Session选择NSURLSessionConfiguration(并不是alloc init构造)
2、配置config
3、用config创建Session
+[NSURLSession sessionWithConfiguration:delegat]
+[NSURLSession sessionWithConfiguration:]
4、用Session创建网络任务(也就是Task)
5、启动任务
-[NSURLTask resume]
NSURLSession类型
-全局(Default sessions)
最为广泛使用的一种session 文件缓存在系统中 在keychain中保存凭证
-私有(Ephemeral sessions)
数据缓存在内存里 同时数据只在session期间存在
-后台(Background sessions)
如有App需要在后台时还在运行(百度地图) 选择该类型 有专门的处理机制 其他的特点和Default sessions一致
Task类型
-Download Task
接收文件 支持后台下载
-Upload Task
上传文件
-Data Task
用NSData收发数据 适用于临时通讯
网友评论