У меня есть и нечетная проблема, связанный с ответом этого вопроса:Redrawed врезка NSShadow на заказ View с помощью метода -setClip
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];
}
}
Проблема возникает, когда я добавить Multiline этикетки (либо брат, сестра или ребенок моего пользовательского представления).
Когда мое окно программы теряет фокус, и я возвращаюсь к нему, моя внутренняя тень/ход становятся темнее. Кажется, что тени накладываются. Это странно, потому что, как сказано, если мое окно имеет только этот пользовательский вид, все идет хорошо.
Если я комментирую строку
[path setClip];
тень не наложена больше, но я не получаю желаемого эффекта скругленных углов (аналогичный чем NSBox).
Я пробовал то, что происходит с кнопкой, а не с многострочной меткой, и, теряя/получая фокус окна, проблем нет, но когда я нажимаю кнопку, тень накладывается.
Я считаю, что проблема похожа, чем здесь, но в какао вместо Java:
Спасибо за вашу помощь!
Тот же эффект (или аналогичный), что и setClip, и нет перерисовки. Я буду учитывать это. Благодаря! –