對 UIView 切割,其實就是設定它的 Bounds,好讓 UIView 的內容限制在 Bounds 中,之前已經介紹過透過改變 Frame 或 Bounds 大小的方式來切割影像的方法,本篇就採用另一種以設定路徑的方式對 UIView 進行切割,其程式碼如下。
//取得以影像位基準的的中心點坐標
CGPoint center = CGPointMake(imageView.frame.size.width / 2, imageView.frame.size.height / 2);
//設定一個bounds
CGRect bounds = imageView.frame;
//設定參考範圍
UIGraphicsBeginImageContext(bounds.size);
CGContextRef context = UIGraphicsGetCurrentContext();
//建立並設定路徑
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, center.x - 70, center.y - 100);
CGPathAddLineToPoint(path, NULL, center.x + 70, center.y - 100);
CGPathAddLineToPoint(path, NULL, center.x + 120, center.y);
CGPathAddLineToPoint(path, NULL, center.x + 70, center.y + 100);
CGPathAddLineToPoint(path, NULL, center.x - 70, center.y + 100);
CGPathAddLineToPoint(path, NULL, center.x - 120, center.y);
//加入路徑
CGContextAddPath(context, path);
//裁切
CGContextClip(context);
[imageView drawRect:bounds];
[imageView setImage:UIGraphicsGetImageFromCurrentImageContext()];
CFRelease(path);
UIGraphicsEndImageContext();
上述程式碼透過設定範圍 Bounds 對影像進行切割剪裁,由於最後影像是由 UIGraphicsGetImageFromCurrentImageContext() 所取得,因此在 UIView 內的影像已經是真正切割完成的影像,而並非原圖因超出 Bounds 邊界而導致看不見。另一種類似此效果的做法可以參考CoreGraphic 遮色片應用一文。
沒有留言:
張貼留言