2015-05-19 28 views
0

我们有一个CALayer,它显示带有编辑信息的图像。如旋转,缩放和平移。我想制作一个完全匹配图层边界的CGPath。当图层旋转时,我的路径也应旋转,其四个角应与CALayer的四个角相匹配。 CGPath实际上用作灰色蒙版以显示图像的剪切区域。如何在图层旋转或缩放时创建与CALayer完全匹配的CGPath?

我尝试下面的代码,但它不起作用。

f = self.imageLayer.frame; 
    t = self.imageLayer.affineTransform; 
    CGPathAddRect(path, &t, f); 

CALayer有它自己的CGAffineTransform。所有的编辑信息都通过CGAffineTransform来应用。

任何提示将不胜感激,非常感谢。

回答

0

如果我的问题得到解决,您可以使用UIBezierPathusesEvenOddFillRule来削减图像层边界,使可见屏幕的其余部分变暗。基本上你会创建一个非常大的矩形路径(出于某些原因,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) 

导致

enter image description here

+0

感谢您的答复。我终于解决了这个问题。我们有一个固定的矩形表示剪辑区域(其大小可能为500 * 400)。外面的图像将被裁剪。图像的剪切部分在它上面有一个灰色面罩。当图像旋转时,蒙版将跟随图像。我使用CGPathAddRect(路径,&t, f);和其他现有的CGPathMoveToPoint,CGPathAddLineToPoint代码来创建掩码),我们有offsetX和offsetY以及图像层的大小,并且我围绕旋转蒙版(offsetX,offsetY)指向我认为你的add subLayer和kCAFillRuleEvenOdd技巧对我来说非常有用。 –

相关问题