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

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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
1 728
3

Ответы 3

Что ж, похоже, я не могу этого сделать. Что мне нужно сделать, так это [создать подкласс 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 самостоятельно.

Да, но если у вашего объекта нет аниматора и он не является CALayer, как запустить CAAnimation?

dmaclach 14.07.2011 21:25

Вы этого не сделаете. Core Animation может анимировать только ключевые пути на CALayers.

millenomi 15.07.2011 19:38

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

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

Другие вопросы по теме