2012-07-12 47 views
2

我试图在核心绘图散点图(如线图)中缩放,以便缩放以查看。 CorePlot使用普通的CALayer来实现它的绘图。CABasicAnimation CorePlot缩放有效

我使用的Core Animation如下来实现这一目标:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"affineTransform"]; 
animation.duration = 10; 
animation.removedOnCompletion = YES; 
animation.fillMode = kCAFillModeForwards; 
CGAffineTransform start = CGAffineTransformMakeScale(1, 0.1); 
CGAffineTransform end = CGAffineTransformMakeScale(1, 1); 
animation.fromValue = [NSValue valueWithCGAffineTransform:start]; 
animation.toValue = [NSValue valueWithCGAffineTransform:end]; 

[plot addAnimation:animation forKey:@"animation"]; 

问题是,这似乎并没有工作。这是我第一次使用核心动画,所以我想我只是做错了什么?

编辑 好吧,所以我发现我使用错误的keypath的问题。

我能得到现在的动画,但它看起来奇怪:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"]; 
... 
animation.fromValue = [NSNumber numberWithFloat:0.1]; 
animation.toValue = [NSNumber numberWithFloat:1]; 

我想要做的是有动画“向上扩展”所以那种绵延的地方。现在它从中心生长出来,这不是我想要的。任何想法如何实现?

+1

当你运行它会发生什么? – Dustin 2012-07-12 14:49:07

+0

什么都没有发生。好像没有动画。我刚刚注意到CALayer上的'affineTransform'成员是一种方法而不是属性,我猜关键路径必须是属性? – Imran 2012-07-12 14:52:02

回答

0

该变换是相对于图层的anchorPoint。您可以通过将锚点设置为(0.5,1,0)将其更改为底部。请注意,图层也会相对于锚点绘制,因此当您更改它时,它可能会在屏幕上改变它的位置。要将它放置在应该放置的位置,可以在更改锚点后设置框架,或者将位置设置为底部(应该从底部缩放)。

+0

这种作品,但你说它确实改变了图纸的位置。 “你的意思是”将位置设置在底部(它应该从哪里缩放)“。 – Imran 2012-07-12 21:30:37

+0

位置通常位于中心,但是当您更改更改的锚点时。如果您的定位点是(0.5,1.0),那么这是您视图中较低的中心点。如果您知道下方中心点的位置,那么您可以设置位置属性。否则,您可以设置框架,并根据您的锚点计算适当的位置 – 2012-07-13 05:51:02