【发布时间】:2015-05-18 05:21:38
【问题描述】:
我正在尝试创建一个标签(或任何 UI 元素),它从一个数字开始并向上计数,同时不会减慢所有其他进程。
我不完全确定如何使用多线程/GCD/NSTimer 来使其与 iOS 一起工作是最好的。有什么建议?这是我目前拥有的代码:
-(void)countup:(UIBarButtonItem *)label from:(int)startNumber to:(int)endNumber{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// double timeInterval = 5; //5 seconds from start to stop
// int diff = endNumber - startNumber;
// double t = timeInterval/diff;
[NSThread sleepForTimeInterval: 0.01];
if(diff==0){
return;
}
if(diff>0){
label.title= [NSString stringWithFormat:@"%d", startNumber + 1];
[self countup:label from:startNumber+1 to:endNumber];
}
if(diff<0){
label.title = [NSString stringWithFormat:@"%d", startNumber - 1];
[self countup:label from:startNumber-1 to:endNumber];
}
});
}
不幸的是,这只是将我从我拥有的第一个号码带入,等待一段时间,然后将我带到我拥有的最后一个号码。
I've also tried the following with little luck:
-(void)countup:(UIBarButtonItem *)label from:(int)startNumber to:(int)endNumber{
// double timeInterval = 5; //5 seconds from start to stop
int diff = endNumber - startNumber;
// double t = timeInterval/diff;
if(diff==0){
return;
}
if(diff>0){
label.title= [NSString stringWithFormat:@"%d", startNumber + 1];
[self countup:label from:startNumber+1 to:endNumber];
[NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(callCountUp:)
userInfo:[NSDictionary dictionaryWithObjectsAndKeys:label,
@"value1", startNumber, @"value2", endNumber, @"value3",nil]
repeats:YES];
}
if(diff<0){
label.title = [NSString stringWithFormat:@"%d", startNumber - 1];
[self countup:label from:startNumber-1 to:endNumber];
}
}
- (void)callCountUp:(NSTimer *)theTimer {
UIBarButtonItem *value1 = [[theTimer userInfo] objectForKey:@"value1"];
int value2 = (int)[[theTimer userInfo] objectForKey:@"value2"];
int value3 = (int)[[theTimer userInfo] objectForKey:@"value3"];
[self countup: value1 from:value2 to:value3];
}
【问题讨论】:
标签: ios multithreading count grand-central-dispatch nstimer