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的帧动画类似。