영삼이의 IT정보2012. 6. 13. 10:37

UIImageView는 참 편리하게 여기저기 많이 사용됩니다. 로컬에 있는 이미지들을 화면에 뿌려줄 때 참 좋죠. 하지만 이미지가 http://www.xxx.xx/123.jpg라면 어떻게 보여줄 수 있을지 한번 살펴보겠습니다.


UIImageView * couponImageView =

                   [UIImageView alloc] initWithFrame:CGRectMake(0,0,100,100)];

[couponImageView setImage:

            [UIImage imageWithData:

                  [NSData dataWithContentsOfURL:

                         [NSURL URLWithString:@"http://www.xxx.xx/123.jpg"]]]];


이렇게 하면 URL에 있는 이미지를 바로 UIImageView로 뿌려줄 수 있습니다. 당연히 UIImage형태가 들어가는 모든곳에서 NSData를 이용해서 이미지를 뿌려줄 수 있는데요. 버튼이나 라벨등에도 사용 가능합니다.


한발 더 나아가서, 만약 이미지를 asynch로 가져와서 NSData로 데이터를 다 받은 다음 뿌려주도록(물론 데이터를 받아오는 도중에는 인디케이터 같은걸 돌려서 사용자가 앱이 작동중이라는 사실을 확인할 수 있도록 해야겠죠.)할 수 있을까요?


UIImageView는 이미지가 다 로드 되었는지 아닌지를 확인하는 이벤트를 전혀 발생시켜주지 않습니다.


하지만 다른 방법으로 원하는 이벤트를 받을 수 있는데요.

NSMutableURLRequest * request =

           [NSMutableURLRequest requestWithURL:

                   [NSURL URLWithString:@"http://www.xxx.xx/123.jpg"]];
    
[NSURLConnection

          sendAsynchronousRequest:request

          queue:[[[NSOperationQueue alloc] init] autorelease]

          completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {            
        //데이터를 다 받은 경우
        if (data) {
            [couponImageView setImage:[UIImage imageWithData:data]];
        }
        //데이터를 받지 못한 경우
        else {
        }
    }];

이렇게 이미지 URL을 뿌려주고 다 받은 경우의 이벤트를 사용할 수 있겠습니다.

Posted by 다오나무