0

ビューからこのメソッドを削除すると、すべてが正常に機能する (ボタンをクリックしてもコンテンツが消えない) ため、間違いなくこれが原因です。

以下のコードを使用して、丸みを帯びたグラデーションのあるウィンドウを作成しようとしています。ビューのコンテンツが消える原因となるような問題はありますか?

- (void)drawRect:(NSRect)dirtyRect
{
    [NSGraphicsContext saveGraphicsState];

    NSBezierPath *outerClip = [NSBezierPath bezierPathWithRoundedRect:[self bounds]
                                                              xRadius:3.0
                                                              yRadius:3.0];
    [outerClip setClip];

    NSGradient* aGradient = [[NSGradient alloc]
                             initWithStartingColor:[NSColor colorWithCalibratedWhite:1.0 alpha:1.0]
                             endingColor:[NSColor colorWithCalibratedWhite:0.65 alpha:1.0]];

    [aGradient drawInRect:[outerClip bounds] angle:270];

    [NSGraphicsContext restoreGraphicsState];

}

4

2 に答える 2

0

NSGradient drawInbezierPath に切り替えると、問題が修正されます。

于 2013-03-22T07:54:27.020 に答える
0

あなたが自分の質問に答えたことは知っていますが、上記のコードでコンテンツが消えた理由を共有したいと思いました.

使用すると、以前のクリッピング パスsetClip削除され、新しいパスに置き換えられます。これは、ダーティ エリアの外側に描画してしまうことを意味し、以前に描画されたコンテンツを上書きします。

私は自分のスプラッシュ スクリーンに丸みを帯びた角を描画する際に同じ問題を抱えていましたが、最終的には別の方法でやりたいことを見つけました。

clipRect:また、 のクラス メソッドを使用してNSBezierPath、クリッピング パスを既存のパスと描画を制限したい領域の交点に変更することもできます。もちろん、呼び出し前後のグラフィックス状態を保存して復元しますclipRect:

于 2014-01-26T02:38:36.247 に答える