UIActivityIndi​​catorView 没有盯着看

UIActivityIndicatorView not staring

我正在尝试将 'UIActivityIndicatorView' 设置为我的 'UITableViewCell' 之一中的 accessoryView,这样一来,当用户触摸此单元格时,ActivityIndi​​cator 就会开始动画。我在 '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){ 在主线程触发您的代码..

编码愉快,干杯! :)