我有一个CALayer,我想在屏幕上制作动画。我创建了两个方法:一个滑动打开图层,一个滑动关闭。这些都可以通过为图层的转换属性指定属性来实现。
现在我想使用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;
}
}
答案 0 :(得分:0)
我想出来了。我的问题是动画动画对象动画,好像它修改了更改的属性(在这种情况下是变换),但实际上没有更改该值。我相信这与表示层和模型层有关。因此,当完成动画打开图层时,图层正确地定位在屏幕上,但其变换实际上并没有改变。所以为了解决这个问题,我使用(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
委托方法在动画完成后将变换设置为打开状态。