0

UITableViewsを使用し、サーバーからデータをフェッチするアプリがあります。UIActivityIndi​​catorViewを親UITableViewに配置しようとしているので、子U​​ITableViewの読み込み中に回転します。UIActivityIndi​​catorViewはすべてInterfaceBuilderなどを介して接続されています。

-(void)spinTheSpinner {
    NSLog(@"Spin The Spinner");
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    [spinner startAnimating];
    [NSThread sleepForTimeInterval:9];
    [self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:NO];
    [pool release]; 
}

-(void)doneSpinning {
    NSLog(@"done spinning");
    [spinner stopAnimating];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];

    NSMutableString *tempText = [[NSMutableString alloc] initWithString:[categoryNumber objectAtIndex:indexPath.row]];
    Threads *viewController = [[Threads alloc] initWithNibName:@"newTable" bundle:nil tagval:tempText SessionID:PHPSESSID];
    [self.navigationController pushViewController:viewController animated:YES];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    [viewController release];                   
}

したがって、子UITableViewを画面にプッシュすると、UIActivityIndi​​catorView(スピナー)は親UITableViewのそこに配置されます。子UITableViewに移動し、すぐに親ビューに戻ると、回転する動作でUIActivitIndicatorViewをキャッチできます。NSLogは正しい時刻に表示されます。親UITableViewのセルを最初にタップすると、「SpinTheSpinner」がログに表示されます。9秒後、ログに「回転が完了」しますが、時間内に親UITableViewに戻らない限り、スピナーは回転しません。

これが正しく機能しない理由のアイデア?

4

2 に答える 2

4

おそらく、sleepForTimeIntervalがアニメーションをブロックしています。

sleepForTimeIntervalを削除して、performSelectorOnMainThreadをへの呼び出しに置き換えてみてくださいperformSelector:withObject:afterDelay:

于 2010-03-06T18:42:49.567 に答える
0

UIにスレッドの外に表示させます。

[NSObject dispatchUI:^{
     [spinner startAnimating];
}];
于 2014-01-10T19:52:05.417 に答える