キーフレームをアニメーション化するときに、明らかなことを見逃しているようです。MoveMe
ドキュメントで参照されているApple の を含む多くのコード サンプルを見てきましたが、CAKeyframeAnimation
私が見ているものの原因となる不一致は見つかりません。
を作成しCGMutablePathRef
、次にを作成しCAKeyframeAnimation
て、パスに沿って画像ビューをアニメーション化するように設定します。アニメーション グループが作成されるので、完了したらビューを削除できます。
それでも、私のアニメーションは表示されません。デバイスを回転させるまで。ビューの再レイアウトにより、アニメーションがキックスタートするようです。私は明らかな like[theImageView setNeedsDisplay]
または evenを試しsetNeedsLayout
、コンテナビューでも試しました。それでも、必要なときにそれを機能させることはできません。デバイスを回転させたときにのみ表示されます。
以下で-cgPathFromArray:
は、NSArray
に変換される内部オペコードの を受け取りますCGPathRef
。デバイスを回転させると、プログラムされたパスに沿ってアニメーションが表示されるため、正しいことが確認されました。
- (void) animateImage: (NSString*) imageName
onPath: (NSArray*) path
withDuration: (NSString*) duration
{
if (self.sceneView)
{
CGMutablePathRef animationPath = [self cgPathFromArray: path];
if (animationPath)
{
UIImage* image = [self findImage: imageName];
if (image)
{
UIImageView* imageView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, image.size.width, image.size.height)];
if (imageView)
{
CAKeyframeAnimation* keyFrameAnimation = [CAKeyframeAnimation animationWithKeyPath: @"position"];
imageView.image = image;
[self.sceneView addSubview: imageView];
keyFrameAnimation.removedOnCompletion = YES;
keyFrameAnimation.fillMode = kCAFillModeForwards;
keyFrameAnimation.duration = duration.floatValue;
keyFrameAnimation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
keyFrameAnimation.repeatCount = 0;
keyFrameAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[keyFrameAnimation setPath: animationPath];
//group animation with termination block to cleanup
CAAnimationGroup* group = [CAAnimationGroup animation];
group.duration = keyFrameAnimation.duration;
group.removedOnCompletion = YES;
group.fillMode = kCAFillModeForwards;
group.animations = @[keyFrameAnimation];
CorpsAnimationCompletionBlock theBlock = ^void(void)
{
[imageView removeFromSuperview];
};
[group setValue: theBlock
forKey: kCorpsAnimationCompletionBlock];
group.delegate = self;
[imageView.layer addAnimation: group
forKey: nil];
}
}
}
}
}
誰でもこれを手伝うことができますか?