Отсечение CALayer по произвольному пути - PullRequest
9 голосов
/ 20 июля 2010

Можно ли обрезать CALayer по произвольному пути? Я знаю, что могу закрепиться за границы суперслоя, но в этом случае мне нужно быть гораздо более строгим.

TIA, Адам

Ответы [ 2 ]

14 голосов
/ 20 июля 2010

Используйте CAShapeLayer в качестве маски для слоя, который вы хотите обрезать. CAShapeLayer имеет свойство path, которое принимает CGPathRef.

1 голос
/ 01 сентября 2016

Да, вы можете переопределить 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 как маску.

...