问题
When first displaying a bar chart using Core Plot, I'd like the bars to grow upward until they reach their correct heights.
How would you create such an animation using this framework?
回答1:
This is what I did:
In my viewDidLoad controller's method I created the CPTXYGraph:
graph = [[CPTXYGraph alloc] initWithFrame:self.view.bounds];
I added animation to the empty graph:
CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform"];
Then in animationDidStop delegate's method I added the plot data and animation to the graph:
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.scale.y"]; [anim setDuration:2.0f]; anim.toValue = [NSNumber numberWithFloat:1.0f]; anim.fromValue = [NSNumber numberWithFloat:0.0f]; anim.removedOnCompletion = NO; anim.delegate = self; anim.fillMode = kCAFillModeForwards; gPlot.anchorPoint = CGPointMake(0.0, 0.0); [gPlot addAnimation:anim forKey:@"grow"]; [graph addPlot:gPlot ];// IMPORTANT here I added the plot data to the graph :) .
回答2:
Add animation for your CPTBarPlot as follows:
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform"];
[animation setDuration:1];
CATransform3D transform = CATransform3DMakeScale(1, 0.0001, 1);
// offsetY=[PlotDisplayAreaUnderXAxisHeight]-[PlotDisplayAreaHeight]/2
transform = CATransform3DConcat(transform, CATransform3DMakeTranslation(0, offsetY, 0));
animation.fromValue = [NSValue valueWithCATransform3D:transform];
animation.toValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];
[barPlot addAnimation:animation forKey:@"barGrowth"];
回答3:
Thanks Michele for your great answer.
I have uploaded an example from her answer to Github for those who would want to download the demo and start working right away!
https://github.com/mayuur/CoreplotAnimation
Enjoy Coding!!!
回答4:
This is very similar to: How to animate the pie charts developed using core-plot library?
回答5:
Add opacity animation like this...
CABasicAnimation *fadeInAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.duration = 1.0f;
fadeInAnimation.removedOnCompletion = NO;
fadeInAnimation.fillMode = kCAFillModeForwards;
fadeInAnimation.toValue = [NSNumber numberWithFloat:1.0];
[xSquaredPlot addAnimation:fadeInAnimation forKey:@"animateOpacity"];
来源:https://stackoverflow.com/questions/5552520/how-do-i-animate-the-appearance-of-a-bar-chart-in-core-plot