我正在尝试用NSTimer制作核心图的动画
- (void) animate
{
CGPoint *moved = [array objectAtIndex:0];
for (float i = 1.43; i<=2.91; i+=0.01)
{
moved.x = i;
moved.y = i;
if (timer != nil)
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(reloadPlotData) userInfo:nil repeats:NO];
}
}
-(void) reloadPlotData
{
[graph reloadData];
}但是没有动画。仅在循环端点处重新加载数据
我也尝试过NSThread sleepForTimeInterval:1,但也有同样的问题
我怎么才能修复它呢?
对不起,我的英语不好..:)
发布于 2011-05-20 08:25:51
我不明白您是如何使用moved的(CGPoint是一个结构,而不是一个对象)。不过,这并不是你要问的问题。
您每次都会通过该循环重新设置计时器,直到计时器有机会触发之前。如果您希望图表每秒更新一次,请在-animate中消除循环,创建一个重复计时器,在-reloadPlotData中递增计数器,并在到达最后一个值(例如,示例中的2.91 )时停止计时器。显然,您需要将计数器存储在实例变量或其他一些作用域中,这些作用域将在对-reloadPlotData的调用之间保持不变。
例如(未测试):
@接口
myPoint *moved; // custom class with x and y properties
NSTimer *timer;@实现
- (void) animate
{
moved = [array objectAtIndex:0];
float start = 1.43;
moved.x = start;
moved.y = start;
if (timer != nil)
[timer invalidate];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(reloadPlotData)
userInfo:nil
repeats:YES];
}
-(void) reloadPlotData
{
moved = [array objectAtIndex:0];
moved.x += 0.01f;
moved.y += 0.01f;
if ( moved.x > 2.91 ) {
[timer invalidate];
timer = nil;
}
else {
[graph reloadData];
}
}https://stackoverflow.com/questions/6060360
复制相似问题