我试图在我的UICollectionViewCell中设置我的标签动画。我想随机遍历数组并随机设置标签10次然后它停在我的数组中的随机字符串。
问题是,它通过我的数组(用简单的NSLog调试它)但是标签setText不会被用到我的循环的最后一个数字,然后设置标签。
这是我的代码:
-(void)animate{
long index;
for(detail* cells in [[self col] visibleCells]){
NSIndexPath *indexPath = [[self col] indexPathForCell:cells];
if ([array count] >= 3) {
index = 2 * indexPath.section + indexPath.row;
}else{
index = 1 * indexPath.section + indexPath.row;
}
for (int i = 0; i <= 10; i++) {
[[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
[NSThread sleepForTimeInterval:0.10];
NSLog(@"%i", i);
}
}
}
这是我自定义Cell类的returnRandomOptie
:
-(NSString *) returnRandomOptie {
NSUInteger randomIndex;
NSString *string;
if ([opties count] != 0) {
randomIndex = arc4random() % [opties count];
string = [NSString stringWithFormat:@"%@", [opties objectAtIndex:randomIndex]];
}
return string;
}
所以基本上我想在我的animate方法中使用for循环,总是在我的标签中设置文本。而现在它并没有这样做。就在最后一个循环中。
我做错了什么?
亲切的问候!
答案 0 :(得分:4)
您必须执行睡眠异步并更新主线程中的标签,请尝试以下方法:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i = 0; i <= 10; i++) {
dispatch_async(dispatch_get_main_queue(), ^{
[[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
});
[NSThread sleepForTimeInterval:0.10];
NSLog(@"%i", i);
}
});
答案 1 :(得分:0)
试试这个,
-(void)animate{
....
for (int i = 0; i <= 10; i++) {
dispatch_async(dispatch_get_main_queue(), ^{
[[cells detailLabel] setText: [[array objectAtIndex:index] returnRandomOptie]];
});
[NSThread sleepForTimeInterval:0.10];
NSLog(@"%i", i);
}
...
}