The "sampleIndex" KeyPath Of CABasicAnimation
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的幀動畫類似。