Получить размер расширяющегося круга в CABasicAnimation в любой момент времени - PullRequest
1 голос
/ 13 апреля 2011

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

Для примера того, какреализована анимация расширения круга, это вариант реализации, показанный в методе addGrowingCircleAtPoint:(CGPoint)point в ответе на вопрос о расширении рендера iPhone Quartz2D .

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

Обновление:

Я пробовал несколько свойств на уровне представления, включая преобразование, которое никогда не былоКажется, меняются все значения, всегда одинаковые, независимо от того, какой размер круга в данный момент проверяется.

Ответы [ 2 ]

2 голосов
/ 14 апреля 2011

Хорошо, вот как вы можете получить текущее состояние анимации во время ее анимации.

Пока Роб был близко, он пропустил две части ключевой информации.

Сначала из layer.presentationLayer.subLayers вы должны получить слой, на котором вы анимируете, который для меня является единственным доступным подслоями.

Во-вторых, из этого подслоя вы не можете просто получить прямой доступ к преобразованию, вы должны сделать это с помощью valueForKeyPath, чтобы получить transform.scale.x. Я использовал х, потому что это круг, а х и у одинаковы.

Затем я использую это для вычисления размера круга во время на основе значений, использованных для создания Дуги.

0 голосов
/ 13 апреля 2011

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

То, что вы хотите, это layer.presentationLayer.transform.См. CALayer документы для получения подробной информации о презентацииLayer.Также см. Базовая архитектура рендеринга анимации .

...