0

NSView を既存の NSView に追加しようとしていますが、奇妙な理由で惨めに失敗しています。私はこれをやっています:

        _resizeView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 10, 10)];
    [_resizeView.layer setBorderWidth:2];
    [_resizeView.layer setBorderColor:[NSColor purpleColor].CGColor];
    [_resizeView.layer setBackgroundColor:[NSColor blackColor].CGColor];
    [_resizeView setAutoresizingMask:NSViewNotSizable | NSViewMinXMargin | NSViewMaxYMargin];
    [self addSubview:_resizeView];

自動サイズ変更マスクを削除しようとしましたが、それでも機能しませんでした。そこで、NSView から NSButton に変更したところ、魔法のように機能し、ビューが表示されます。

drawRect をオーバーライドしている NSView の独自のサブクラスを作成すると、突然表示されますが、そこに自分で描画したパスのみが表示されます (はい、スーパー drawRect を呼び出しています)。ここで何が起こっているのですか?

基本的に境界線のあるボックスを作成しているだけなので(背景色はテスト用でした)、サブクラスを使い続けることができましたが、これを既存のビューの隅に少し突き出して追加しようとしました、追加するビューのプライマリ レイヤーに対して setMasksToBounds を NO に設定しても、マスクされます。

ここで気が狂う!これが期待どおりに機能しないのはなぜですか?

4

2 に答える 2

3

レイヤーに基づくビューを使用する場合は、呼び出す必要があります

[_resizeView setWantsLayer:YES];

そして多分

[_resizeView setNeedsDisplay:YES];

しかし、それは単なるNSView.

于 2013-05-22T14:37:53.560 に答える