7

我有一个类“GlobalView”,它扩展了 NSView 并有两个子视图 GreenRectView(它扩展了 NSView)。我使用 GreenRectView 中的 CALayer 以便能够(使用 setAffineTransform :) 围绕默认左下角以外的点旋转我的视图。因此我使用了“setAnchorPoint”。一切都很好,除了当我的绿色矩形被旋转时,它没有画在它的视图范围之外。在 iOS 中,可以使用 clipToBounds:NO 来接受绘图显示在边界之外,但在 Mac 中它不能与 maskToBounds 一起使用...如何旋转我的 greenrect 并完全显示它,无论旋转角度如何。

见图片: 截屏

在此处输入图像描述 这是代码:

    @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];  
}
4

0 回答 0