NSView を拡張し、2 つのサブビュー GreenRectView (NSView を拡張する) を持つクラス「GlobalView」があります。私は GreenRectView の CALayer を使用して、(setAffineTransform: を使用して) デフォルトの左下のポイント以外のポイントを中心にビューを回転できるようにします。したがって、「setAnchorPoint」を使用しました。私の緑の四角形が回転したとき、それはそのビューの境界の外に描画されないことを除いて、すべてうまくいきます。iOS では、clipToBounds:NO を使用して描画が境界外に表示されることを受け入れることができますが、Mac では maskToBounds では機能しません。
写真を参照してください:
そして、ここにコードがあります:
@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];
}