と奇妙な問題、この質問の答えに関連-setClip使用:Redrawedはめ込みNSShadow私が持っている方法
Draw an Inset NSShadow and Inset Stroke
を私はカスタムビューののdrawRectメソッドにこのコードを使用します。私は複数行ラベル(私のカスタムビューの兄弟や子のいずれか)を追加するとき
- (void)drawRect:(NSRect)rect
{
// Create and fill the shown path
NSBezierPath *path = [NSBezierPath
bezierPathWithRoundedRect:[self bounds]
xRadius:4.0f
yRadius:4.0f];
[[NSColor colorWithCalibratedWhite:0.8f alpha:0.2f] set];
[path fill];
// Save the graphics state for shadow
[NSGraphicsContext saveGraphicsState];
// Set the shown path as the clip
[path setClip];
// Create and stroke the shadow
NSShadow * shadow = [[[NSShadow alloc] init] autorelease];
[shadow setShadowColor:[NSColor colorWithCalibratedWhite:0.0f alpha:0.8f]];
[shadow setShadowBlurRadius:2.0];
[shadow set];
[path stroke];
// Restore the graphics state
[NSGraphicsContext restoreGraphicsState];
if (highlight && [[self window] firstResponder] == self) {
NSSetFocusRingStyle(NSFocusRingOnly);
[[NSBezierPath bezierPathWithRect:[self bounds]] fill];
}
}
問題が来る:私はまさにこれです。
私のプログラムウィンドウがフォーカスを失って戻ってきたら、私の内側のシャドウ/ストロークは暗くなります。影が重なっているようです。私のウィンドウがこのカスタムビューしか持っていないとうまくいくので、それは奇妙です。私はライン
[path setClip];
コメント場合
影はもう重畳されていないが、私は(NSBoxよりも類似の)丸みを帯びた角の所望の効果を得ることはありません。
複数行ラベルの代わりにプッシュボタンを使用してみましたが、ウィンドウのフォーカスを失う/取得することで問題はありませんが、ボタンをクリックすると影が重ねられます。
私はこの問題は、ここよりも似ていますが、ココアの代わりに、Javaで見つける:あなたの助けのための
感謝を!
setClipと同じエフェクト(または同様のもの)で、再描画しません。私はそれを考慮に入れます。ありがとう! –