core Animation之CAKeyframeAnimation(主要畫面格動畫)

來源:互聯網
上載者:User

標籤:

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(主要畫面格動畫)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.