Ошибка рисования теней
Привет, в моем приложении у меня есть пользовательское представление с 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 не перемещают и не изменяют видимое положение источника света тени.