Ошибка рисования теней

Привет, в моем приложении у меня есть пользовательское представление с CALayer (я использую его для анимации перехода), в этом представлении я добавляю несколько подпредставлений, одним из них является представление с NSTableView. Каждая ячейка NSTableView рисует свой контент с тенью. Код как это:

NSShadow* shadow = [[NSShadow alloc] init];
[shadow setShadowOffset:NSMakeSize(2.0, -2.0)];
[shadow setShadowBlurRadius:2.0];
[shadow setShadowColor:[[NSColor blackColor] colorWithAlphaComponent:0.3]];
[shadow set];

[self.stringValue drawInRect:NSMakeRect(x, y, w - 60, h) withAttributes:attributes];

Когда в моем NSTableView меньше чем ~50 строк с включенным CALayer ИЛИ когда я выключаю CALayer в IB, я вижу такие ячейки:

Но когда мой NSTableView имеет более ~50 строк и я включаю CALayer в IB, я рисую клетки следующим образом:

Как это может быть? Я сломал мой был:(

1 ответ

  • Попробуйте изменить -2.0 в +2.0 в зависимости от [[NSGraphicsContext currentContext] isFlipped] имущество.
  • Попробуйте изменить его в зависимости от того, является ли представление слоистым, а CALayer имеет isGeometryFlipped на.
  • Если к вам применены переворачивающие преобразования, обратите внимание, что они не влияют на NSShadow:

    Тени всегда рисуются в пользовательском координатном пространстве по умолчанию, независимо от любых преобразований, примененных к этому пространству. Это означает, что повороты, сдвиги и другие преобразования текущей матрицы преобразования (CTM) не влияют на результирующую тень. Еще один способ думать об этом состоит в том, что изменения в CTM не перемещают и не изменяют видимое положение источника света тени.

Другие вопросы по тегам