2010-04-08 121 views
3

我想实现一个uiview绘制的图形。有3个UIViews动画左/右滑动。问题是,我无法取消UIView动画。所以我用CALayer替换了UIViews。现在,问题是CALayer是否适合这个?使用这样的CALayer是否正常?当我操作框架属性时,CALayer为何如此缓慢。使用UIView或CALayer绘图和动画?

CGRect frame = curve.frame; 
frame.origin.x -= diffX; 
[curve setFrame:frame]; 

是否有替代?

P.S.我是德国人。对错误抱歉。


我用CATransaction得到了动画,但现在我要用CABasicAnimation动画一个x动画。这是没有问题的,期望图层的位置返回到前一个x。

CABasicAnimation *theAnimation; 
theAnimation = [CABasicAnimation animationWithKeyPath:@"position"]; 
theAnimation.delegate = self; 
theAnimation.duration = 1.0; 
theAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 
CGPoint position = [[curves objectAtIndex:i]position]; 
position.x = [[curves objectAtIndex:i]position].x - diffX; 
[theAnimation setToValue:[NSValue valueWithCGPoint:position]]; 
[[curves objectAtIndex:i] addAnimation:theAnimation forKey:[NSString stringWithFormat: @"translate.x.%d", index]]; 

位置改变的位置(例如XSTART = 100,XEND = 200),但是,当在动画结束层返回到起始X(例如,x = 100)。 这是正常的吗?我该如何解决这个问题,终点不再改变? 我试图改变removeOnComplete属性,但没有效果。

希望得到帮助。

马库斯

回答

1

不知道你的“慢”的意思,但设置的CALayer的框架以这种方式使用“隐含的动画”。也就是说,它将动画化从旧框架到新框架的过渡。您可以关闭这个功能:

[CATransaction begin]; 
[CATransaction setValue: (id) kCFBooleanTrue forKey: kCATransactionDisableActions]; 
[curve setFrame:frame]; 
[CATransaction commit]; 

然而,这通常被认为是一个优势的CALayer。你的方式只想在这里使用UIViews,默认情况下,这不会像这样动画化转换。

0

不是在动画中设置目标位置,只需设置要移动的物体的位置属性即可。

当您添加动画:theAnimation时,您将设置您指定的keyPath属性的任何更改的“视觉样式”。

当您更改动画所附的对象的位置时,比如说从(0,0)到(500,500),CoreAnimation会为您更改动画效果。动画对象不需要开始和结束位置,因为底层对象具有它们。