Просмотр свопа с использованием push-анимации - PullRequest
2 голосов
/ 10 ноября 2009

Я хочу поменять одно представление на другое, отодвинув старое представление в сторону, чтобы перейти в новое представление (тип kCATransitionPush). Чтобы использовать CoreAnimation, мне нужно работать с CALayers с моими представлениями. Проблема заключается в том, что присоединение вспомогательного слоя к моему представлению содержимого окна через setWantsLayer искажает все в представлении.

Я не уверен, что это как-то связано с тем, что я использую подкласс NSWindow с именем MAAttachedWindow (http://mattgemmell.com/source),, который является своего рода прозрачным всплывающим окном в стиле HUD, которое присоединяется к другому элементу на экране.

Я могу предоставить скриншоты этого искажения при необходимости. Я получил анимацию, работающую через NSViewAnimation, но, как многие другие испытали, NSViewAnimation ужасно медленная. Я бы предпочел использовать CoreAnimation, но эта проблема не позволяет мне его использовать.

Любое понимание высоко ценится

Ответы [ 3 ]

1 голос
/ 26 ноября 2009

В дополнение к возможности нецелых координат, мне кажется, что текст нарисован в непрозрачном буфере. Сглаживающий текст кварцевый сглаживающий текст не работает, если он нарисован поверх непрозрачного цвета фона и , а затем . Скорее, ваш слой / вид должен заполнить фон непрозрачным фоновым цветом, а затем нарисовать текст над ним.

Один из способов обойти это, с которым мы поиграли:

  • Нарисуйте свой полупрозрачный фон.
  • Нарисуйте текст с цветом фона, альфа = 1, и добавьте обводку к тексту того же цвета, выбрав ширину обводки, чтобы охватить область сглаживания (здесь следует помнить о независимости разрешения).
  • Нарисуйте текст как обычно, над этой «посадочной площадкой».

Возможно, проблема со скроллером заключается в том, что скроллер запрашивает -isOpaque, но это не так. Должно помочь соответствующее изменение непрозрачности и цветопередачи фона.

0 голосов
/ 11 ноября 2009

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

0 голосов
/ 11 ноября 2009

Учитывая ваше высказывание, проблема не возникает с обычными окнами, пришло время взглянуть на MAAttachedWindow. Одна из первых вещей, которые я вижу, когда окно создается в этом коде:

[self useOptimizedDrawing:YES];

Что произойдет, если вы прокомментируете эту строку? Следующее, на что нужно обратить внимание - это код для рисования. Кроме того, метод -_redisplay отключает / повторно включает обновления экрана, обновляя геометрию и фон, пока это происходит. Все это заставило бы меня с подозрением относиться к его взаимодействию со слоями и анимацией.

...