关于iOS基础总结(4)--动画、MVVM、图片缓存、常用第三方

来源:互联网 发布:恺英网络借壳上市 编辑:程序博客网 时间:2024/06/05 07:52

1、关于项目中动画的使用
· 序列帧动画:self.imageView.animationImages = array;
· [UIView animateWithDuration] + CGAffinetransform
· 核心动画CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@”position.y”]; anim.fromValue toValue repeatCount [btn.layer addAnimation]
· 关键帧动画CAKeyframeAnimation,anim.values = array,添加到layer上
· 组动画CAAnimationGroup,将以上动画组合起来
· 转场动画:CATransition,设置duration和type,然后添加到layer上。利用UIView 的类方法实现转场动画
[UIView transitionWithView: duration: options: animations:^{ } completion:nil];
· UIDynamicAnimator仿真者 、 UISnapBehavior吸附行为,设置damping来调节震动幅度 、 UIPushBehavior推动行为 、 UICollisionBehavior碰撞边缘检测行为 、 UIAttachmentBehavior附着行为 、 UIGravityBehavior重力行为
· POPSpringAnimation

·· springBounciness[0,20]越大振幅越大。
·· pringSpeed速度


2、谈谈你对MVVM的认识
· 说到MVVM,就必须先说MVC,MVC就是Model显示数据,View呈现用户界面,Controller调节二者之间的交互,但是这个结构存在的问题就是模型的代码太少,而随着功能的增加控制器的代码会越来越多,而且不方便测试(比如办一个饭卡,默认一百元);

· 在MVVM中,view和view controller正式联系在一起,我们将它视为一个组件,这两个都不能直接引用model,而是引用视图模型view model,里面放置着用户输入验证逻辑,视图显示逻辑,发送网络请求等代码,view model再去引用model

· 这个的优点呢,首先就是低耦合,view可以独立于model变化和修改,一个viewModel可以绑定到不同的view上,可重用性,也有利于独立开发,开发人员可以专注业务逻辑和数据的开发,设计人员可以专注于页面设计
实际用例

楼市餐厅需要充餐卡,默认是100元,在模型层中,如果想保存这个值 –> let balanece = 100
但是展示给用户的时候,我们想呈现出“您的账户余额为:¥100”,在mvc中,这种代码只能放到视图控制器中,显得很臃肿,如果放在模型当中,会更丑,因为有许多进行格式化的代码挤在其中
如果添加视图模型,仅仅需要映射一下原始数据
通过这种方式,视图模型实际上会读取数据模型,然后将其中的信息进行格式化,从而准备展现在视图当中,很容易测试,直接把带有账户信息的模型放进去,然后测试显示就可以了,在之前是特别复杂的

· 在去年WWDC上,Andy(iOS4.1-8的UIKit框架维护者)演讲中有一个关于zoetrope(西洋镜)的例子

大概意思就是每一帧都是静态值,可以通过改变任务手部抬起的距离,或者任务头部倾斜的距离,来对字符进行编码。每一帧都是静态的,但是当把他们放在一起,然后一直看向一个中心的话,那么始终都有新的数据出现,这样就可以得到一个而美丽的、生动的动画(类比Tom猫)

我们可以使用相同的方式来实现值类型,视图控制器会跟随zoetrope的最后一个帧图像–也就是最新的一块活跃数据,然后将其展示给用户。只要您的模型发生了更新,视图就会根据最新的信息进行更改了


3、列举一下你常用的第三方库
· Xcode插件

Alcatraz:Xcode 插件管理工具
ColorSense-for-Xcode:代码生成颜色预览,可视化编辑
KSImageNamed-Xcode:引入图片自动提示,预览
VVDocumenter-Xcode:规范化注释

· 项目中常用的第三方库

AFNetworking:网络库,通常会在AFN上面再封装一层,主要封装接口逻辑
SDWebImage:下载网络图片,定时清除缓存
Reachability:网络状态判断,AFN已经有这个功能
WebViewJavaScriptBridge:Webview和cocoa之间消息传递
fmdb:SQLite的封装,简单易用
DTCoreText:CoreText库,支持HTML
KissXML:XML解析,支持读取和修改,基于libxml
ZXingObjC:二维码,支持编码解码
GTMBase64:base64编解码
GPIImage:图像处理
JSONKit:json解析,性能最好
Mansonry:辅助自动布局
MJRefresh:上拉加载,下拉刷新
MBProgressHUD:进度图,加载效果提示


4、为什么AFN显示图片不如SDWebImage流畅?同样是从网络上下载图片而不是从缓存取图片?
· 因为SDWebImage有一个decoder
· UIImage的imageWithData函数是每次画图的时候才将Data解压成ARGB的图像
· 所以每次画图的时候,会有一个解压操作,这样效率很低,但是只有瞬时的内存需求
· 为了提高效率通过SDWebImageDecoder将包装在Data的资源解压,然后画在另外一张图片上,这样新的图片就不再需要重复解压了
· 这是典型的空间换时间的做法

0 0
原创粉丝点击