前几篇博客详细介绍了有关UIView层的动画使用与相关的效果,然而这些动画是UIKit为咱们封装好的核心动画层的方法,经过这些方法,咱们能够用的更加简便,固然功能也十分强大,基本能达到咱们项目的大多需求。可是若是你想更加自由的经过动画操做视图的属性,你就须要跳过UIKit的封装,使用CoreAnimation核心动画层的方法来实现动画。编程
在开始介绍核心动画的内容前,咱们须要先搞明白一个东西:Layer。你可能不多据说他,但是他却无处不在,在iOS的UI开发中,任何一个View包括继承于UIView的子类上面都会有一个Layer,能够理解为Layer为单独的一层,专门负责视图的显示,而view除此以外更多负责触摸时间等逻辑处理。所以,iOS也将全部动画的操做都交给你Layer来负责。数组
Layer如此神秘,那他究竟能够作到哪些事?他确实能够作不少view作不了的事情.动画
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; view.layer.masksToBounds=YES;//设置layer层的切割属性 view.layer.cornerRadius=10;//设置layer层的圆角半径
效果以下:spa
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; CALayer *layer=view.layer; layer.borderWidth=10;//设置边框的宽度 layer.borderColor=[[UIColor magentaColor]CGColor];//设置边框的颜色
注意:由于CoreAnimation层是UI层的底层,因此这里的颜色为CGColor对象。code
效果以下:对象
view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)]; [self.view addSubview:view]; view.backgroundColor=[UIColor redColor]; CALayer *layer=view.layer; layer.shadowOffset=CGSizeMake(30, 30);//设置阴影方向 layer.shadowColor=[[UIColor blackColor] CGColor];//设置阴影颜色 layer.shadowOpacity=0.5;//设置阴影透明度 layer.shadowRadius=10;//设置阴影圆角
效果以下:继承
这样的立体效果是否已经很酷了?NO,在加上动画才对。ci
CABasicAnimation是核心动画中对属性操做须要用到了一个动画类,示例以下:开发
CALayer *layer=view.layer; CABasicAnimation * ani= [CABasicAnimation animationWithKeyPath:@"opacity"];//建立对象,参数关键字为layer的属性 ani.duration=3;//设置执行时间 ani.repeatCount=1;//设置执行次数 ani.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];//设置线性效果 [layer addAnimation:ani forKey:@"test"];//添加动画 layer.opacity=0;//透明度改变时执行动画动做
经过上面的示例,咱们能够发现,layer的属性均可以来进行动画动做,这样,咱们对动画的操做就自由的不少。animation
关键帧动画除了动画改变layer的属性外,能够设置几个关键帧点,经过这些点,能够实现路径更加负责的动画,例如:
CALayer *layer=view.layer; CAKeyframeAnimation * ani = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];//建立一个关键帧动画对象 ani.duration=3; ani.values=@[@1,@0,@1];//传入三个关键帧,动画会将试图先慢慢隐藏,再慢慢展示 [layer addAnimation:ani forKey:@"test"];
类好比上代码,咱们还能够经过关键帧让试图按照咱们预约的路线移动,同时咱们还能够设置两个数组,分别为keyTimes和timingFunctions。这两个数组中的值能够设置动画每一段的运动线性特征和每一段的运动时间比例。
专一技术,热爱生活,交流技术,也作朋友。
——珲少 QQ群:203317592