UIActivityIndicatorView 没有盯着看
UIActivityIndicatorView not staring
我正在尝试将 'UIActivityIndicatorView' 设置为我的 'UITableViewCell' 之一中的 accessoryView,这样一来,当用户触摸此单元格时,ActivityIndicator 就会开始动画。我在 'didSelectRowAtIndexPath' 方法中添加以下代码:
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView * activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
NSThread * newThread1 = [[NSThread alloc]initWithTarget:self selector:@selector(carregarNoticias) object:nil];
switch (indexPath.row) {
case 0:
cell.accessoryView = activity;
[activity startAnimating];
sleep(0.01);
[newThread1 start];
while (![newThread1 isFinished]) {
//waiting for thread
}
[activity stopAnimating];
[self.navigationController pushViewController:noticias animated:YES];
break;
我期待 'UIActivityIndicatorView' 在 newthread1 运行 时进行动画处理。但是,动画仅在 newThread1 完成时开始(因此我不再需要动画)。我添加了 0.01 秒作为睡眠时间,以便为动画开始提供时间。不过,这也没有解决。
有谁知道我的错误是什么?感谢您的帮助!
我真的不知道你想做什么来增加这样的延迟..试试下面的这一行,可能是你要找的..还有另一件事..请不要像[=12那样阻塞主线程=] 那,用户不会喜欢它..
cell.accessoryView = activity;
[activity startAnimating];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
// the system will wait until this
dispatch_async(dispatch_get_main_queue(), ^(void){
[newThread1 start];
});
// is finished, maybe you dont need the `[NSThread sleepForTimeInterval:3];`
// pick the one that suits your implementation..
[NSThread sleepForTimeInterval:3];
dispatch_async(dispatch_get_main_queue(), ^(void){
[activity stopAnimating];
[self.navigationController pushViewController:noticias animated:YES];
});
});
[NSThread sleepForTimeInterval:3]
像你拥有的那样休眠线程 sleep(0.01);
但在内部使用它
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ });
使其异步。并且不会阻塞主线程..
而 dispatch_async(dispatch_get_main_queue(), ^(void){
在主线程触发您的代码..
编码愉快,干杯! :)
我正在尝试将 'UIActivityIndicatorView' 设置为我的 'UITableViewCell' 之一中的 accessoryView,这样一来,当用户触摸此单元格时,ActivityIndicator 就会开始动画。我在 'didSelectRowAtIndexPath' 方法中添加以下代码:
UITableViewCell * cell = [tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView * activity = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
NSThread * newThread1 = [[NSThread alloc]initWithTarget:self selector:@selector(carregarNoticias) object:nil];
switch (indexPath.row) {
case 0:
cell.accessoryView = activity;
[activity startAnimating];
sleep(0.01);
[newThread1 start];
while (![newThread1 isFinished]) {
//waiting for thread
}
[activity stopAnimating];
[self.navigationController pushViewController:noticias animated:YES];
break;
我期待 'UIActivityIndicatorView' 在 newthread1 运行 时进行动画处理。但是,动画仅在 newThread1 完成时开始(因此我不再需要动画)。我添加了 0.01 秒作为睡眠时间,以便为动画开始提供时间。不过,这也没有解决。
有谁知道我的错误是什么?感谢您的帮助!
我真的不知道你想做什么来增加这样的延迟..试试下面的这一行,可能是你要找的..还有另一件事..请不要像[=12那样阻塞主线程=] 那,用户不会喜欢它..
cell.accessoryView = activity;
[activity startAnimating];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){
// the system will wait until this
dispatch_async(dispatch_get_main_queue(), ^(void){
[newThread1 start];
});
// is finished, maybe you dont need the `[NSThread sleepForTimeInterval:3];`
// pick the one that suits your implementation..
[NSThread sleepForTimeInterval:3];
dispatch_async(dispatch_get_main_queue(), ^(void){
[activity stopAnimating];
[self.navigationController pushViewController:noticias animated:YES];
});
});
[NSThread sleepForTimeInterval:3]
像你拥有的那样休眠线程 sleep(0.01);
但在内部使用它
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ });
使其异步。并且不会阻塞主线程..
而 dispatch_async(dispatch_get_main_queue(), ^(void){
在主线程触发您的代码..
编码愉快,干杯! :)