UIImageView는 layer
으로 참조 할 수있는 레이어가 있으며 프로젝트를 QuartzCore에 연결할 때 대화 할 수 있습니다. 사용자가 손가락을 움직이면 UIImageView와 같은 크기의 불투명 한 색상으로 채워진 그래픽 컨텍스트에서 명확한 모양을 잘라내 CGImageRef로 변환하고 CALayer의 contents
으로 설정합니다 (다시이 CALayer는 UIImageView)로 설정하고 해당 레이어를 UIImageView의 layer.mask
으로 설정합니다. 마스크가 선명하지 않은 곳에서는 레이어에 투명한 구멍을 뚫습니다. 이는 UIImageView가 보여주는 이미지를 의미하는 뷰를 의미합니다. (UIImageView가 레이어 간섭을 좋아하지 않으므로 UIImageView가 작동하지 않으면 대신 UIImageView의 superview를 사용할 수 있습니다.)
EDIT (다음 날) - 다음은 레이어의 위임자에 대한 샘플 코드입니다. 중앙에 원형의 구멍을 펀치 :
-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)c {
CGRect r = CGContextGetClipBoundingBox(c);
CGRect r2 = CGRectInset(r, r.size.width/2.0 - 10, r.size.height/2.0 - 10);
UIImage* maskim;
{
UIGraphicsBeginImageContextWithOptions(r.size, NO, 0);
CGContextRef c = UIGraphicsGetCurrentContext();
CGContextAddEllipseInRect(c, r2);
CGContextAddRect(c, r);
CGContextEOClip(c);
CGContextSetFillColorWithColor(c, [UIColor blackColor].CGColor);
CGContextFillRect(c, r);
maskim = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
}
CALayer* mask = [CALayer layer];
mask.frame = r;
mask.contents = (id)maskim.CGImage;
layer.mask = mask;
}
따라서, 그 층은 도면의 층이고, 상기 UIImageView에 해당 하위 뷰 뷰의 경우, 구멍이있는 UIImageView 펀칭되는 경우. 내가 지금 당신의 생각을 다할 것입니다 @ 매트
감사 : 여기
은 결과의 스크린 샷입니다 –