Iphone MultiThreading - 如何从后台线程更新界面(mainthread)中的事件?

时间:2010-01-13 06:27:46

标签: iphone nsthread

1.我的mainView是一个UIScrollView。我必须将9张图像作为图片加载到其上。

2.我正在调用该函数作为另一个线程来获取9images并将其加载到接口(mainthread)中。通过这样做,界面保持响应。

3.但是即使在加载图像时它们也没有出现在UIScrollView中,直到整个线程完成为止。但是,如果我在界面上执行某些操作,我可以看到每个都被加载和显示。

  1. 表示我必须在每个图像加载到后台线程后从后台线程更新接口(mainthread)。
  2. 我该怎么办?我已经给出了用于将图像加载到UIScrollView的代码,我使用不同的线程调用它。

    - (void)setUpDisplay:(NSArray *)array 
    {
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    
    myScrollView.userInteractionEnabled = YES;
    myScrollView.multipleTouchEnabled = YES;
    
    int x=0,y=0;
    CGRect frame;
    for (i = 0; i < 3; i++)
    {
        if(j == 3)
        {
            x=x+256;
            y = y-768;
        }
        for (j = 0; j < 3; j++) {
            imageView = [[UIImageView alloc] initWithImage:[self getCachedImage:[NSString stringWithFormat:@"url to fetch images"]]];
            frame = [imageView frame];
            frame.origin.x = x;
            frame.origin.y = y;
            [imageView setFrame:frame];
            imageView.userInteractionEnabled = YES;
            imageView.multipleTouchEnabled = YES;
            [myScrollView addSubview:imageView];
            y = y+256;
    
            [imageView release];
            imageView=nil;
        }
    }
    
    [pool release];
    }
    

2 个答案:

答案 0 :(得分:2)

这种NSObject方法通常很有帮助:

[someObject performSelectorOnMainThread:@selector(updateUI:) withObject:anotherObject waitUntilDone:YES /* or NO */];

答案 1 :(得分:0)

您可能想在每个图像加载完成后尝试在主线程上调用[myScrollView setNeedsDisplay]。