Core Animation iOS 核心动画
新年伊始,刚刚休息完,才反应过来,看了一半的core animation。有人说前端的app 开发,其实就是
网络api 数据请求+本地数据处理+动画。
想想说的好像是这个道理,不过这里的每一个环节都有全球的程序员,在不断的简化,完善,每天写代码为了这些逻辑。
苹果的核心动画在网上有很多,比如,baidu,这里就不在说其他的动画翻译了。
我个人感觉,核心动画,只有遇到的时候,自己亲自看到效果的时候才能真的体会到,靠大脑想象,应该就是想想了。
1、资料
这里没有别的,文档
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/SettingUpLayerObjects/SettingUpLayerObjects.html#//apple_ref/doc/uid/TP40004514-CH13-SW5
可能这个比较苦逼,可是没有办法,外国人的东西。
2、架构
看文档的时候,第一篇第一章可能就是说core Animation d的架构
openGL 还有手机底层硬件的东西,除了面试的时候要问你,可能平时开发app 你基本用不到,用不到基本和不会没有什么差距,因为知道名字不代表什么。
关于Animation 架构
在文档辅路里面明显感觉到,平时用的比较的一定是CABasicAnimation
3、属性
关于动画本身的基本物,平移,旋转,缩放,其他的动画,我也暂时想不到,欢迎交流。
在附录中总结了一下
3.1Layer
bounds,position,frame,anchorPoin(锚点),cornerRadius,transform,
3.2Content
contents,masksToBounds,ContensGravity
3.3SubLayers Content
subLayers,maskToBounds,subLayerTransForm
3.4Border
border,borderColor
3.5Shadow
shadowColor,shadowOffset,shadowOpactiy,shadowRadius,shadowPath.
3.6~~ Opacity,mask---layer
具体的解释
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreAnimation_guide/AnimatableProperties/AnimatableProperties.html
4、本质
动画的本质,在最上的层面上,我暂时理解为对于layer 变换,如果边框的约束,透明度,大小,位置,z轴的约束等。layer之间的切换。
底层的还没有研究,不过如果可以研究加利用这样才能真的了解和领悟。
5、总结
这里一行代码没有写,感觉无聊
code
-
(IBAction)baseAnimation:(id)sender {
CABasicAnimation *fadAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadAnimation.fromValue = @(1.0);
fadAnimation.toValue = @(0.0);
fadAnimation.duration = 1;
[self.imgView.layer addAnimation:fadAnimation forKey:@"opacity"];
} -
(IBAction)pathRefAnimation :(id)sender {
CGMutablePathRef thePath = CGPathCreateMutable();
CGPathMoveToPoint(thePath, nil, 74, 74);
CGPathAddCurveToPoint(thePath, NULL, 74, 500, 320,500 , 320, 74);
CGPathAddCurveToPoint(thePath, NULL, 320, 500, 566, 500, 566, 74);
CAKeyframeAnimation *theAnimation;
theAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];;
theAnimation.path = thePath;
theAnimation.duration = 5;
[self.imgView.layer addAnimation:theAnimation forKey:@"position"];
} -
(IBAction)keyPathAnimations:(id)sender {
CAKeyframeAnimation *widthAnimation = [CAKeyframeAnimation animationWithKeyPath:@"borderWidth"];
NSArray *widthArray = [NSArray arrayWithObjects:@1.0,@10.0,@4.0,@30.0,@0.5,@15.0,@2.0,@50,@0.0, nil];
widthAnimation.values = widthArray;
widthAnimation.calculationMode = kCAAnimationPaced;CAKeyframeAnimation *colorAnimation = [CAKeyframeAnimation animationWithKeyPath:@"borderColor"];
NSArray *colorValues = [NSArray arrayWithObjects:(id)[UIColor greenColor].CGColor,(id)[UIColor blackColor].CGColor,(id)[UIColor redColor].CGColor,nil];
colorAnimation.values = colorValues;
colorAnimation.calculationMode = kCAAnimationPaced;CAAnimationGroup *group = [CAAnimationGroup animation];
group.animations = [NSArray arrayWithObjects:colorAnimation,widthAnimation, nil];
group.duration = 5.0;
[self.imgView.layer addAnimation:group forKey:@"bowc"];
}
这是三个苹果文档动画,我简单的自己写了一边,改了几个参数。
这里要说明的时候苹果本身封装一些简单实用的基本动画,根据键值来设置,用最少的代码来实现动画,可能让你不懂,但是基本架构掌握了,其他的就是时间问题。目前我正在和好朋友设计app,感觉代码是个逻辑的表现形式,比如动画的快慢模拟,动效的拟物话,都不是我们这码农平时接触到的,多看看其他方面的东西,还是很用帮助的。
希望这一年有新的收获和领悟。