2012-02-24 3 views
1

특정 배경색의 뷰가 있습니다. 다음 코드로이보기를 마스킹합니다.ios : 스크린 샷에 마스크가 표시되지 않습니다. 레이어

UIView *colorableView = [[UIView* alloc] init]; 
colorableView.backgroundColor = someColor; 

CALayer *maskLayer = [CALayer layer]; 
maskLayer.contents = (id)[UIImage imageNamed:maskImageName].CGImage; 

colorableView.layer.mask = maskLayer; 

모두 잘 작동합니다. 보기가 마스킹되므로 일부 부품은 투명합니다. 지금이보기의 스크린 샷합니다

CGRect frame = colorableView.frame; 

UIGraphicsBeginImageContext(frame.size); 

CGContextRef c = UIGraphicsGetCurrentContext(); 
CGContextTranslateCTM(someUninterestingCodeToGetACorrectPosition); 

[self.view.layer renderInContext:c]; 
UIImage *screenShotImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

return screenShotImage; 

이 스크린 샷 작품 촬영을 (사실은 내가 너무보기 위에 다른 물건을 표시하고이뿐만 아니라 화면에 표시됩니다)하지만, 어떻게 든, 마스크가 인식되지 않습니다 . 내가 얻는 의미는 마스크가 그 일부를 숨기지 않고 완전히 채색 된 뷰 (사각형)의 스크린 샷입니다.

마스크 레이어에서 'UIGraphicsGetImageFromCurrentImageContext()`가 작동하지 않는다고 생각합니다. 어떻게해야합니까? 스크린 샷을 메일로 표시하려면 UIImage가 있어야합니다. 사전에 많은 (뷰 클립을 석영 기능을 사용할 수 있습니다 CGContextClip을이 문제를 해결하는

답변

1

한 가지 방법은, 내가 정확히 기억하지

감사합니다, 당신은 문서에 조금 파고해야합니다). 희망이 도움이 될 것입니다.

+0

나는 지금 drawRect 메서드 내에서 'CGContextClipToMask (context, rect, maskImage) '를 사용하고 있으며 스크린 샷에서 작동합니다. drawRect를 재정의 할 때 색상을 애니메이트 할 수 없기 때문에 스크린 샷에 대해서만이 작업을 수행합니다. 우선, rect의 크기가 마스크의 해상도를 제한한다고 생각하기 때문에 고해상도 마스크를 얻는 방법을 알고 있습니까? 원본 rect가 꽤 작기 때문에 아이콘이 가끔씩 커지기 때문에 스크린 샷을 찍을 때 마스크의 해상도는 원래의 마스킹 방법의 마스크 해상도보다 훨씬 낮습니다. – JayAr

+0

망막 디스플레이가 켜져있을 가능성이 있습니까? 이런 경우에는 [[UIScreen mainScreen] scale] (구문에 대해 확실하지 않은) scale 속성을 가져온 다음 rect 크기에이 값을 곱합니다. – Ganzolo

+0

저는 Ipad2에서 작업 중이므로 망막 디스플레이가없고 스케일 속성이 1을 반환합니다. 인터페이스 작성기에서 원본 뷰를 매우 크게 만들면 마스크 해상도가 좋습니다. 그러나 원래보기는 아이콘만큼 크며 언젠가는 커집니다. 그런 다음 스크린 샷을 만들고 원본 rect가 작기 때문에 해상도가 낮습니다. 나는 이것을 위해 또 다른 질문을한다. – JayAr

관련 문제