iOS 開發(fā)中的動畫 CoreAnimation

前面iOS 開發(fā)動畫 View Animation講的都是基于 UIView 的系統(tǒng)封裝的高級 API。CoreAnimation 是在 Layer層上操作添加動畫,可以做出更復(fù)雜的動畫。

UIView 和 CALayer 的區(qū)別:

(1) UIView 是繼承自 UIResponse,可以處理響應(yīng)事件,CALayer 是繼承自 NSObject,只負(fù)責(zé)內(nèi)容的創(chuàng)建和繪制。
(2) UIView 負(fù)責(zé)內(nèi)容的管理,CALayer 負(fù)責(zé)內(nèi)容的繪制。
(3) UIView 的位置屬性 frame bounds center 而 CALayer除了這些屬性之外還有 anchorPoint position
(4) CALayer 可以實(shí)現(xiàn) UIView 很多無法實(shí)現(xiàn)的功能

注意:CoreAnimation 的動畫執(zhí)行過程都是在后臺執(zhí)行的,不會阻塞主線程。

CABaseAnimation

常用的屬性
animation.keyPath // 動畫操作的屬性
animation.toValue // 屬性值的最終值
animation.duration // 動畫執(zhí)行的時(shí)間
animation.fillMode // 執(zhí)行后的狀態(tài)
animation.isRemovedOnCompletion // 動畫執(zhí)行后要不要刪除
動畫的類型
1.平移動畫: position  transform.translation.x transform.translation.y transform.translation.z
2.旋轉(zhuǎn)動畫: transform.rotation  transform.rotation.x   transform.rotation  transform.rotation.y
3.縮放動畫: bounds  transform.scale  transform.scale.x  transform.scale.y
4.顏色動畫:backgroundColor borderColor
5.淡入淡出:opacity
6.高級動畫:(圓角)cornerRadius (邊框) borderWidth (陰影)shadowOffse

CABaseAnimation選擇其一 keyPath 作為例子
陰影動畫

override func viewDidLoad() {
        super.viewDidLoad()
        redView.layer.shadowColor = UIColor.black.cgColor
        redView.layer.shadowOpacity = 0.5
        let animation = CABasicAnimation()
        animation.keyPath = "shadowOffset"
        animation.toValue = NSValue(cgPoint: CGPoint(x: 10, y: 10))
        animation.duration = 2.0
        animation.fillMode = kCAFillModeForwards
        animation.isRemovedOnCompletion = false
        redView.layer.add(animation, forKey: nil)
    }

CAKeyframeAnimation

新增幾個(gè)屬性
path:運(yùn)動的路線
values: 關(guān)鍵幀(如果設(shè)置了 path,values 是被忽略的)
keyTimes:為對應(yīng)的關(guān)鍵幀指定的時(shí)間點(diǎn),范圍是0~1的

    // 1.創(chuàng)建動畫對象
    CAKeyframeAnimation * anim = [CAKeyframeAnimation animation];

    // 2.設(shè)置動畫屬性
    anim.keyPath = @"position";

    CGMutablePathRef path = CGPathCreateMutable();
    CGPathAddEllipseInRect(path, NULL, CGRectMake(100, 100, 200, 200));
    anim.path = path;
    CGPathRelease(path);

    // 動畫的執(zhí)行節(jié)奏
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
    anim.duration = 2.0f;
    anim.removedOnCompletion = NO;
    anim.fillMode = kCAFillModeForwards;
    anim.delegate = self;
    [self.redView.layer addAnimation:anim forKey:nil];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺ios動畫全貌。在這里你可以看...
    每天刷兩次牙閱讀 8,697評論 6 30
  • 概覽 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你...
    Yiart閱讀 3,968評論 3 34
  • 在iOS實(shí)際開發(fā)中常用的動畫無非是以下四種:UIView動畫,核心動畫,幀動畫,自定義轉(zhuǎn)場動畫。 1.UIView...
    請叫我周小帥閱讀 3,329評論 1 23
  • 在iOS中隨處都可以看到絢麗的動畫效果,實(shí)現(xiàn)這些動畫的過程并不復(fù)雜,今天將帶大家一窺iOS動畫全貌。在這里你可以看...
    F麥子閱讀 5,271評論 5 13
  • 1. 同理心:情商是可以通過練習(xí)得到提升的,練習(xí)時(shí)投入的智商越大情商越高。 2. 自我認(rèn)知:定期反省自己,每天找一...
    曲同寧閱讀 227評論 0 0

友情鏈接更多精彩內(nèi)容