首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSTimer实现核心情节动画

使用NSTimer实现核心情节动画
EN

Stack Overflow用户
提问于 2011-05-19 22:37:30
回答 1查看 1.2K关注 0票数 2

我正在尝试用NSTimer制作核心图的动画

代码语言:javascript
复制
- (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,但也有同样的问题

我怎么才能修复它呢?

对不起,我的英语不好..:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-20 08:25:51

我不明白您是如何使用moved的(CGPoint是一个结构,而不是一个对象)。不过,这并不是你要问的问题。

您每次都会通过该循环重新设置计时器,直到计时器有机会触发之前。如果您希望图表每秒更新一次,请在-animate中消除循环,创建一个重复计时器,在-reloadPlotData中递增计数器,并在到达最后一个值(例如,示例中的2.91 )时停止计时器。显然,您需要将计数器存储在实例变量或其他一些作用域中,这些作用域将在对-reloadPlotData的调用之间保持不变。

例如(未测试):

@接口

代码语言:javascript
复制
myPoint *moved; // custom class with x and y properties
NSTimer *timer;

@实现

代码语言:javascript
复制
- (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];
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6060360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档