iOSCABasicAnimation的創建、停止和恢復

#pragma mark - 當前視圖被觸摸

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    

    

    //1.判斷myView.layer上是否添加了動畫

    CAAnimation *animation = [myView.layer animationForKey:@"rotationAnimation"];

    if (animation) {

        

        //2.判斷是否暫停、恢復

        

        if (myView.layer.speed == 0) {

            //恢復動畫

            [self resumeAnimation];

        } else {

            //暫停動畫

            [self pauseAnimation];

        }

        

    } else {

        [self rotationAnimation];

    }

}


#pragma mark - 動畫效果


//暫停動畫

- (void)pauseAnimation {

    

    //0-5

    //開始時間:0

//    myView.layer.beginTime

    //1.取出當前時間,轉成動畫暫停的時間

    CFTimeInterval pauseTime = [myView.layer convertTime:CACurrentMediaTime() fromLayer:nil];

    

    //2.設置動畫的時間偏移量,指定時間偏移量的目的是讓動畫定格在該時間點的位置

    myView.layer.timeOffset = pauseTime;

    

    //3.將動畫的運行速度設置爲0 默認的運行速度是1.0

    myView.layer.speed = 0;

    

}


//恢復動畫

- (void)resumeAnimation {

    

    //1.將動畫的時間偏移量作爲暫停的時間點

    CFTimeInterval pauseTime = myView.layer.timeOffset;

    

    //2.計算出開始時間

    CFTimeInterval begin = CACurrentMediaTime() - pauseTime;

    

    [myView.layer setTimeOffset:0];

    [myView.layer setBeginTime:begin];

    

    myView.layer.speed = 1;

}


//CABasicAnimation 實現旋轉動畫

- (void)rotationAnimation {

    

    //1.創建動畫對象

    //默認是按Z軸旋轉

    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];

    

    //2.設置動畫屬性

    [basic setToValue:@(2*M_PI)];  //2*M_PI 旋轉一週

    [basic setDuration:0.5f];

    

    //動畫完成後,是否從CALayer上移除動畫對象

//    [basic setRemovedOnCompletion:YES];

    

    //設置重複次數,HUGE_VALF是一個非常大的浮點數

    [basic setRepeatCount:HUGE_VALF];

    

    //動畫根據錨點旋轉的

    //修改錨點

    [myView.layer setAnchorPoint:CGPointMake(0, 0)];

    

    

    //3.添加動畫

    [myView.layer addAnimation:basic forKey:@"rotationAnimation"];

    

}


//CABasicAnimation 實現縮放動畫

- (void)scaleAnimation {

    

    //1.創建動畫對象

    CABasicAnimation *basic = [CABasicAnimation animationWithKeyPath:@"transform.scale"];

    

    //2.設置動畫的屬性

    //fromValue toValue

    

    [basic setFromValue:@1];

    [basic setToValue:@2];

    

    //設置動畫的時長

    [basic setDuration:0.6f];

    

    //是否自動恢復原始

//    [basic setAutoreverses:YES];

    

    basic.removedOnCompletion = NO;

    basic.fillMode = kCAFillModeForwards;

    

    //3.將動畫添加到CALayer

    [myView.layer addAnimation:basic forKey:nil];

}


發佈了34 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章