将CALayer剪切为任意路径

时间:2010-07-20 10:01:59

标签: core-animation quartz-graphics calayer

是否可以将CALayer剪辑到任意路径?我知道我可以剪辑到超级界限,但在这种情况下我需要更具说明性。

TIA,Adam

2 个答案:

答案 0 :(得分:14)

使用CAShapeLayer作为要剪辑的图层的蒙版。 CAShapeLayer有一个带有CGPathRef的路径属性。

答案 1 :(得分:1)

是的,您可以覆盖自定义图层的drawInContext。

func addPathAndClipIfNeeded(ctx:CGContext) {
     if (self.path != nil) {
         CGContextAddPath(ctx,self.path);
         if (self.stroke) {
            CGContextSetLineWidth(ctx, self.lineWidth);
            CGContextReplacePathWithStrokedPath(ctx);
         }
         CGContextClip(ctx);
     }
}
override public func drawInContext(ctx: CGContext) {
    super.drawInContext(ctx)
    addPathAndClipIfNeeded(ctx)
}

或者您可以创建一个CAShapeLayer作为掩码。