標籤:
CABasicAnimation的區別是:CABasicAnimation只能從一個數值(fromValue)變到另一個數值(toValue),而CAKeyframeAnimation會使用一個NSArray儲存這些數值
屬性解析:
values:就是上述的NSArray對象。裡面的元素稱為”主要畫面格”(keyframe)。動畫對象會在指定的時間(duration)內,依次顯示values數組中的每一個主要畫面格
path:可以設定一個CGPathRef\CGMutablePathRef,讓層跟著路徑移動。path只對CALayer的anchorPoint和position起作用。如果你設定了path,那麼values將被忽略
keyTimes:可以為對應的主要畫面格指定對應的時間點,其取值範圍為0到1.0,keyTimes中的每一個時間值都對應values中的每一幀.當keyTimes沒有設定的時候,各個主要畫面格的時間是平分的
說明:CABasicAnimation可看做是最多隻有2個主要畫面格的CAKeyframeAnimation
#import "ViewController.h"@interface ViewController ()@property(nonatomic,strong)UIButton *btn;@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; self.btn=[UIButton buttonWithType:UIButtonTypeSystem]; self.btn.frame=CGRectMake(100, 100, 50, 40); [self.btn setTitle:@"按鈕" forState:UIControlStateNormal]; [self.btn addTarget:self action:@selector(btnClick:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:self.btn];}-(void)btnClick:(id)sender{ //主要畫面格動畫有兩種實現方式 一種是通過設定values的值來改變 另一種是通過設定path屬性值來改變 //values屬性 CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animation]; [email protected]"position"; NSValue *value1=[NSValue valueWithCGPoint:CGPointMake(100, 100)]; NSValue *value2=[NSValue valueWithCGPoint:CGPointMake(200, 100)]; NSValue *value3=[NSValue valueWithCGPoint:CGPointMake(200, 200)]; NSValue *value4=[NSValue valueWithCGPoint:CGPointMake(100, 200)]; NSValue *value5=[NSValue valueWithCGPoint:CGPointMake(100, 100)]; [email protected][value1,value2,value3,value4,value5]; //values和keyTimes的個數是一樣的 值在0-1之間 逐漸增加直到為1 [email protected][[NSNumber numberWithFloat:0.1],[NSNumber numberWithFloat:0.3],[NSNumber numberWithFloat:0.5],[NSNumber numberWithFloat:0.75],[NSNumber numberWithFloat:1]]; keyframeAnimation.removedOnCompletion=NO; keyframeAnimation.fillMode=kCAFillModeForwards; keyframeAnimation.duration=4.0; keyframeAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; keyframeAnimation.delegate=self; //設定動畫的key 這樣可以移除動畫 [self.btn.layer removeAnimationForKey:<#(NSString *)#>] [self.btn.layer addAnimation:keyframeAnimation forKey:@"cuiyw"]; //path屬性// CAKeyframeAnimation *keyframeAnimation=[CAKeyframeAnimation animation];// [email protected]"position";// CGMutablePathRef path=CGPathCreateMutable();// CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));// keyframeAnimation.path=path;// keyframeAnimation.duration=5.0;// //ease 緩解//// kCAMediaTimingFunctionLinear 線性(勻速)|//// kCAMediaTimingFunctionEaseIn 先慢|//// kCAMediaTimingFunctionEaseOut 後慢|//// kCAMediaTimingFunctionEaseInEaseOut 先慢 後慢 中間快|//// kCAMediaTimingFunctionDefault 預設// keyframeAnimation.timingFunction=[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];// keyframeAnimation.removedOnCompletion=NO;// keyframeAnimation.fillMode=kCAFillModeForwards;// // [self.btn.layer addAnimation:keyframeAnimation forKey:nil];// }- (void)animationDidStart:(CAAnimation *)anim{ NSLog(@"開始動畫");}- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{ NSLog(@"結束動畫");}- (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated.}@end
core Animation之CAKeyframeAnimation(主要畫面格動畫)