<p id="qitwt"></p>
      1. <object id="qitwt"><strong id="qitwt"></strong></object>
        <p id="qitwt"></p>
        <li id="qitwt"></li>
        <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
        <p id="qitwt"><label id="qitwt"></label></p>
      2. <acronym id="qitwt"></acronym>
        <p id="qitwt"></p>
        免費開源的iOS開發學習平臺

        核心動畫CoreAnimation:5-CAKeyframeAnimation關鍵幀動畫

        CAKeyframeAnimation關鍵幀動畫,可以在一個values數組中設置針對某個keyPath的多個變化值,從而設計出一個相對復雜的動畫播放效果,例如,我們可以設置一個CALayer對象在多個點之間來回移動,或者可以設置多個平移的值。

        CAKeyframeAnimation類

        CAKeyframeAnimation類與CABasicAnimation的區別是:CABasicAnimation只能從一個數值(fromValue)變到另一個數值(toValue),而CAKeyframeAnimation會使用一個values數組保存多個數值,從而可以實現keyPath指定屬性的復雜變化。在values中保存的每個元素都稱為一個keyframe,CABasicAnimation可看做是只有2個關鍵幀的CAKeyframeAnimation。

        @property(nullable, copy) NSArray *values;
        

        注意:保存在values數組中的對象為NSValue類型的對象

        另外,我們還可以設計layer的動畫運行軌跡path,這里需要用到貝塞爾路徑(UIBezierPath),還需要注意的是我們需要把UIBezierPath對象轉成CGPathRef類型的對象。

        @property(nullable) CGPathRef path;
        

        CAKeyframeAnimation關鍵幀動畫示例

        在下方的代碼中,創建了一個CAKeyframeAnimation關鍵幀動畫對象,能夠實現在3個水平平移值之間相互切換循環播放動畫。

        • 在控制器類中添加一個CALayer類的屬性,作為動畫播放的layer
        @interface ViewController ()
        @property (nonatomic, strong) CALayer *myLayer;
        @end
        
        • 通過懶加載的方式,設置自定義layer的屬性
        -(CALayer *)myLayer{
            if (_myLayer == nil) {
                _myLayer = [CALayer layer];
                _myLayer.frame = CGRectMake(140, 100, 100, 100);
                _myLayer.backgroundColor = [UIColor yellowColor].CGColor;
                _myLayer.borderColor = [UIColor redColor].CGColor;
                _myLayer.borderWidth = 4.0;
                _myLayer.cornerRadius = 2.0;
            }
            return _myLayer;
        }
        
        • 添加該自定義layer到控制器視圖的layer上
        - (void)viewDidLoad {
            [super viewDidLoad];
            [self.view.layer addSublayer:self.myLayer];
        }
        
        • 當點擊屏幕時,播放平移動畫。針對transform.translation.x這個keypath,我們設置了3個平移的數值,分別為0、100、0。由于我們設置了repeatCount為MAXFLOAT,所以這個動畫會一直播放。
        -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
            //1. 實例化CAKeyframeAnimation對象
            CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
            //2. 設置動畫屬性
            animation.keyPath = @"transform.translation.x";
            animation.values = @[@0,@100,@0];
            animation.duration = 2.0;
            animation.repeatCount = MAXFLOAT;
            //3. 添加動畫對象到一個CALayer類的對象上,播放動畫
            [self.myLayer addAnimation:animation forKey:nil];
        }
        

        示例代碼

        https://github.com/99ios/14.4.5


        青青草国产成人久久_jizzjizz日本护士高清_亚洲 另类 国产 另类_99久久免费精品色老
        <p id="qitwt"></p>
          1. <object id="qitwt"><strong id="qitwt"></strong></object>
            <p id="qitwt"></p>
            <li id="qitwt"></li>
            <p id="qitwt"><del id="qitwt"><xmp id="qitwt"></xmp></del></p>
            <p id="qitwt"><label id="qitwt"></label></p>
          2. <acronym id="qitwt"></acronym>
            <p id="qitwt"></p>