2010-07-24 47 views
0

我想有一个NSTimer每1秒钟执行一次,并有另一个NSTimer在该定时器内执行,稍微小于1秒。如何在另一个嵌套NSTimer?

其实我不确定什么是最好的方法来做到这一点,但我想每秒出现一个随机图像,然后在第二秒后消失。

所以我需要某种形式的失速或者可以传递时间然后再执行隐藏按钮的东西。

如果我将按钮设置为TRUE,然后将其设置为FALSE,则此外观时间会很短,如何停止或进行第二次通过然后再次隐藏图像?

在此先感谢

回答

1

您可以尝试自己设置成显示,并在指定的时间间隔后隐藏物体的不断循环,直到你往复两个反向作用的方法中断它通过使用performSelector:withObject:afterDelay:方法:

//On initialization, make a first call to the hide method 
//to be executed after a delay 
-(void) viewDidload { 
    [myObject setHidden:NO]; 
    [self performSelector:@selector(hideObject) withObject:nil afterDelay:1.0]; 
} 

//Whenever the hide gets called, hide, then make a call to the show method 
//to be executed after a delay 
-(void) hideObject { 
    [myObject setHidden:YES]; 
    [self performSelector:@selector(showObject) withObject:nil afterDelay:1.0]; 
} 

//Whenever the show gets called, show, then make a call to the hide method 
//to be executed after a delay 
-(void) showObject { 
    [myObject setHidden:NO]; 
    [self performSelector:@selector(showObject) withObject:nil afterDelay:1.0]; 
} 

您可以通过在performSelector:withObject:afterDelay:呼叫周围添加一条if语句来检查一些结束条件来中断循环。

+0

嗨克里斯。延迟之后还有另一种办法吗?而不是myObject setHidden,因为myObject会每秒更改一次计时器。当我将myObject设置为合适的按钮时,按钮在隐藏和显示方面不能正常工作。我只想在大约1秒后执行一个声明。 – jarryd 2010-07-24 17:45:24

+0

我不确定你的意思。是@Peter Zich的答案你在找什么? – 2010-07-24 18:46:54

+0

不,它不是我想要做的。我基本上不想在该方法上执行任何操作1秒,然后运行我的hidden = YES代码。 – jarryd 2010-07-24 19:59:14

1

我会推荐使用NSTimer的initWithFireDate:interval:target:selector:userInfo:repeats:。这可以让你定时器触发定时器(如果你设置了repeatsYES),你可以指定一个fireDate(第一次定时器被触发)立即进行一个循环,稍后进行另一个循环。与performSelector相比,此方法的更好之处在于可以通过将invalidate发送给定时器来轻松终止,并且不会因任何方法中的任何阻止代码而被延迟。

相关问题