지도 위에 아이콘을 UIView를 사용하여 뿌리는데 iPhone4에서 제대로 이미지가 적용이 되지 않았다

해당 문제에 대해 기존 코드를 다 분해해본 결과 원인은 위 함수가 문제 였다.

retina디스플레이에 맞는 해상도 스케일이 위 함수에서는 제대로 적용이 안되었던 것 같다.

해당 문제에 대해 서칭해본 결과 아래 블로그를 찾았다.

http://www.waterworld.com.hk/en/blog/uigraphicsbeginimagecontext-and-retina-display

UIGraphicsBeginImageContext 를 retina디스플레이에 제대로 적용하기 위해서는 UIGraphicsBeginImageContextWithOptions 를

사용해야 했고 단말 기기의 버전에 따라 호출 함수를 결정해줘야하는 번거로움이 생겼다.

하지만 문제를 해결했으니 다행이다.

위 블로그의 업데이트 된 내용을 보니 ipad쪽에서 UIScreen의 scale을 불러오는 부분에 문제가 있는것 같아 코드를 수정하였다.

void RetinaAwareUIGraphicsBeginImageContext(CGSize size) {
static CGFloat scale = -1.0;
if (scale<0.0) {
UIScreen *screen = [UIScreen mainScreen];
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 4.0) {
if( [screen respondsToSelector:@selector(scale)] ){
scale = [screen scale] ;
}else {
scale = 1.0;
}
}
else {
scale = 0.0; // mean use old api
}
}
if (scale>0.0) {
UIGraphicsBeginImageContextWithOptions(size, NO, scale);
}
else {
UIGraphicsBeginImageContext(size);
}
}

+ Recent posts