The "sampleIndex" KeyPath Of CABasicAnimation

江楓夜雨發表於2016-12-18

AnimationWithKeyPath 是例項化 CABasicAnimation的方法,其中iOS內部已經實現了多種多樣的keypath。這裡記錄一下一個不常見的keypath — “sampleIndex”。

該動畫能把一個圖片從頭開始播放。如下面這樣一個圖片:
這裡寫圖片描述

我們設定好一個layer。其中 MCSpriteLayer是繼承與CALayer的一個開源類。

CGImageRef imgRef = spriteImage.CGImage;//spriteImage為目標圖片

CGSize fixedSize = CGSizeMake(spriteImage.size.height * 2.0, spriteImage.size.height * 2.0);

self.sprite = [MCSpriteLayer layerWithImage:imgRef sampleSize:fixedSize];

[self.sprite setFrame:CGRectMake((self.bounds.size.width - fixedSize.width / 2.0f) / 2.0f, (self.bounds.size.height - fixedSize.height / 2.0f) / 2.0f, fixedSize.width / 2.0f, fixedSize.height / 2.0f)];

建立動畫

    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"sampleIndex"];
    anim.fromValue = @(1); // initial frame
    anim.toValue = @(20); // last frame + 1
    anim.duration = 0.6;
    anim.repeatCount = 1;
    anim.autoreverses = NO;
    anim.delegate = self;

    [anim setValue:self.sprite forKey:@"parentLayer"];
    [self.sprite addAnimation:anim forKey:@"layerAnimateName"];

動畫結束:

- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {

}

最終效果就和UIImageView的幀動畫類似。