OC,oc語言

來源:互聯網
上載者:User

OC,oc語言
概述

  • 簡介

    • CAKeyframeAnimation又稱主要畫面格動畫
    • CAKeyframeAnimation是抽象類別CAPropertyAnimation的子類,可以直接使用
    • 通過values與path兩個屬性指定動畫屬性
  • 注意事項

    • 若指定了path屬性,則values屬性將被忽略
    • CABasicAnimation相當於只有兩個主要畫面格的CAKeyframeAnimation
主要畫面格動畫的常用屬性
  • values(NSArray *)

    • 存放主要畫面格的多個值
    • 類似於CABasicAnimation的fromValue與toValue值
  • path(CGPathRef)

    • 動畫的執行路徑
    • 可以通過繪圖的方式繪製路徑
  • keyTimes(NSArray *)

    • 每個主要畫面格的執行時間
    • 類型為NSNumber類型
    • 若不指定,則所有的主要畫面格平分動畫的duration時間長度
  • timingFunctions(NSArray *)

    • 速度控制函數數組
  • calculationMode(NSString *)

    • 指定主要畫面格的動畫屬性
    • 若指定該值,則keyTimes與timingFunctions屬性值將被忽略
    • 預設為:kCAAnimationLinear
  • rotationMode(NSString *)

    • 指定旋轉模式,預設為nil
樣本
  • 實現思路

    • 通過監聽執行動畫的UI控制項的觸摸事件來繪製貝瑟爾曲線
    • 建立主要畫面格動畫,指定執行動畫的keyPath屬性
    • 將繪製的貝瑟爾曲線作為動畫的執行路徑
    • 將動畫添加到指定的圖層上
  • 實現步驟(自訂UIView的子類)

    • 使用成員屬性儲存貝瑟爾路徑
    @property (nonatomic, strong) UIBezierPath *path;
    • 監聽觸摸事件的狀態,繪製貝瑟爾曲線

      • 開始
      //確定起點- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{//擷取當前觸摸點UITouch *touch = [touches anyObject];CGPoint curretnPoint = [touch locationInView:self];//建立路徑UIBezierPath *path = [UIBezierPath bezierPath];[path moveToPoint:curretnPoint];//儲存路徑self.path = path;}
      • 移動
      //添加線條- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{//擷取當前觸摸點UITouch *touch = [touches anyObject];CGPoint currentPoint = [touch locationInView:self];//添加線條[self.path addLineToPoint:currentPoint];//重繪,將曲線顯示到圖層上[self setNeedsDisplay];}
      • 結束(建立動畫)
      - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{//建立動畫CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];//指定執行動畫的屬性,animation.keyPath = @"position";//設定動畫的執行路徑animation.path = self.path.CGPath;//設定動畫的執行時間animation.duration = 1;//設定動畫的重複次數animation.repeatCount = MAXFLOAT;//將動畫添加到對應的圖層上[[[self.subviews firstObject] layer] addAnimation:animation forKey:nil];}
    • 將路徑顯示到圖層上

    //繪製路徑- (void)drawRect:(CGRect)rect{[self.path stroke];}

     

  

相關文章

聯繫我們

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