当循环仍在iPhone SDK上运行时,如何显示图像?

当循环仍在iPhone SDK上运行时,如何显示图像?,iphone,objective-c,xcode,image,loops,Iphone,Objective C,Xcode,Image,Loops,我基本上是在JSON上获取图像,然后将其显示在屏幕上。在我当前的代码中,它工作正常,只是在我的while循环之后显示图像 我想要的是每次循环迭代时显示图像。如果可能的话,也可以像苹果的trailes.app一样显示淡出的图像 这是我目前的代码: - (void)getNowShowingList2 { self.navigationItem.rightBarButtonItem = nil; UIActivityIndicatorView *activityIndicator

我基本上是在JSON上获取图像,然后将其显示在屏幕上。在我当前的代码中,它工作正常,只是在我的
while
循环之后显示图像

我想要的是每次循环迭代时显示图像。如果可能的话,也可以像苹果的trailes.app一样显示淡出的图像

这是我目前的代码:

- (void)getNowShowingList2
{
    self.navigationItem.rightBarButtonItem = nil;

    UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)];
    activityIndicator.hidesWhenStopped = YES;
    UIBarButtonItem * barButton = [[UIBarButtonItem alloc] initWithCustomView:activityIndicator];
    [self navigationItem].rightBarButtonItem = barButton;
    [activityIndicator startAnimating];

    NSString *str = HOMEVIEW_URL;

    NSURL *url = [NSURL URLWithString:str];
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString *jsonStr = [[[NSString alloc] initWithData:data
                                               encoding:NSUTF8StringEncoding] autorelease];

    // Checks for internet connectivity at startup
    if ([jsonStr isEqualToString:@""])
    {
        HideNetworkActivityIndicator();

        [self performSelectorOnMainThread:@selector(networkConnectivityCheck)
                                   withObject:nil
                                waitUntilDone:YES];
    }
    else
    {
        // Parse the string into JSON
        NSDictionary *json = [jsonStr JSONValue];

        // Get all object
        NSArray *items = [json valueForKeyPath:@"QUERY.DATA"];
        NSEnumerator *enumerator = [items objectEnumerator];

        NSArray *item;

        while (item = [enumerator nextObject])
        {
            [myMovieId      addObject:[item objectAtIndex:0]];
            [myMovieTitle   addObject:[item objectAtIndex:1]];

            NSString *genre = @"";

            if (genre == NULL)
            {
                genre = @"";
            }
            else
            {
                genre = [item objectAtIndex:2];
            }

            [myGenre    addObject:genre];
            [myCast     addObject:[item objectAtIndex:3]];
            [myPrice    addObject:[item objectAtIndex:4]];
            [myRuntime  addObject:[item objectAtIndex:5]];
            [myImageUrl addObject:[item objectAtIndex:6]];
            [myRating   addObject:[item objectAtIndex:7]];
            [myHits     addObject:[item objectAtIndex:8]];

            NSURL *url = [NSURL URLWithString:[item objectAtIndex:6]];
            NSData *data = [NSData dataWithContentsOfURL:url];

            if (data == nil) // checks if internet connection was lost while parsing & fetching
            {
                HideNetworkActivityIndicator();

                [self performSelectorOnMainThread:@selector(lostPrompt)
                                       withObject:self
                                    waitUntilDone:YES];

                break;
            }
            else
            {
                [myImage addObject:[UIImage imageWithData:data]];

                [self getMovieDetails:[item objectAtIndex:0]];
            }

            NSLog(@"O");
            [self displayButton2];
        }

        activityIndicator.hidden = YES;

        self.navigationItem.rightBarButtonItem = self.refreshButton;
    }

    [self performSelectorOnMainThread:@selector(versionCheck)
                           withObject:nil
                        waitUntilDone:YES];
}


- (void)displayButton2
{   
    int offset_x  = 19;
    int offset_y = 24;

    for (int i = 0; i < [myImage count] ; i++)
    {
        // compute x & y offset
        if (i % 3 == 0)
        {
            offset_x = 19;
        }
        else if (i % 3 == 1)
        {
            offset_x = 113;
        }
        else
        {
            offset_x = 208;
        }

        // Display Movie Thumbnail
        UIImage *imageView1 = [myImage objectAtIndex:i];
        CGRect myImageRect1 = CGRectMake(offset_x, offset_y, MOVIE_THUMBNAIL_W, MOVIE_THUMBNAIL_H);

        UIButton *button1 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
        button1.frame = myImageRect1;
        button1.backgroundColor = [UIColor clearColor];
        [button1 setBackgroundImage:imageView1 forState:UIControlStateNormal];
        button1.tag = i;
        [button1 addTarget:self
                    action:@selector(imageButtonPressed:)
          forControlEvents:UIControlEventTouchUpInside];
        [scrollview addSubview:button1];

        // Quick Buy Image
        UIImage *buy_image = QUICK_BUY_BUTTON;
        CGRect myImageRect2 = CGRectMake(offset_x + (MOVIE_THUMBNAIL_W-QUICK_BUY_BUTTON_W-2), offset_y + 2, QUICK_BUY_BUTTON_W, QUICK_BUY_BUTTON_H);

        UIButton *button2 = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
        button2.frame = myImageRect2;
        button2.backgroundColor = [UIColor clearColor];
        [button2 setBackgroundImage:buy_image forState:UIControlStateNormal];
        button2.tag = i;
        [button2 addTarget:self
                    action:@selector(quickBuyButtonPressed:)
          forControlEvents:UIControlEventTouchUpInside];
        [scrollview addSubview:button2];

        // increment offset
        if (offset_x == 208)
        {
            offset_y += 150;
        }
    }

    if ((offset_x == 19) || (offset_x == 113))
    {
        offset_y += 158;
    }

    // Adjust scroll view
    [scrollview setContentSize:CGSizeMake(0, offset_y + 10)];

    // adjust background
    [background setFrame:CGRectMake(13, 13, 294, offset_y - 17)];
    backgroundHeightAdjust = offset_y - 17;
}
-(void)getNowShowingList2
{
self.navigationItem.rightBarButtonItem=nil;
UIActivityIndicatorView*activityIndicator=[[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(0,0,20,20)];
activityIndicator.hidesWhenStopped=是;
uiBarButtonim*barButton=[[uiBarButtonim alloc]initWithCustomView:activityIndicator];
[self-navigationItem].rightBarButtonItem=barButton;
[活动指示器启动激活];
NSString*str=HOMEVIEW\u URL;
NSURL*url=[NSURL URLWithString:str];
NSData*data=[NSData dataWithContentsOfURL:url];
NSString*jsonStr=[[[NSString alloc]initWithData:data
编码:NSUTF8StringEncoding]自动释放];
//启动时检查internet连接
if([jsonStr isEqualToString:@”“]))
{
HideNetworkActivityIndicator();
[self-performSelectorOnMainThread:@selector(网络连接检查)
withObject:零
waitUntilDone:是的;
}
其他的
{
//将字符串解析为JSON
NSDictionary*json=[jsonStr JSONValue];
//获取所有对象
NSArray*items=[json valueForKeyPath:@“QUERY.DATA”];
N分子*枚举数=[items objectEnumerator];
NSArray*项目;
while(项=[enumerator nextObject])
{
[myMovieId addObject:[item objectAtIndex:0]];
[myMovieTitle添加对象:[项目对象索引:1]];
NSString*流派=@;
如果(类型==NULL)
{
体裁=@;
}
其他的
{
类型=[项目对象索引:2];
}
[我的流派添加对象:流派];
[myCast addObject:[item objectAtIndex:3]];
[myPrice addObject:[项目对象索引:4]];
[myRuntime addObject:[item objectAtIndex:5]];
[myImageUrl addObject:[item objectAtIndex:6]];
[myRating addObject:[项目对象索引:7]];
[myHits addObject:[item objectAtIndex:8]];
NSURL*url=[NSURL URLWithString:[item objectAtIndex:6]];
NSData*data=[NSData dataWithContentsOfURL:url];
if(data==nil)//检查在解析和获取时是否丢失了internet连接
{
HideNetworkActivityIndicator();
[self-performSelectorOnMainThread:@selector(lostPrompt)
withObject:自我
waitUntilDone:是的;
打破
}
其他的
{
[myImage添加对象:[UIImage imageWithData:data]];
[self-getMovieDetails:[项目对象索引:0]];
}
NSLog(@“O”);
[自显示按钮2];
}
activityIndicator.hidden=是;
self.navigationItem.rightBarButtonItem=self.refreshButton;
}
[self-performSelectorOnMainThread:@selector(versionCheck)
withObject:零
waitUntilDone:是的;
}
-(无效)显示按钮2
{   
int offset_x=19;
int offset_y=24;
对于(int i=0;i<[myImage count];i++)
{
//计算x&y偏移量
如果(i%3==0)
{
偏移量_x=19;
}
else if(i%3==1)
{
偏移量_x=113;
}
其他的
{
偏移量_x=208;
}
//显示电影缩略图
UIImage*imageView1=[myImage objectAtIndex:i];
CGRect myImageRect1=CGRectMake(偏移量x、偏移量y、电影缩略图W、电影缩略图H);
UIButton*button1=[[UIButton Button类型:UIButtonTypeCustom]retain];
button1.frame=myImageRect1;
button1.backgroundColor=[UIColor clearColor];
[按钮1设置背景图像:状态的imageView1:uicontrol状态正常];
按钮1.tag=i;
[按钮1添加目标:自我
操作:@选择器(按下ImageButton:)
forControlEvents:UIControlEventTouchUpInside];
[滚动视图添加子视图:按钮1];
//快速购买图像
UIImage*购买图像=快速购买按钮;
CGRect myImageRect2=CGRectMake(偏移量x+(电影缩略图W-QUICK-BUY按钮W-2)、偏移量y+2、QUICK-BUY按钮W、QUICK-BUY按钮H);
UIButton*button2=[[UIButton按钮类型:UIButtonTypeCustom]retain];
button2.frame=myImageRect2;
button2.backgroundColor=[UIColor clearColor];
[按钮2挫折背景图像:购买状态的图像:uicontrol状态正常];
按钮2.tag=i;
[按钮2添加目标:自我
操作:@选择器(按下QuickBuyButton:)
forControlEvents:UIControlEventTouchUpInside];
[滚动视图添加子视图:按钮2];
//增量偏移
如果(偏移量x==208)
{
偏移量_y+=150;
}
}
如果((偏移量_x==19)| |(偏移量_x==113))
{
偏移量_y+=158;
}
//调整滚动视图
[scrollview setContentSize:CGSizeMake(0,偏移量y+10)];
//调整背景
[背景设置帧:CGRectMake(13,13,294,偏移量_y-17)];
背景高度调整=偏移量y-17;
}

从长远来看,我还计划使用AFNetworking,因为它可能有助于实现我想要达到的效果

在后台线程中解析JSON。每次需要加载图像时,将其设置为主线程中的image
imageView

...
// Parse the string into JSON
[self performSelectorInBackground:@selector(parseJson:) withObject:jsonStr];
// ...

-(void)parseJson:(NSString*)jsonStr{

      // Parse Json ...
      // Show image on main thread
      [self performSelectorOnMainThread:@selector(showImage:)
                             withObject:image
                          waitUntilDone:NO];

}

-(void)showImage:(UIImage *)image{
      imageView.image = image;
}
谢谢W