iOS:核心動畫之基本動畫CABasicAnimation

來源:互聯網
上載者:User

標籤:

基本動畫,是CAPropertyAnimation的子類屬性說明:fromValue:keyPath相應屬性的初始值toValue:keyPath相應屬性的結束值動畫過程說明:隨著動畫的進行,在長度為duration的期間內,keyPath相應屬性的值從fromValue漸漸地變為toValuekeyPath內容是CALayer的可動畫Animatable屬性如果fillMode=kCAFillModeForwards同時removedOnComletion=NO,那麼在動畫執行完畢後,圖層會保持顯示動畫執行後的狀態。但在實質上,圖層的屬性值還是動畫執行前的初始值,並沒有真正被改變。 具體的示範執行個體如下:功能實現:點擊視圖中的按鈕,可以控制器動畫過程的恢複運行和運行停止,等到動畫運行到指定位置時,動畫就停在此處,不在返回原處。 操作步驟:1、拖一個按鈕控制項到故事板控制器的視圖中,名字為play/stop,然後關聯按鈕事件(改變按鈕的tag,調用播放或暫停方法)2、建立核心動畫子層並加到父核心動畫層中,然後再建立一個tap觸摸手勢,並對觸摸事件做處理(建立動畫的過程)3、完成之前定義的所有事件,同時實現動畫的協議。  具體的代碼如下://拖控制項,關聯事件     //在-(void)viewDidLoad{}方法中,建立子層,並添加到父層中
    //建立子層    self.subLayer = [CALayer layer];        self.subLayer.bounds = CGRectMake(0, 0, 100, 100);        self.subLayer.position = CGPointMake(100, 100);        self.subLayer.backgroundColor = [[UIColor redColor]CGColor];        self.subLayer.cornerRadius = 50;        [self.view.layer addSublayer:self.subLayer];
//在-(void)viewDidLoad{}方法中,建立手勢,添加手勢事件
    //建立tap手勢    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(Tap:)];    tap.numberOfTapsRequired = 1;    tap.numberOfTouchesRequired = 1;    [self.view addGestureRecognizer:tap];
//處理手勢事件,建立基本動畫
#pragma mark -tap手勢處理-(void)Tap:(UITapGestureRecognizer *)sender{    //擷取當前的點擊的位置    CGPoint location = [sender locationInView:self.view];        //建立基本動畫    CABasicAnimation *basicAnimation = [[CABasicAnimation alloc]init];        basicAnimation.duration = 5.0f;    
//設定動畫改變的值為position basicAnimation.keyPath = @"position"; //BasicAnimation.fromValue用當前位置,不用設定 basicAnimation.toValue = [NSValue valueWithCGPoint:location]; //動畫執行完,停留下來,不返回原值,需要設定下面的兩個屬性 basicAnimation.removedOnCompletion = NO; basicAnimation.fillMode = kCAFillModeForwards; //設定代理 basicAnimation.delegate = self; //設定一個鍵區分動畫,將指定的動畫添加到子層中 [self.subLayer addAnimation:basicAnimation forKey:@"BasicAnimation"]; //沒有具體實現代理方法的情況下,subLayer雖然發生移動,但是它的真正位置並沒有發生改變 //NSLog(@"%@",NSStringFromCGPoint(self.subLayer.position));}
//實現按鈕事件
- (IBAction)buttonClicked:(UIButton *)sender{    if (sender.tag == 0)    {        //動畫暫停        [self animationPause];        sender.tag = 1;    }    else    {        //動畫恢複        [self animationResume];        sender.tag = 0;    }}
//自訂動畫暫停方法
//動畫暫停-(void)animationPause{    //擷取當前暫停時間    //CFTimeInterval pauseTime = [self.subLayer convertTime:CACurrentMediaTime() fromLayer:nil];    CFTimeInterval pauseTime = CACurrentMediaTime();        //層的速度為0,停止動畫    self.subLayer.speed = 0;        //儲存暫停時間,便於恢複    self.subLayer.timeOffset = pauseTime;}
//自訂動畫恢複方法
//動畫恢複-(void)animationResume{    //擷取暫停時儲存的時間    CFTimeInterval pauseTime = self.subLayer.timeOffset;    self.subLayer.timeOffset = 0;            //設定速度    self.subLayer.speed = 1.0;        //清除開始時間    self.subLayer.beginTime = 0.0;            //計算開始時間    CFTimeInterval beginTime = [self.subLayer convertTime:CACurrentMediaTime() fromLayer:nil] - pauseTime;        //重設開始時間    self.subLayer.beginTime = beginTime;}
//實現動畫代理方法
#pragma mark -動畫代理的方法//動畫開始時觸發的方法-(void)animationDidStart:(CAAnimation *)anim{    //開始時的當前值    //NSLog(@"animationDisStart:%@",((CABasicAnimation *)anim).fromValue);}//動畫停止時觸發的方法-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag{    //停止時的終點值    //NSLog(@"animationDidStop,%@",((CABasicAnimation*)anim).toValue);        //將subLayer的屬性值真正變為動畫停止時的屬性值    NSValue *toValue = ((CABasicAnimation*)anim).toValue;    CGPoint point = [toValue CGPointValue];    self.subLayer.position = point;}@end
//顯示的介面如下,(運行過程就不了,可以自己寫代碼驗證):   

iOS:核心動畫之基本動畫CABasicAnimation

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.