任何人都可以查看XYPieChart文件,看看是否有办法手动触发动画。我已经尝试reloadData
,但是没有尝试。
您可以从github获取演示并添加一个按钮并尝试各种方法来关闭动画。正如我所说[self.pieChartLeft reloadData]
不会这样做。
答案 0 :(得分:2)
据我所知,你正在寻找填满图表的动画。
要实现这一目标,首先必须删除所有元素,然后{strong>继续reloadData
,然后等待动画完成,然后再次添加所有元素并reloadData
试。
因此,要在演示中显示它,我刚刚将clearSlices
文件中的ViewController.m
方法修改为:
- (IBAction)clearSlices {
[_slices removeAllObjects];
[self.pieChartLeft reloadData];
[self.pieChartRight reloadData];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
for (int i = 0; i < 4; i++)
[_slices addObject:@(rand()%60+20)];
[self updateSlices];
});
}
延迟当然必须等于动画长度。试一试,看看那是不是你想要的,否则发表评论,我会找到解决方法。
我还认为XYPieChart有点乱,可以改进 - 应该有手动动画图表的方法(就像你想做的那样)。也许我会做一个分叉:)
修改强>
如果您不想通过添加实例布尔变量来完全删除数据,那么您可以调整一下您的代码,让我们说BOOL _showAnimationOnly
或者您喜欢的任何内容。然后在委托方法pieChart:valueForSliceAtIndex:
中,如果此布尔值为YES,则只提供0。你必须控制那个变量,在不同的地方设置它(取决于你的代码)。像这样:
- (IBAction)animateSlices {
_showAnimationOnly = YES;
[self.pieChartLeft reloadData];
[self.pieChartRight reloadData];
double delayInSeconds = 1.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
_showAnimationOnly = NO;
[self.pieChartLeft reloadData];
[self.pieChartRight reloadData];
});
}