티스토리 뷰

반응형


https://github.com/Haneke/Haneke


1. 사용목적

 - 주기적으로 비동기 처리되는 이미지를 실행 시마다 load하지 않고, 내부에 저장해서 호출하기 위해.



2. 셋팅.

 - github에 있는 셈플을 다운받아서 코드 및 소스파일을 프로젝트에 복사 후 진행.

 - 사용방법

1)  Format 설정.

2)  Import "Haneke.h" 

3) UIImageView에 상황에 맞게 사용하기만 하면 끝.



3. 실제 적용 코드. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
+ (void)initialize
{
    HNKCacheFormat *format = [[HNKCacheFormat alloc] initWithName:@"thumbnail"];
    
    format.compressionQuality = 0.75;
    // UIImageView category default: 0.75, -[HNKCacheFormat initWithName:] default: 1.
    
    format.allowUpscaling = YES;
    // UIImageView category default: YES, -[HNKCacheFormat initWithName:] default: NO.
    
    format.diskCapacity = 10.0 * 1024 * 1024;
    // UIImageView category default: 10 * 1024 * 1024 (10MB), -[HNKCacheFormat initWithName:] default: 0 (no disk cache).
    
    format.preloadPolicy = HNKPreloadPolicyLastSession;
    // Default: HNKPreloadPolicyNone.
    
    format.scaleMode = HNKScaleModeAspectFill;
    // UIImageView category default: -[UIImageView contentMode], -[HNKCacheFormat initWithName:] default: HNKScaleModeFill.
    
    format.size = CGSizeMake(200, 200);
    
    [[HNKCache sharedCache] registerFormat:format];
}
cs


리스트에서 사용할 500x500px 이미지를 저장해본 결과 


용량 및 품질에대해 최적의 셋팅은 퀄리티 0.75%에 사이즈 400x400픽셀이었다.


format.size에 200으로 적혀 있지만 실제 이미지 픽셀은 그 2배인 400px로 저장된다.






3.1 실제 ImageView적용 코드.


1
2
3
4
5
6
7
8
9
10
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 100100)];
    
    imageView.hnk_cacheFormat = format;
    [imageView hnk_setImageFromURL:[NSURL URLWithString:@"IMAGE URL"]
                              placeholder:[UIImage imageNamed:@"blank.png"]
                                  success:^(UIImage *image) {
                                      [imageView setImage:image];
                                  } failure:^(NSError *error) {
                                      //...
                                  }];
cs


모든 UIImageView에 hnk_setImage... 매서드를 호출할 수 있기 때문에 class만 import 한 후 바로 사용하면 된다.


imageView.hnk_cacheFormat을 적용하지 않았을 때 해당 이미지뷰 크기에 맞춰 이미지가 저장된다.


디폴트 형태로 저장되기 때문에 필히 format은 Global 변수로 할당해 사용하는게 편리하다.




4. 결과 확인.



Xcode > Window > Device 또는 Shift + Command + 2를 통해 확인 가능


단, 앱을 디바이스에서 실행한 후 컴퓨터에 연결되어 있어야한다.






Show Container를 통해 앱 내부 저장파일을 볼 수 있다.


format이 적용되지 않은 파일은 "auto-137x159-fill"폴더에 이미지가 저장되었으며,


format가 적용된 파일은 하단 thumbnail 폴더에 저장된 것을 확인 할 수 있다.





Download Container를 통해 받은 파일은 마우스 우클릭을 통해 "패키지 내용 보기"할 경우


안에 DATA를 확인할 수 있다.





5. 결론.

 - 저장공간을 10MB로 셋팅한 결과 최대 10.5MB까지 적용되는 것을 확인하였으며, 사용되지 않는 이미지는 지워지고 새로운 이미지가 저장되는 것을 확인할 수 있었다.


 - 서버에서 비동기 처리되는 이미지를 disk에 저장함으로써 서버 과부하 및 사용자 데이터 사용을 줄일 수 있는 점에서 효율적인 것 같다.


 - 동일한 규격의 사진에 적용하기는 편리하지만 크기가 다를 경우 format을 각기 다르게 지정해야 하는 번거러움은 존재한다.


 - 그래도 사용법이 편리하기에 쉽게 적용할 수 있다는 점은 가장 큰 특징이 아닌가 싶다.


반응형
댓글
반응형