2013-01-10 55 views
1

我基本上在JSON上獲取圖像,然後將其顯示在屏幕上。在我現在的代碼中,它工作正常,除了在我的while循環之後顯示圖像。如何在iPhone SDK上循環運行時顯示圖像

我想要的是每次循環迭代時顯示圖像。如果可能的話,還會顯示圖像漸變,就像Apple的Trailers.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; 
} 

任何幫助,將不勝感激。從長遠來看,我也計劃使用AFNetworking,因爲它可能有助於達到我想達到的效果。提前致謝。

回答

0

解析後臺線程中的JSON。每次您需要加載圖像時,請將其設置爲主線程中的圖像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; 
} 
+0

謝謝。將試試這個,看看它是否有效。代碼看起來也更乾淨。 – jaytrixz

+0

當你顯示圖像時,你能幫助我對圖像產生淡化效果嗎? – jaytrixz

+0

沒關係。我能夠自己弄明白。這只是兩行代碼。 – jaytrixz