画面全体でアニメーション化したい CALayer があります。2 つの方法を作成しました。1 つはスライドでレイヤーを開き、もう 1 つはスライドで閉じます。これらは両方とも、レイヤーの変換プロパティにプロパティを割り当てることによって機能します。
ここで、CAKeyFrameAnimation を使用して、レイヤーをスライドして開きたいと思います。これでレイヤーがスライドして開くようになりましたが、古い方法を使用してレイヤーを閉じることができなくなりました。これがなぜなのかを理解しようとしています。どんな助けでも素晴らしいでしょう。
私のCALayerのコード:
- (id)init
{
if( self = [super init] )
{
bIsOpen = NO;
closeTransform = self.transform;
openTransform = CATransform3DMakeTranslation(-235.0, 0.0, 0.0);
}
return self;
}
- (void)closeMenu
{
if( bIsOpen )
{
self.transform = closeTransform;
bIsOpen = !bIsOpen;
}
}
- (void)openMenu
{
if( !bIsOpen )
{
CAKeyframeAnimation *closeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
closeAnimation.duration = 1.0;
closeAnimation.removedOnCompletion = NO;
closeAnimation.fillMode = kCAFillModeForwards;
closeAnimation.values = [NSArray arrayWithObjects:[NSValue valueWithCATransform3D:closeTransform],[NSValue valueWithCATransform3D:openTransform],nil];
closeAnimation.timingFunctions = [NSArray arrayWithObject:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
[self addAnimation:closeAnimation forKey:@"transform"];
bIsOpen = !bIsOpen;
}
}