5

私はnsviewを持っていて、drawrectを使用して背景の画像を描画しています。また、3つのサブビューnsbuttonがあります。問題は、マウスがボタンの上にあるときはいつでも、他のボタンが消えることです。しかし、draw rectメソッドを削除すると、これは発生しません。ですから、これは画像を描くための長方形の描画方法に関係していると思います。

どうすればこれを回避できますか?ありがとう。

編集:わかりました、私は問題がどこにあるかを理解しました。基本的に、私はNSMenuItemを持っており、その中に3つのボタンでビューを配置しています。しかし、NSMenuの上部には、4ピクセルのパディングがあります。したがって、基本的に、そのパディングを削除するために、ここで提供されるソリューションを使用しました: NSMenuItemカスタムビューの上のギャップ

ソリューションから、drawRectメソッドに線があります。

[[NSBezierPath bezierPathWithRect:fullBounds] setClip];

その瞬間、この行を削除すると、ボタンが正しく動作します。しかし、その後、上部のパディングは消えません。

これが私のdrawRectです:

- (void) drawRect:(NSRect)dirtyRect {

    [[NSGraphicsContext currentContext] saveGraphicsState];

    NSRect fullBounds = [self bounds];
    fullBounds.size.height += 4;
    [[NSBezierPath bezierPathWithRect:fullBounds] setClip];

    NSImage *background = [NSImage imageNamed:@"bg.png"];
    [background drawInRect:fullBounds fromRect:NSZeroRect operation:NSCompositeCopy fraction:100.0];

    [[NSGraphicsContext currentContext] restoreGraphicsState];
}
4

2 に答える 2

3

リンクされた質問の解決策には、グラフィックスの状態の保存と復元は含まれていません。これは、作成していないグラフィックスの状態を変更する場合に適しています。これを試してみてください:

- (void)drawRect:(NSRect)dirtyRect {
   // Save the current clip rect that has been set up for you
   [NSGraphicsContext saveGraphicsState];
   // Calculate your fullBounds rect
   // ...
   // Set the clip rect
   // ...
   // Do your drawing
   // ...
   // Restore the correct clip rect
   [NSGraphicsContext restoreGraphicsState]
于 2011-04-21T17:43:25.853 に答える
0

これらのボタンは実際にはサブビューであり、描画しているビューの上に配置されているだけではありませんか?

于 2011-04-21T15:18:12.660 に答える