如何停止重复计时器?

时间:2012-07-27 12:35:45

标签: objective-c

在iOS App开发方面,我是初学者。我想从左到右移动标签,直到它达到屏幕宽度的一半 - 即标签应移动240px(标签像字幕一样从左向右移动)。

我使用过NSTimer,我想在标签达到视图宽度的一半时停止计时器。

我使用了以下代码,但它将标签移出视图:

- (void)viewDidLoad {
    [super viewDidLoad];
    timer = [[NSTimer scheduledTimerWithTimeInterval:0.09 target:self selector:@selector(time:) userInfo:nil repeats:YES] retain];
}

- (void)time:(NSTimer *)theTimer {
    label.center = CGPointMake(label.center.x+3.5, label.center.y);

    NSLog(@"point:%@", label);

    if (label.center.x < - (label.bounds.size.width/2)) {
        label.center = CGPointMake(320+(label.bounds.size.width/2), label.center.y);
    }
}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

如果要停止重复计时器,可以使用

if (/*You label is in position*/)
    [myTimer invalidate];

但这不是在iOS中做动画的常规方法,请尝试这样做:

CGRect endFrame = /*The frame of your label in end position*/
[UIView animateWithDuration:0.5 animations:^{ myLabel.frame = endFrame;}];

答案 1 :(得分:1)

要停止计时器,请执行[timer invalidate]

你不能“暂停”一个计时器,所以一旦你这样做,你需要打电话给另一个计时器。

答案 2 :(得分:1)

使计时器无效的正确方法是

[myTimer invalidate];
myTimer = nil;