UIImageView有一個圖層,您可以將其引用爲其layer
,並在將項目鏈接到QuartzCore時進行討論。當用戶移動一個手指時,在一個與UIImageView相同大小的不透明顏色填充圖形上下文中剪下一個清晰的形狀,將其轉換爲CGImageRef,將其設置爲CALayer的contents
(同樣,CALayer的大小必須與UIImageView),並將該圖層設置爲UIImageView的layer.mask
。無論在哪裏清除遮罩,都會在圖層上打一個透明孔,這意味着視圖,這意味着UIImageView顯示的圖像。 (如果這不起作用,因爲UIImageView不喜歡你干擾它的圖層,你可以使用UIImageView的超級視圖來代替。)
編輯(第二天) - 下面是圖層委託的示例代碼,衝頭在中心的圓形孔:
-(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。
這裏的結果的截圖:
感謝@馬特,我會嘗試你的想法,現在 – 2011-12-26 04:07:34