У меня есть CABasicAnimation
, который анимирует свойство CALayer
, например. bounds.origin
. Я хочу иметь возможность наблюдать за изменением свойства со временем, но на самом деле не нашел метод, который работает на 100%.
-
Я попытался использовать KVO (наблюдение за ключом) по пути
presentationLayer
bounds.origin
. Система жалуется, что объект освобождается до того, как его наблюдатели освобождаются, что заставляет думать, что уровень представления является временным. НаблюдениеpresentationLayer.bounds.origin
в качестве ключевого пути не работает. -
Я попытался создать свойство на другом уровне и оживить его, например. объявив
@property
и сделав его@dynamic
на этом слое. Однако это новое свойство изменяется только при доступе к уровню представления (например, в конце анимации), он не обновляется во время работы анимации. -
Я использовал
needsDisplayForKey
в свойстве в # 2, который запускает обновления во время анимации, но для этих проблем:- он работает только в том случае, если
CALayer
имеет ненулевой фрейм. Поскольку этот уровень может быть CAShapeLayer или подклассом, он может иметь нулевой кадр. - похоже, что для этого слоя триггеров
setNeedsDisplay
, но поскольку я не рисую этот слой, только отслеживая изменение свойства, я не хочу, чтобы он перерисовывал.
- он работает только в том случае, если
-
Я пробовал планировать
NSTimer
, а в рамках обратного вызова таймераpresentationLayer
. Это также работает, но для этих проблем:- Таймер, вероятно, будет немного не синхронизирован с обновлением анимации.
- Поскольку изредка исходная анимация получает предварительную утилизацию с помощью другой анимации, ей сложно фактически запустить таймер при запуске анимации и только при запуске анимации.
Любые предложения? Все это будет на iPhoneOS 3.0/3.1.