我发生了一件奇怪的事情,我不明白。 如果我运行该方法 [self setImage:[UIImage imageNamed:@“Loader20.png”]]例如。 它在线程选择器方法之外工作正常, 但它不会在选择器方法本身工作,它什么都不做。 这就是我的方式。
- (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进行了正确的命名测试,但图像仍未改变。
提前致谢。 布雷特
答案 0 :(得分:0)
大多数UIKit
都不是线程安全的,所以你必须将图像分配给主线程上的imageview(然而,加载仍然可以在后台线程中完成)。
答案 1 :(得分:0)
UIKit只是在主线程中工作。尝试将图像作为NSData
加载到线程中,然后将NSData
传递给主线程以用作UIImage
。