우선 프로젝트에 해상도별로 imageName.png와 imageName@2x.png 를 넣어 둔다.
이렇게 하면 [NSImage imageNamed:@"imageName"]; 를 이용하면 알아서 모니터 해상도에 맞게 이미지를 가져오게 된다.
하지만 프로젝트에 포함되지 않은 이미지의 경우는 이렇게 할 수 없다.
할 수 없이 현재 디스플레이가 레티나인지 여부를 런타임때 확인하여 imageName 에 @2x 를 붙여 넣는 소스를 작성하였다.
그렇게 좋은 소스는 아니나 런타임 때 레티나 디스플레이인지 체크하는 방법이다.
float displayScale = 1; if ([[NSScreen mainScreen] respondsToSelector:@selector(backingScaleFactor)]) { NSArray *screens = [NSScreen screens]; for (int i = 0; i < [screens count]; i++) { float s = [[screens objectAtIndex:i] backingScaleFactor]; if (s > displayScale) displayScale = s; } } |
레티나 디스플레이의 경우 displayScale 값이 2의 값으로 온다. 아마 2보다 큰 값도 오지 않을까 생각된다.
일단 이 로직에 문제점은 듀얼 모니터의 경우 하나라도 레티나 디스플레이가 있을 경우 레티나 디스플레이로 체크한다는 것이다.
좀더 정확하게 체크하는 방법을 찾을 필요가 있어 보인다.
출처 : http://stackoverflow.com/questions/11067066/mac-os-x-best-way-to-do-runtime-check-for-retina-display
'Mac&iOS' 카테고리의 다른 글
NSMenu와 NSMenuItem (0) | 2016.06.21 |
---|---|
noteNewRecentDocumentURL is not working (0) | 2016.06.20 |
CFNetwork SSLHandshake failed (-9824) (0) | 2016.06.07 |
*** -[MyWindowController tableView:objectValueForTableColumn:row:]: message sent to deallocated instance (0) | 2016.06.01 |
Help Indexer 파일 받기 (0) | 2015.03.11 |