您的位置:首页 > 移动开发 > IOS开发

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

2017-01-03 10:17 711 查看
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的图像

· 所以每次画图的时候,会有一个解压操作,这
9f3e
样效率很低,但是只有瞬时的内存需求

· 为了提高效率通过SDWebImageDecoder将包装在Data的资源解压,然后画在另外一张图片上,这样新的图片就不再需要重复解压了

· 这是典型的空间换时间的做法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: