我们有一个CALayer,可以显示包含编辑信息的图像。如旋转,缩放和平移。我想制作一个与图层边界完全匹配的CGPath。当图层旋转时,我的路径也应该旋转,其四个角应该与CALayer的四个角相匹配。 CGPath实际上用作灰色遮罩,以显示图像的剪切区域。
我尝试使用代码,但它不起作用。
f = self.imageLayer.frame;
t = self.imageLayer.affineTransform;
CGPathAddRect(path, &t, f);
CALayer有自己的CGAffineTransform。所有编辑信息都通过CGAffineTransform应用。
任何提示都将不胜感激,非常感谢。
答案 0 :(得分:0)
如果我的问题正确,您可以使用UIBezierPath
的{{3}}剪切图像图层边界,使可见屏幕的其余部分变暗。基本上你创建一个非常大的矩形路径(由于某些原因CGRectInfinite在这里不起作用)并切出图像层周围的区域。诀窍是使用kCAFillRuleEvenOdd
翻转内部和外部的内容。
应该有用的东西:
let cutPath = UIBezierPath(roundedRect: imageLayer.bounds, cornerRadius: 0)
let clipPath = UIBezierPath(rect: CGRectMake(-10e6, -10e6, 10e7, 10e7)) // CGRectInfinite isn't working here ?
clipPath.appendPath(cutPath)
clipPath.usesEvenOddFillRule = true
let shape = CAShapeLayer()
shape.contentsScale = UIScreen.mainScreen().scale
shape.lineWidth = 2
shape.fillColor = UIColor(red:0.1, green:0.1, blue:0.1, alpha:0.5).CGColor
shape.fillRule = kCAFillRuleEvenOdd
shape.strokeColor = UIColor.whiteColor().CGColor
shape.path = clipPath.CGPath
imageLayer.addSublayer(shape)
// do a transformations here
imageLayer.transform = CATransform3DMakeRotation(10.0, 1.0, 1.0, 0.8)
结果