Как анимировать прокрутку и масштабирование? - PullRequest
4 голосов
/ 08 июля 2011

У меня есть собственное представление в моем приложении, которое зашито слоями и встроено в NSScrollView.Я разрешаю пользователю увеличивать масштаб (что достигается увеличением размера моего пользовательского представления).Однако у меня возникают проблемы с увеличением масштаба произвольной точки, поскольку NSScrollView продолжает мешать и заставляет вид перепрыгивать (обычно к его началу), прежде чем я указываю его на новую точку прокрутки.Я действительно хотел бы использовать CAScrollLayer, так как я знаю, что я определенно смогу получить правильное масштабирование с ним и сделать его плавным, но тогда я потеряю все встроенные средства прокрутки.

Есть ли способиспользовать CAScrollLayer в пределах NSScrollView, возможно, поддерживая NSClipView?Если нет, то какой цели на самом деле служит CAScrollLayer?Можно ли при другом подходе изменить размер моего вида и точку прокрутки атомарно и получить эту анимацию?

Короче говоря, CAScrollLayer полностью бесполезен или в основном бесполезен?

Обновление

Мой внутренний вид стал меньше прыгать, создав подкласс CALayer для отображения содержимого моего представления.Вместо определения размеров с ограничениями макета, он имеет размер переопределения -resizeWithOldSuperlayerSize:.Я все еще не могу изменить размер кадра и происхождение моего вида одновременно и получить плавную анимацию.Чтобы получить представление о том, что я ищу, откройте изображение в режиме предварительного просмотра и увеличьте или уменьшите масштаб.Он плавно приближается к центру изображения.

1 Ответ

0 голосов
/ 14 мая 2012

В пределе вы можете использовать вместо NSScroller;таким образом, вы сможете использовать CAScrollLayer, если это ваша предпочтительная реализация.

Обратите внимание, что в некоторых (более старых) версиях Mac OS X NSScroller имеет ошибку, которая вызывает его для вызова Appleзакрытый метод на содержащем его представлении.Вы узнаете, произойдет ли это, потому что вы получите исключение, если ваше пользовательское представление не отвечает на метод, начинающийся с '_'.

...