nstimers、runloops、メインスレッドに関するstackoverflowに関する投稿を何百万も読んだことがありますが、私が探しているのと同じ問題や答えはないようです。私の状況:
- いくつかの「読み込みが行われている」間、私はいくつかのものをアニメーション化しようとしています。アニメーションは、contentOffsetを使用して前後に移動するいくつかのスクロールビューで構成されています。このアニメーションはNSTimerを使用して行います。
- ポイント1の「ロード中」は、実際には単純なロードではなく、現在ユーザーに表示されていない他のUIViewでの描画です。
結論として、UIViewで同時に描画しながら、いくつかのスクロールビューをアニメーション化しようとしています。アニメーションがスムーズでないように競合することなく、これは可能ですか?私がactivityIndicatorViewを使用する場合、それは間違いなく可能です。スピニングホイールが途切れることはなく、常にスムーズに回転しています。runloopsを使おうとしましたが、理解できませんでした。これまでの私のコードのいくつかは次のとおりです。
-(void)startLoading
{
[self performSelectorInBackground:@selector(showSpinningCells)];
[self drawOnViews];
}
-(void)drawOnViews
{
//HERE A LOT OF VIEWS ARE BEING UPDATED AND CALLED SETNEEDSDISPLAY
}
-(void)spinCells
{
//HERE I USE PERFORMSELECTORONMAINTHREAD TO SET THE
//CONTENTOFFSET OF THE SCROLLVIEWS
}
-(void)showSpinningCells
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
spinLoop = [NSRunLoop currentRunLoop];
spinTimer = nil;
self.userInteractionEnabled = FALSE;
spinTimer = [[NSTimer scheduledTimerWithTimeInterval:0.2
target:self
selector:@selector(spinCells)
userInfo:nil
repeats:YES] retain];
[spinLoop run];
[pool release];
}
何かを試す前に、これが可能かどうか教えてください。可能であれば、どのようにしたらよいでしょうか。現在、回転は見られません。後で何もしなければ回転が見られますが、UIViewsで描画を呼び出すとすぐに、回転が完全に停止します。