У меня есть странная проблема, связанная с ответом на этот вопрос:
Нарисуйте NSShadow и 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:
Java setClip, кажется, перерисовывает
Спасибо за вашу помощь!