SCNAnimatable
SCNAnimatable
протокол определяет интерфейс для присоединения анимаций к узлам, конфигурациям, материалам и другим объектам SceneKit.
SceneKit использует ту же архитектуру в качестве Базовой платформы Анимации, позволяя Вам анимировать изменения свойства неявно или явно. Для неявной анимации используйте SCNTransaction
класс для быстрого создания простых анимаций с очень небольшим количеством кода. Для более сложных анимаций явно создайте CAAnimation
объекты и использование методы в SCNAnimatable
протокол для присоединения их к SceneKit возражает, что Вы хотите анимировать. Вы также используете методы в этом протоколе для управления любыми анимациями, уже присоединенными к объекту SceneKit.
Например, создание узла вращаться постоянно столько, сколько это появляется в графике сцены, требует явно создания повторяющейся анимации. Следующий код создает такую анимацию и присоединяет ее к узлу:
Swift
let rotationAnimation = CABasicAnimation(keyPath: "rotation")
// Animate one complete revolution around the node's Y axis.
rotationAnimation.toValue = NSValue(SCNVector4: SCNVector4(x: 0, y: 1, z: 0, w: 2 * CGFloat(M_PI)))
rotationAnimation.duration = 10.0 // One revolution in ten seconds.
rotationAnimation.repeatCount = Float.infinity // Repeat the animation forever.
node.addAnimation(rotationAnimation, forKey: nil) // Attach the animation to the node to start it.
Objective C
CABasicAnimation *rotationAnimation = [CABasicAnimation animationWithKeyPath:@"rotation"];
// Animate one complete revolution around the node's Y axis.
rotationAnimation.toValue = [NSValue valueWithSCNVector4:SCNVector4Make(0, 1, 0, M_PI * 2)];
rotationAnimation.duration = 10.0; // One revolution in ten seconds.
rotationAnimation.repeatCount = FLT_MAX; // Repeat the animation forever.
[node addAnimation:rotationAnimation forKey:nil]; // Attach the animation to the node to start it.
Наследование
Не применимый
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в OS X v10.8 и позже.
-
Добавляет объект Animation для указанного ключа. (требуемый)
Объявление
Swift
func addAnimation(_
animation
: CAAnimation, forKeykey
: String?)Objective C
- (void)addAnimation:(CAAnimation *)
animation
forKey:(NSString *)key
Параметры
animation
Объект Animation, который будет добавлен.
key
Строка, идентифицирующая анимацию для более позднего извлечения. Можно передать
nil
если Вы не должны ссылаться на анимацию позже.Обсуждение
Недавно добавленные анимации начинают выполняться после того, как текущий цикл цикла выполнения заканчивается.
SceneKit не определяет требований для содержания
key
параметр — это должно только быть уникальным среди ключей для других анимаций, которые Вы добавляете. Если Вы добавляете анимацию с существующим ключом, этот метод перезаписывает существующую анимацию.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
animationForKey (_:) - animationForKey:
ТребуемыйВозвращает анимацию с указанным ключом. (требуемый)
Объявление
Swift
func animationForKey(_
key
: String) -> CAAnimation?Objective C
- (CAAnimation *)animationForKey:(NSString *)
key
Параметры
key
Строка, идентифицирующая ранее добавленную анимацию.
Возвращаемое значение
Объект Animation, соответствующий ключ, или
nil
если не существует никакая такая анимация.Обсуждение
Попытка изменить любые свойства возвращенного объекта приводит к неопределенному поведению.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
animationKeys () - animationKeys
ТребуемыйВозвращает массив, содержащий ключи всех анимаций, в настоящее время присоединяемых к объекту. (требуемый)
Возвращаемое значение
Массив, содержащий все ключи, для которых анимации присоединены к объекту или пустому массиву, при отсутствии присоединенных анимаций.
Обсуждение
Упорядочивание анимации вводит возвращенный массив, произвольно.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
removeAllAnimations () - removeAllAnimations
ТребуемыйУдаляет все анимации, в настоящее время присоединяемые к объекту. (требуемый)
Объявление
Swift
func removeAllAnimations()
Objective C
- (void)removeAllAnimations
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Удаляет анимацию, присоединенную к объекту с указанным ключом. (требуемый)
Объявление
Swift
func removeAnimationForKey(_
key
: String)Objective C
- (void)removeAnimationForKey:(NSString *)
key
Параметры
key
Строка, идентифицирующая присоединенную анимацию для удаления.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.8 и позже.
-
Удаляет анимацию, присоединенную к объекту с указанным ключом, гладко переходящим из эффекта анимации. (требуемый)
Объявление
Swift
func removeAnimationForKey(_
key
: String, fadeOutDurationduration
: CGFloat)Параметры
key
Строка, идентифицирующая присоединенную анимацию для удаления.
duration
Продолжительность для перехода из эффекта анимации, прежде чем это будет удалено.
Обсуждение
Используйте этот метод для создания плавных переходов между эффектами многократных анимаций. Например, геометрия, загруженная из файла сцены для игрового символа, возможно, связала анимации для действий проигрывателя, таких как обход и переход. Когда проигрыватель приземляется от перехода, Вы удаляете анимацию перехода, таким образом, символ продолжает идти. Если Вы используете
removeAnimationForKey:
метод для удаления анимации перехода SceneKit резко переключается от текущего кадра анимации перехода к текущему кадру анимации обхода. Если Вы используетеremoveAnimationForKey:fadeOutDuration:
метод вместо этого, SceneKit играет обе анимации сразу во время той продолжительности и интерполирует позиции вершины от одной анимации до другого, создавая плавный переход.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.10 и позже.
-
Приостанавливает анимацию, присоединенную к объекту с указанным ключом. (требуемый)
Объявление
Swift
func pauseAnimationForKey(_
key
: String)Objective C
- (void)pauseAnimationForKey:(NSString *)
key
Параметры
key
Строка, идентифицирующая присоединенную анимацию.
Обсуждение
Если никакая анимация не присоединена к объекту с указанным ключом, этот метод не имеет никакого эффекта.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.9 и позже.
-
Возобновляет ранее приостановленную анимацию, присоединенную к объекту с указанным ключом. (требуемый)
Объявление
Swift
func resumeAnimationForKey(_
key
: String)Objective C
- (void)resumeAnimationForKey:(NSString *)
key
Параметры
key
Строка, идентифицирующая присоединенную анимацию.
Обсуждение
Этот метод не имеет никакого эффекта, если никакая анимация не присоединена к объекту с указанным ключом или если в настоящее время не приостанавливается указанная анимация.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.9 и позже.
-
Возвращает булево значение, указывающее, приостанавливается ли анимация, присоединенная к объекту с указанным ключом. (требуемый)
Объявление
Swift
func isAnimationForKeyPaused(_
key
: String) -> BoolObjective C
- (BOOL)isAnimationForKeyPaused:(NSString *)
key
Параметры
key
Строка, идентифицирующая присоединенную анимацию.
Возвращаемое значение
YES
true
если приостанавливается указанная анимация.NO
false
если анимация работает, или никакая анимация не присоединена к объекту с тем ключом.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в OS X v10.9 и позже.