Ответ
Да, это возможно с помощью инструментов Xcode.
1. Debug View Hierarchy (Визуальная инспекция): Нажмите Cmd + Shift + D во время выполнения анимации. Этот инструмент "заморозит" интерфейс и покажет иерархию представлений в их текущем, промежуточном состоянии.
2. Использование LLDB для доступа к слою презентации: Во время паузы на точке останова (breakpoint) можно запросить у Core Animation текущие кадры анимации.
-
Каждое анимируемое свойство (
frame,opacity,transform) имеет два слоя:model layer— конечное значение анимации.presentation layer— текущее значение на экране.
Команды в консоли LLDB:
// Получить текущий frame анимируемого view (lldb) po myView.layer.presentation()?.frame // Проверить, анимируется ли свойство прямо сейчас (lldb) po myView.layer.animationKeys()
3. Практический пример в коде:
UIView.animate(withDuration: 2.0) {
myView.center.y += 200
}
// Установите точку останова здесь и через 1 секунду выполните в LLDB:
// (lldb) po myView.layer.presentation()?.frame
// Вы увидите промежуточное значение Y (например, ~100).
4. Отладка через кнопку паузы (Pause): Просто нажмите кнопку Pause в дебаггере Xcode во время анимации — выполнение прервется, и вы сможете исследовать состояние.
Ответ 18+ 🔞
А, ну это же классика, блядь! Сидишь, смотришь, как твой вьюхер по экрану ползёт, и думаешь: «А где он, сука, сейчас находится? В какой конкретно точке между точкой А и точкой Б?». Чувство, будто пытаешься поймать муху голыми руками, ёпта.
Так вот, слушай сюда, это решается проще, чем кажется, но с парой трюков, от которых мозг может слегка ебнуться.
1. Debug View Hierarchy — наш спасительный «стоп-кадр». Ты просто во время анимации жмёшь Cmd + Shift + D. Весь интерфейс, сука, замирает, как вкопанный. Xcode вываливает тебе всю иерархию вьюх в том самом состоянии, в котором они были в момент нажатия. Это как поставить жизнь на паузу и начать ковыряться в кишках. Охуенно удобно.
2. LLDB и его волшебный presentation layer.
Вот тут начинается магия, блядь. У Core Animation для каждого анимируемого свойства есть две сущности: model layer (это конечная цель, куда всё должно приехать) и presentation layer (это его текущее, прямо сейчас на экране, промежуточное состояние, пока он едет).
Ставишь брейкпоинт прямо в середине анимации, паузишься и в консоли пишешь:
(lldb) po myBeautifulView.layer.presentation()?.frame
И он тебе, сука, выплюнет текущие координаты! Не те, которые будут, а те, которые есть прямо сейчас. Можно ещё спросить:
(lldb) po myBeautifulView.layer.animationKeys()
Чтобы понять, анимируется ли оно вообще или просто стоит, как пень.
3. Пример из жизни, чтобы не быть голословным.
UIView.animate(withDuration: 2.0) {
myView.center.y += 200 // Поехали вниз на 200 пунктов за 2 секунды
}
// Ставишь сюда брейкпоинт, ждёшь секундочку, паузишь.
// И в консоли LLDB:
// (lldb) po myView.layer.presentation()?.frame
// Увидишь что-то вроде (50.0, 100.0, 100.0, 100.0) — это он на полпути!
4. Просто кнопка «Пауза». Да не заморачивайся ты иногда! Жми на эту самую большую кнопку паузы в дебаггере, пока анимация идёт. Всё встанет. И ты можешь спокойно в инспекторе переменных смотреть, что с твоими вьюхами происходит. Иногда проще не бывает, в рот меня чих-пых.
В общем, не надо гадать на кофейной гуще. Xcode даёт тебе все инструменты, чтобы залезть анимации под капот и посмотреть, что там творится в любой момент. Главное — знать, куда тыкать.