Iphone CAAnimation和CALayer变换的问题
我有一个CALayer,我想在屏幕上设置动画。我创建了两种方法:一种是滑动打开图层,另一种是滑动关闭图层。这两种方法都是通过将特性指定给图层的变换特性来实现的 现在我想使用一个CAKeyFrameAnimation来滑动打开该层。我这样做是为了让图层滑开,但现在我不能用我的老方法滑合图层。我想弄明白这是为什么。任何帮助都会很好 my CALayer的代码:Iphone CAAnimation和CALayer变换的问题,iphone,uikit,core-animation,calayer,caanimation,Iphone,Uikit,Core Animation,Calayer,Caanimation,我有一个CALayer,我想在屏幕上设置动画。我创建了两种方法:一种是滑动打开图层,另一种是滑动关闭图层。这两种方法都是通过将特性指定给图层的变换特性来实现的 现在我想使用一个CAKeyFrameAnimation来滑动打开该层。我这样做是为了让图层滑开,但现在我不能用我的老方法滑合图层。我想弄明白这是为什么。任何帮助都会很好 my CALayer的代码: - (id)init { if( self = [super init] ) { bIsOpen = NO; clo
- (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;
}
}
我明白了。我的问题是,动画将对象设置为动画,就好像它修改了已更改的属性(在本例中为变换),但值实际上没有更改。我相信这与表示层和模型层有关。因此,当为打开层制作动画时,层在屏幕上的位置正确,但其变换实际上没有改变。为了解决这个问题,我使用了
(void)animationDidStop:(CAAnimation*)anim finished:(BOOL)flag
委托方法在动画完成后将变换设置为打开状态