2013-03-23 3 views
4

У меня есть некоторый NSView, который я хочу оживить, но NSView имеет NSTableView внутри, который не отображает корреляцию, когда представление поддерживается на основе слоев (что в свою очередь нецелесообразно анимировать представление). Так что мой ответ должен был сделать слой спинками право просмотра, прежде чем анимировать, а затем, когда анимация была сделана удалить слой, как это:Анимированная анимация NSView с поддержкой Layer

[animatingView setWantsLayer: YES]; 

[NSAnimationContext beginGrouping]; 

[[animatingView animator] animateSomething]; 

[[NSAnimationContext currentContext] setCompletionHandler: ^{ 
    [animatingView setWantsLayer: NO]; 
}]; 

[NSAnimationContext endGrouping]; 

Однако, с этим кодом вид не анимировать вообще. Я обнаружил, что если я удаляю строку [animatingView setWantsLayer: NO];, она анимируется только вправо, но тогда представление таблицы отображается неправильно (см. Вопрос this для примера одной из проблем).

Итак, мой вопрос: как я могу это решить? Я хочу анимировать представление, но хочу, чтобы таблицы отображались правильно, и это обходное решение не работает. И я не понимаю, почему ...

ответ

2

Как только вы создадите слой с поддержкой NSView, он не может быть возвращен.

Я предлагаю вам попытаться сделать ваш NSTableView родным, похожим на слой, а не дочерним.

+0

Но представление должно содержать таблицу, это идея. В представлении содержатся таблица, некоторые кнопки и некоторые текстовые поля, и я хочу оживить их все и в то же время, и это не вариант для их анимации один за другим. – Alex

+0

@Alex Согласен. Но, к сожалению, вы просто столкнулись с ошибкой, и вам нужно найти обходной путь. Вы должны либо взломать ваш NSTableView, чтобы работать корректно в режиме супервизора с поддержкой слоев, либо взломать процесс анимации. – Kentzo

+0

Ну, у вас есть точка, конечно. Я все еще что-то не понимаю: почему код не приводит к анимации? Я имею в виду, что я настраиваю представление на слой с поддержкой слоев, а затем я его оживляю, а затем, в конце концов, я делаю это не с поддержкой слоев, но это не делает что-то по вашему мнению, так почему не оживляет ли он? Как я уже сказал в вопросе, если я удаляю строку в обработчике завершения, он оживляет, так что кажется, что линия действительно имеет значение. Как так? – Alex

Смежные вопросы