2013-01-10 3 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

신경 쓰지 마라. 나는 그것을 스스로 알아낼 수 있었다. 단지 2 줄의 코드 일뿐입니다. – jaytrixz

관련 문제