Iphone 使用UIView或CALayer绘制和设置动画?

Iphone 使用UIView或CALayer绘制和设置动画?,iphone,animation,uiview,drawing,calayer,Iphone,Animation,Uiview,Drawing,Calayer,我正在尝试实现uiview绘制的图形。有3个UI视图可以设置左/右幻灯片的动画。问题是,我无法取消UIView动画。所以我用CALayer替换了UIView。现在的问题是CALayer是否适用于此?像这样在卷帘上画画正常吗?为什么当我操作框架属性时,CALayer的速度如此之慢 CGRect frame = curve.frame; frame.origin.x -= diffX; [curve setFrame:frame]; 有备用的吗 另外,我是个德国人。对不起,我犯了错误 我用CAT

我正在尝试实现uiview绘制的图形。有3个UI视图可以设置左/右幻灯片的动画。问题是,我无法取消UIView动画。所以我用CALayer替换了UIView。现在的问题是CALayer是否适用于此?像这样在卷帘上画画正常吗?为什么当我操作框架属性时,CALayer的速度如此之慢

CGRect frame = curve.frame;
frame.origin.x -= diffX;
[curve setFrame:frame];
有备用的吗

另外,我是个德国人。对不起,我犯了错误


我用CATTransaction获得了动画,但现在我将用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属性,但没有效果

希望得到帮助


Markus不确定“慢”是什么意思,但以这种方式设置CALayer的帧会使用“隐式动画”。也就是说,它将为从旧帧到新帧的过渡设置动画。您可以关闭此选项:

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

然而,这通常被认为是CALayer的优势。您可能只想在此处使用UIView,默认情况下,UIView不会为这样的过渡设置动画。

只需设置要移动的对象的“位置”属性,而不是在动画中设置目标位置

添加animation:theAnimation时,您正在设置对指定的keyPath属性所做任何更改的“视觉样式”

当您更改动画附着到的对象的位置时,例如从(0,0)更改为(500500),CoreAnimation将为您设置更改的动画。theAnimation对象不需要开始和结束位置,因为基础对象有它们