В частности, я хочу использовать CA для свойств типов, отличных от
и в объектах, отличных от CALayers или NSViews
Что ж, похоже, я не могу этого сделать. Что мне нужно сделать, так это [создать подкласс NSAnimation] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/AnimationGuide/Articles/TimingAnimations.html подклассифицирует NSAnimation). Это будет работать в приложении MacOS 10.4+, но не в Cocoa Touch, в котором я не могу найти никаких альтернатив, кроме использования NSTimer.
Если вы можете вносить изменения самостоятельно и класс, который вы используете, является настраиваемым, вы можете добавить в свой класс метод setProgress: (float) f и использовать CA для его анимации, а затем изменить желаемые свойства по мере необходимости как функцию от f .
Просто сделай
[[someObject animator] setValue:[NSNumber numberWithFloat:1.0] forKeyPath:@"someCustomProperty.progress"];
или, если у объекта нет аниматора, создайте правильную анимацию CAAnimation самостоятельно.
Вы этого не сделаете. Core Animation может анимировать только ключевые пути на CALayers.
Я не совсем уверен, что вы пытаетесь сделать, но если вы хотите использовать CA для других свойств, это не проблема. Вам просто нужно прописать соответствующие действия для ключевого пути. В документации Apple Core Animation есть пример с использованием CAAction. В частности, вы реализуете actionForLayer: forKey: для настройки поведения анимации по умолчанию для этого ключа, и если вы хотите сделать анимацию свойства неявно, вы реализуете runActionForKey: object: arguments:.
Что касается анимации объектов, отличных от CALayers, я действительно не понимаю. Слои - это корневой визуальный объект в Core Animation. Кроме того, на iPhone каждый UIView поддерживается на слое, я не верю, что на экране iPhone есть что-то, что не находится в слое, поэтому я не понимаю, почему вы беспокоитесь об использовании анимации на том, что не является CALayer.
Да, но если у вашего объекта нет аниматора и он не является CALayer, как запустить CAAnimation?