Kyl*_*law 1 objective-c ios xcode4.5
好吧我想要创建多个定时器,所有定时器都在不同的时间开始(25,50,1分钟,1分30秒...)但我不知道如何使它在达到0时停止并且当它达到零时,带上"玩家"到另一种观点.
继承人我的.h文件
@interface ViewController :UIViewController {
IBOutlet UILabel *seconds;
NSTimer *timer;
int MainInt;
}
@end
Run Code Online (Sandbox Code Playgroud)
继承人我的.m档案
@implementation ViewController
-(void)countDownDuration {
MainInt -= 1;
seconds.text = [NSString stringWithFormat:@"%i", MainInt];
}
-(IBAction)start:(id)sender {
MainInt = 25;
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(countDownDuration)
userInfo:nil
repeats:YES];
}
@end
Run Code Online (Sandbox Code Playgroud)
NSTimer不会自动执行此操作,但将它添加到countDownDuration方法是微不足道的.例如:
-(void)countDownDuration {
MainInt -= 1;
seconds.text = [NSString stringWithFormat:@"%i", MainInt];
if (MainInt <= 0) {
[timer invalidate];
[self bringThePlayerToAnotherView];
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您想要创建多个计时器.您可以将每个变量存储在不同的变量中,并为每个变量赋予不同的选择器.但是如果你看一下NSTimer的文档,回调方法实际上将timer对象作为选择器; 你忽略了它,但你不应该这样做.
同时,您可以将任何类型的对象存储为计时器的userInfo,这样就可以为每个计时器存储一个单独的当前倒计时值.
所以,你可以这样做:
-(void)countDownDuration:(NSTimer *)timer {
int countdown = [[timer userInfo] reduceCountdown];
seconds.text = [NSString stringWithFormat:@"%i", countdown];
if (countdown <= 0) {
[timer invalidate];
[self bringThePlayerToAnotherView];
}
}
-(IBAction)start:(id)sender {
id userInfo = [[MyCountdownClass alloc] initWithCountdown:25];
timer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(countDownDuration:)
userInfo:userInfo
repeats:YES];
}
Run Code Online (Sandbox Code Playgroud)
我已经留下了一些不成文的细节(比如MyCountdownClass-which 的定义必须包括方法initWithCountdown:和reduceCountdown做正确的事情),但它们都应该非常简单.(另外,大概你想要一个不仅存储倒计时值的userInfo,例如,如果每个计时器将玩家发送到不同的视图,你也必须在那里存储视图.)
PS,注意你现在需要@selector(countDownDuration:).ObjC的新人一直在搞这个问题.countDownDuration:并且countDownDuration是完全不相关的选择器.
PPS的完整定义MyCountdownClass必须是可见的countDownDuration:(除非你有相同的选择一些其他类).您可能需要显式转换的结果userInfo,以MyCountdownClass *使事情更清晰.
| 归档时间: |
|
| 查看次数: |
13511 次 |
| 最近记录: |