Эквивалент clipToBounds для Mac (уровень NSView)

У меня есть класс GlobalView, который расширяет NSView и имеет два подвида GreenRectView (который расширяет NSView). Я использую CALayer из моего GreenRectView, чтобы иметь возможность вращать (с помощью setAffineTransform:) мое представление вокруг точки, отличной от нижней левой точки по умолчанию. Поэтому я использовал «setAnchorPoint». Все работает хорошо, за исключением того, что когда мой зеленый прямоугольник поворачивается, он не выводится за пределы своего представления. В iOS можно использовать clipToBounds:NO, чтобы признать, что рисунок отображается за пределами границ, но в Mac он не работает с masksToBounds... Как я могу повернуть свой зеленый прямоугольник и полностью отобразить его независимо от угла поворота.

Смотрите изображение: Снимок экрана

введите здесь описание изображенияА вот код:

    @implementation GlobalView
- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
        g = [[GreenRectView alloc]initWithPoint:NSMakePoint(200, 200)];
        [self addSubview:g];

        g = [[GreenRectView alloc]initWithPoint:NSMakePoint(100, 400)];
        [self addSubview:g];    
    }
    return self;
}

#import <Quartz/Quartz.h>
#include <ApplicationServices/ApplicationServices.h>

@implementation GreenRectView

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {     
        [self setWantsLayer:YES];
        layer = [self layer];

        [self setLayer:layer];
        [layer setAnchorPoint:NSMakePoint(0.0,0.5)];
        [layer setMasksToBounds:NO];

        [menuLayer addSublayer:layer];

    }
    return self;
}

- (id)initWithPoint:(CGPoint)p {
    return [self initWithFrame:NSMakeRect(p.x, p.y, 120, 100)];
}

- (void)drawRect:(NSRect)dirtyRect {
    [[NSColor greenColor] setFill];
    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:NSMakeRect(0,0, self.frame.size.width, self.frame.size.height) xRadius:5.5 yRadius:5.5];
    [path stroke];  
}

person jlink    schedule 03.06.2012    source источник
comment
Я этого не сделал. На данный момент я отказался от CALayer. Я использую более крупный супервизор и делаю поворот с помощью NSAffineTransform.   -  person jlink    schedule 05.07.2012
comment
Разве это не отвечает на ваш вопрос, stackoverflow.com/questions/17793022/   -  person Daniel Farrell    schedule 09.04.2014