Как я могу использовать Core Animation для интерполяции значений свойств по времени в моих собственных классах? - PullRequest
6 голосов
/ 06 сентября 2008

В частности, я хочу использовать CA для свойств типов, отличных от

  • целых и двойных числа
  • Структуры CGRect, CGPoint, CGSize и CGAffineTransform
  • CATransform3D структуры данных
  • CGColor и CGImage ссылки

и в объектах, отличных от CALayers или NSViews

Ответы [ 3 ]

1 голос
/ 12 сентября 2008

Если вы можете внести изменения самостоятельно, а используемый вами класс является пользовательским, вы можете добавить метод setProgress: (float) f к своему классу и использовать CA для его анимации, а затем изменить требуемые свойства как функция ф.

Просто сделай

[[someObject animator] setValue:[NSNumber numberWithFloat:1.0] forKeyPath:@"someCustomProperty.progress"];

или, если у объекта нет аниматора, создайте правильную CAAnimation самостоятельно.

0 голосов
/ 28 октября 2008

Я не уверен точно, что вы пытаетесь сделать, но если вы хотите использовать CA для других свойств, это не проблема. Вам просто нужно зарегистрировать соответствующие действия для ключевого пути. Пример этого можно найти в документации Apple Core Animation с использованием CAAction . В частности, вы реализуете actionForLayer: forKey: для настройки поведения по умолчанию анимации этого ключа, а если вы хотите неявно создавать анимацию свойства, вы реализуете runActionForKey: object: arguments:.

Что касается анимации объектов, отличных от CALayers, я действительно не понимаю. Слои являются корневым визуальным объектом в Core Animation. Кроме того, на iPhone каждый UIView поддерживается на слое, я не верю, что на экране iPhone есть что-то, что не находится в слое, поэтому я не понимаю, почему вы беспокоитесь об использовании анимации на чем-то, что не CALayer.

0 голосов
/ 07 сентября 2008

Ну, кажется, я не могу этого сделать. То, что я должен сделать, это [создание подклассов NSAnimation] (https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/AnimationGuide/Articles/TimingAnimations.html создание подклассов NSAnimation). Это будет работать в приложении MacOS 10.4+, но не в Cocoa Touch, в котором я не могу найти никаких альтернатив, кроме использования NSTimer.

...