2014-02-16 4 views
2

Есть ли способ в CoreAnimation на Mac, чтобы получить путь безье, который по существу является «границами фактических пикселей» или «путь маски» CALayer?Получите «путь маски» CALayer в нерепрезентативных координатах

Например, у меня есть этот CALayer с набором фотографий в качестве его содержимого, 1px белой границей и преобразованием вращения X и Y. Есть ли способ получить свой пиксельный путь с применением преобразования?

Пример изображения:

enter image description here

ответ

0

я понял, как сделать это для моих потребностей. Это не истинный «путь маски», но это путь преобразованного прямоугольника в пространстве координат слоя аргумента, и это действительно то, что мне нужно.

Контекст этого метода является категория по CALayer:

- (NSBezierPath*)layerPathConvertedToLayer:(CALayer*)toLayer 
{ 
    CGRect bounds = self.bounds; 
    CGPoint topLeft = CGPointMake(NSMinX(bounds), NSMinY(bounds)); 
    CGPoint topRight = CGPointMake(NSMaxX(bounds), NSMinY(bounds)); 
    CGPoint bottomRight = CGPointMake(NSMaxX(bounds), NSMaxY(bounds)); 
    CGPoint bottomLeft = CGPointMake(NSMinX(bounds), NSMaxY(bounds)); 

    CGPoint convertedTopLeft = [self convertPoint:topLeft toLayer:toLayer]; 
    CGPoint convertedTopRight = [self convertPoint:topRight toLayer:toLayer]; 
    CGPoint convertedBottomRight = [self convertPoint:bottomRight toLayer:toLayer]; 
    CGPoint convertedBottomLeft = [self convertPoint:bottomLeft toLayer:toLayer]; 

    NSBezierPath *bezierPath = [NSBezierPath bezierPath]; 
    [bezierPath moveToPoint:convertedTopLeft]; 
    [bezierPath lineToPoint:convertedTopRight]; 
    [bezierPath lineToPoint:convertedBottomRight]; 
    [bezierPath lineToPoint:convertedBottomLeft]; 
    [bezierPath lineToPoint:convertedTopLeft]; 
    [bezierPath closePath]; 

    return bezierPath; 
} 
Смежные вопросы