2

アプリの冒頭で UIActivityIndi​​catorView を開始しようとしましたが、アニメーションしません!

私のルートView Controllerのコード:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIActivityIndicatorView *v = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];

    [self.view addSubview:v];
    [v startAnimating];
}

回転しません。viewWillAppear/を試しviewDidAppearましたが、良くありません。

を実行するperformSelector:withObject:afterDelay:と、4 秒または 5 秒の遅延に達したときに動作するようになりました... UIKit で初期化されていないものがあるように。

誰にもアイデアがありますか?

更新: 好きなだけ待つことができます -> 回転を開始しません (したがって、MainThread に時間がかかったり、この回転をブロックしたりすることはありません)。実際、AppDelegatedidFinishLaunchingWithOptionsメソッドからほとんどすべてを削除しました。RestKit の初期化や PushNotification の登録はもう必要ありません。ViewController 初期化のみ。そして、それらの ViewController は何もしません。

しかし、私にできることは次のとおりです。何もしない (IBAction も IBOutlet も何もしない) ダミーのボタンをインターフェイスに追加し、iPhone でそれをタッチするだけです。ハイライトされてから通常になります。しかし、タッチするとすぐに (画面の表面を終了する前であっても)、糸車が回転し始めます!

ここで何が起きてるの ??

4

3 に答える 3

0

このコードを使用しているのは、アプリが読み込まれるときに時間がかかるためだと思います。メイン スレッドでこの処理を実行している場合 (別の方法で指定しない限りそうあるべきです)、すべてのアニメーションのフリーズを含め、そのタスクの実行中にユーザー インターフェイスが応答しなくなります。タスクを別のスレッドにプッシュするには、Apple の Grand Central Dispatch (GCD) を使用する必要があります。これを行うには、次のようなものを使用します。

dispatch_queue_t myLongTaskQueue = dispatch_queue_create("AnyIdentifyingText", NULL);
dispatch_async(myLongTaskQueue, ^{

     //perform the long task

});

次に、長いタスクのどこかで UI を更新する必要がある場合は、次を使用してメイン スレッドでこれを行うようにしてください。

dispatch_async(dispatch_get_main_queue(), ^{

    //perform UI update

});
于 2012-07-10T17:46:07.497 に答える
0

コードを試しただけで、すぐにアニメーション化されます。アプリが開くとすぐに何かを同期的にロードしていますか? それは遅れを引き起こす可能性があります。

于 2012-07-10T16:45:47.483 に答える
0

それを見つけた!この問題を追跡してから 1.5 日後...

NavigationController に埋め込まれた私の MainViewController は、その にアクティビティ インジケーターを表示していviewDidLoadます。

同じように、viewDidLoadスプラッシュ画面をNavigationControllerにプッシュしたところ、何らかの形でビューが台無しになりました。

SplashViewControllerdoFlipメソッドで使用していました (約 2 秒後に自動的に呼び出されます):

[UIView transitionWithView:navController.view
                  duration:0.75
                   options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionTransitionFlipFromLeft
                animations:^{ [nc popViewControllerAnimated:NO]; }
                completion:nil];

そして今使用

[UIView transitionFromView:splashVC.view
                    toView:mainVC.view
                  duration:0.75 
                   options:UIViewAnimationOptionCurveEaseInOut|UIViewAnimationOptionTransitionFlipFromLeft
                completion:nil];

[navController popViewControllerAnimated:NO]; 

「具体的すぎる」と申し訳ありませんが、皆さんの助けに感謝します。

于 2012-07-11T13:07:42.607 に答える