2014-01-23 8 views
2

내 응용 프로그램에서는 배경이있는 IKImageBrowserView를 사용합니다. wantLayer NO - 괜찮아요, IKImageBrowserView가 멋지다. 그러나 (부모보기에서) wantLayer를 활성화하면 IKImageBrowserView의 배경이 손상됩니다. (미안 영어가 모국어가 아니기 때문에 정확한 단어를 찾을 수 없습니다.)background 및 wantsLayer가있는 IKImageBrowserView

정확하게 이해한다면이 부분의 문제입니다. 그러나 나는 어디에서 볼 수 없다.

Image with problem

Image without problem

NSRect visibleRect = [owner visibleRect]; 
NSRect bounds = [owner bounds]; 

CGImageRef image = NULL; 
NSString *path = [[NSBundle mainBundle] pathForResource:[@"metal_background.tif" stringByDeletingPathExtension] ofType:[@"metal_background.tif" pathExtension]]; 
if (!path) { 
    return; 
} 

CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:path], NULL); 
if (!imageSource) { 
    return; 
} 

image = CGImageSourceCreateImageAtIndex(imageSource, 0, NULL); 
if (!image) { 
    CFRelease(imageSource); 
    return; 
} 

float width = (float) CGImageGetWidth(image); 
float height = (float) CGImageGetHeight(image); 

//compute coordinates to fill the view 
float left, top, right, bottom; 

top = bounds.size.height - NSMaxY(visibleRect); 
top = fmod(top, height); 
top = height - top; 

right = NSMaxX(visibleRect); 
bottom = -height; 

// tile the image and take in account the offset to 'emulate' a scrolling background 
for (top = visibleRect.size.height-top; top>bottom; top -= height){ 
    for(left=0; left<right; left+=width){ 
     CGContextDrawImage(context, CGRectMake(left, top, width, height), image); 
    } 
} 

CFRelease(imageSource); 
CFRelease(image); 

감사

답변

0

나는 몇 주 전에 IKImageView 사용하여 시도하고 문제가있는 경우 숫자에 달렸다. 좋은 수업이지만 오랫동안 업데이트되지 않은 것 같습니다. 나는 망막 스크린을 지원하지 않으며 레이어를 추가 할 때 미친 듯이 지적합니다.

이미지 상단에 CALayer를 사용하여 맞춤형 그림을 일부 만들고 싶습니다. 먼저 이미지 뷰에 레이어를 추가하여 문제를 일으켰습니다. 내가 찾은 해결책은 이미지 뷰에 사용자 지정 NSView 하위 뷰를 추가하고 자동 레이아웃 제약 조건을 추가하여 항상 동일한 크기가되도록 한 다음 하위 뷰에 뷰 호스팅 계층을 추가하는 것입니다. 이것은 잘 동작하므로 드로잉 코드를 사용자 정의 서브 뷰로 옮기면 작동합니다.

IKImageView 
    LayerHostingView (<--- add CALayer here) 
+0

흥미롭지 만 지금은 내 경우에 도움이됩니다. – user3229853

0

이 왜곡 된 배경 이미지 문제도 발생하여 배경에 잘못 설정된 CALayer를 설정 한 것으로 나타났습니다. 나는 당신이 원인을 오해하고있는 것으로 의심합니다. 왜냐하면 그 레이어가 설정되면 새로운 레이어를 즉시 다시 그려 내지 않기 때문에 wantsLayer를 false로 설정해야합니다.

레이어를 올바르게 설정 한 것처럼이 결론에 도달 한 다음 올바른 CALayer 코드를 설정하기 직전에 wantsLayer false를 설정합니다. 올바른 선 왜곡되지 않은 이미지가 먼저 표시되고 스크롤 할 때만 표시됩니다.) 스크린 샷에서 버그가있는 이펙트를 볼 수 있습니까? 그러나 코드에서 동일한 지점에서 wantsLayer를 true로 설정하면 브라우저를로드 할 때 즉시 다시 그리지 않아도 버그가있는 그래픽이 표시됩니다.

wishLayer false 문을 코드 아래로 이동하여 코드를 위반하는 행을 찾을 수 있습니다. 그러면 레이어가 재설정되거나 업데이트되는 위치가됩니다.