2012-01-30 5 views
0

私は奇妙なことが起こっているのですが、わかりません。 [self setImage:[UIImage imageNamed:@ "Loader20.png"]]たとえば、メソッドを実行すると スレッドセレクタメソッドの外側では、 でも問題なく動作しますが、セレクタメソッド自体では機能しません。何もしません。 ここに私がそれを行う方法です。[NSThread detachNewThreadSelector ...]を呼び出すと、UIImageView setImageが機能しなくなる

- (id)init { 
self = [super init]; 
if (self) { 

    //[self setImage:[UIImage imageNamed:@"Loader20.png"]]; 
    [NSThread detachNewThreadSelector:@selector(showLoadingImage) toTarget:self withObject:nil]; 

    } 
     return self; 
    } 


-(void)showLoadingImage{ 

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
int i = 0; 
int imageIncrement= 1; 
bool run = true; 
while (run){ 
    [NSThread sleepForTimeInterval:1]; 

    if(imageIncrement == 48){ 
     imageIncrement=1; 
     i++; 
    }else{ 
     imageIncrement++; 
    } 
    NSString *imageString = [NSString stringWithFormat:@"%@%d%@", @"Loader", imageIncrement, @".png"]; 
    NSLog(imageString); 

    [self setImage:[UIImage imageNamed:imageString]]; 
    if (i == 2){ 
     run = false; 
     [NSThread exit]; 
    } 

} 
[pool release]; 

} 

は、誰もが私にいくつかの方向性を与えることができ、私は私が正しくのNSLogでのテストが、静止画のdoesntの変更命名さをループにしたいすべての画像を確認しました。

ありがとうございます。 ブレット

答えて

0

ほとんどの場合、UIKitはスレッドセーフではないため、イメージをメインスレッドのイメージビューに割り当てる必要があります(ただし、バックグラウンドスレッドでも実行できます)。

0

UIKitはメインスレッドで動作します。スレッド内にNSDataとしてイメージをロードしてから、NSDataをメインスレッドに渡してUIImageとして使用してください。

関連する問題