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

ios中的动画

2016-02-29 21:22 483 查看
今天好好整理下ios中用到的动画

首先是UIViewAnimation动画

首先是最传统的方法 也是苹果建议的方法

UIView.animateWithDuration(2.0, delay: 0.0, options:[UIViewAnimationOptions.CurveEaseIn,UIViewAnimationOptions.Repeat], animations: { () -> Void in
self.firstView?.frame.origin.x += 100
}, completion: nil)


begin和commit的方法

func beginCommit() {
//开始动画
UIView.beginAnimations("animate", context: nil)
//设置动画的一些参数
UIView.setAnimationDuration(2.0)
UIView.setAnimationRepeatAutoreverses(true)
//设置代理
UIView.setAnimationDelegate(self)
self.firstView?.frame.origin.x += 100
//代理的两个函数
UIView.setAnimationWillStartSelector("animationDidStart:")
UIView.setAnimationDidStopSelector("animationDidStop:")
//结束动画
UIView.commitAnimations()
}
override func animationDidStart(anim: CAAnimation) {
print("1")
}
override func animationDidStop(anim: CAAnimation, finished flag: Bool) {
print("2")
}
内嵌nest的方法 默认继承外部的option和duration 不过可以改变 重写即可

UIView.animateWithDuration(2.0, delay: 0.0, options:[UIViewAnimationOptions.CurveEaseIn,UIViewAnimationOptions.Repeat], animations: { () -> Void in
self.firstView?.frame.origin.x += 100
UIView.animateWithDuration(3.0, delay: 0.0, options: [UIViewAnimationOptions.OverrideInheritedDuration,UIViewAnimationOptions.OverrideInheritedCurve,UIViewAnimationOptions.CurveEaseIn], animations: { () -> Void in
self.secondView?.frame.origin.x += 100
}, completion: nil)
}, completion: nil)
替换view和转场View

//代替view
func replaceView() {
let view1 = UIView(frame: CGRectMake(89,90,500,500))
view.backgroundColor = UIColor.greenColor()
//代替上面的View 防止动画发生在层上面 用allowContent
UIView.transitionFromView(self.secondView!, toView: view1, duration: 2.0, options: [UIViewAnimationOptions.AllowAnimatedContent,UIViewAnimationOptions.CurveEaseOut], completion: nil)    }
}
UIView.transitionWithView(<#T##view: UIView##UIView#>, duration: <#T##NSTimeInterval#>, options: <#T##UIViewAnimationOptions#>, animations: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>, completion: <#T##((Bool) -> Void)?##((Bool) -> Void)?##(Bool) -> Void#>)


隐式动画 显示动画 和关键帧动画都是发生在层上面的,层就是这里动画的主角 每一个View都有一个层, 也可以自己手动创建层 可以说view是来处理事件的,比如触摸,而层是用来显示图片的

//创建layer
var layer = CALayer()
//根layer也就是view的layer
self.view.layer
layer.backgroundColor = UIColor.magentaColor().CGColor
//layer的frame
layer.frame = CGRectMake(100, 100, 100, 100)
layer.shadowOffset = CGSize(width: 5.0, height: 5.0)
//阴影的透明度
layer.shadowOpacity = 5.0
self.view.layer.addSublayer(layer)


直接控制层的一些属性而产生的动画 为隐式动画 例如

self.layer.position.x += 100


显示动画是用core animation创建的 是人为可以控制的 我们要提供这个动画设置的对象是谁 还有这个对象的初始值 和结束值 还有中间 加的值 还有动画的执行时间等 最后把他交给要执行的动画的层 即可

func basicAnimate() {
//这里是设置哪个path 是定死的 具体可查表
let basic = CABasicAnimation(keyPath: "tranform.scale")
//设定动画的内容  初始值 最终值 加的值
basic.fromValue = 1.0
basic.toValue = 2.0
basic.byValue = 0.2
//设置时间
basic.duration = 3.0
//设置循环 还要回去
basic.autoreverses = true
//设置循环的次数 因为是浮点数 所以赋值最大的浮点数
basic.repeatCount = MAXFLOAT
//设置动画的交代对象 还有标示这个动画
mainView.layer.addAnimation(basic, forKey: "key")
}








关键帧动画 设定每一帧的位置 比如 随后可以设定每一帧之间执行的时间速度和长短等

func keyFrame() {
//用关键帧动画
let layer = self.image?.layer
let keyAnimate = CAKeyframeAnimation(keyPath: "position")
//设置每一帧
let pos = layer?.position
let value0 = NSValue(CGPoint: pos!)
let value1 = NSValue(CGPoint: CGPointMake((pos?.x)!, pos!.y + 200))
let value2 = NSValue(CGPoint: CGPointMake((pos?.x)! - 200, pos!.y + 200))
let value3 = NSValue(CGPoint: CGPointMake((pos?.x)! - 200, pos!.y))
//回到最终值
let value4 = NSValue(CGPoint: CGPointMake((pos?.x)!, pos!.y ))
keyAnimate.values = [value0,value1,value2,value3,value4]
//设置每一帧动画间执行速度的快慢
let tf0 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
let tf1 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
let tf2 = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
let tf3 = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
//let tf4 = CAMediaTimingFunction(name: kCAMediaTimingFunctionDefault)

keyAnimate.timingFunctions = [tf0,tf1,tf2,tf3]
//设置每一帧之间的时间 在每一帧停留的时间
keyAnimate.duration = 12
keyAnimate.autoreverses = false
keyAnimate.keyTimes = [0.5,1.0,2.0,3.0,1.0]
self.image?.layer.addAnimation(keyAnimate, forKey: "animate")
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: