Spec-Zone .ru
спецификации, руководства, описания, API

Библиотека разработчика Mac

Разработчик

Ссылка платформы SceneKit ссылка класса SCNTransaction

Опции
Развертывание Target:

На этой странице
Язык:

SCNTransaction

SCNTransaction класс определяет механизм SceneKit для пакетной обработки модификаций графика сцены в атомарные обновления. Вы используете SCNTransaction методы класса управлять анимацией, следующей из изменения animatable свойств в графике сцены и объединить наборы изменений во вложенные транзакции.

Добавление анимации с автоматической транзакцией

SceneKit создает транзакцию автоматически каждый раз, когда Вы изменяете объекты в графике сцены. Это группы транзакции любые дополнительные изменения Вы делаете из того же потока во время текущей итерации цикла выполнения того потока. Когда цикл выполнения затем выполняет итерации, SceneKit автоматически фиксирует транзакцию, атомарно применяя все изменения, внесенные во время транзакции в график сцены представления (т.е., версия графика сцены, в настоящее время выводимого на экран).

Поскольку автоматическая транзакция имеет продолжительность по умолчанию нуля, любые изменения, которые это содержит, появляются немедленно, когда SceneKit автоматически фиксирует транзакцию. При помощи setAnimationDuration: метод для изменения продолжительности Вы неявно анимируете все изменения, внесенные в animatable свойства во время транзакции. Можно использовать неявную анимацию для добавления анимации к сцене быстро и легко. Например, код в Перечислении 1 постепенно исчезает и перемещает один узел, постепенно появляется другой, перемещает и масштабирует камеру точки зрения и фокусирует центр внимания, все в единственном вторая анимация.

Перечисление 1Implicitly, анимирующее несколько изменений свойства

Swift

  • SCNTransaction.setAnimationDuration(2)
  • textNode.position = SCNVector3(x:0.0, y:-10.0, z:0.0)
  • textNode.opacity = 0.0
  • heroNode.opacity = 1.0
  • view.pointOfView = heroCamera
  • heroCamera.camera.yFov = 20.0
  • lightNode.light.spotInnerAngle = 30.0

Objective C

  • [SCNTransaction setAnimationDuration:1.0]; _textNode.position = SCNVector3Make(0.0, -10.0, 0.0); _textNode.opacity = 0.0; _heroNode.opacity = 1.0; view.pointOfView = _heroCamera; _heroCamera.camera.yFov = 20.0; _lightNode.light.spotInnerAngle = 30.0;

Создание усовершенствованных анимаций с пользовательскими транзакциями

Можно также использовать SCNTransaction методы класса создать и управлять иерархией Ваших собственных транзакций. Вложенными пользовательскими транзакциями можно сгруппировать наборы изменений графика сцены, применив различные параметры анимации к каждой группе. Используйте begin метод для создания пользовательской транзакции, вложенной в текущей операции, если Вы существуете. Используйте commit метод для окончания транзакции, применяя все изменения графика сцены, внесенные в.

Наследование


Соответствует


Оператор импорта


Swift

import SceneKit

Objective C

@import SceneKit;

Доступность


Доступный в OS X v10.8 и позже.
  • Начинает новую транзакцию для текущего потока.

    Объявление

    Swift

    class func begin()

    Objective C

    + (void)begin

    Обсуждение

    Если существует тот, новая транзакция вкладывается в текущей операции потока.

    В первый раз, когда Вы изменяете график сцены во время передачи через цикл выполнения, SceneKit автоматически создает транзакцию и делает его текущей операцией. (SceneKit фиксирует ту транзакцию, когда начинается следующая итерация циклов выполнения.) При вызове этого метода для создания пользовательской транзакции прежде, чем изменить график сцены, пользовательская транзакция становится текущей операцией.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Фиксации все изменения сделаны во время текущей операции.

    Объявление

    Swift

    class func commit()

    Objective C

    + (void)commit

    Обсуждение

    Если нет никакой текущей операции, этот метод не имеет никакого эффекта.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + начать
    + сброс

  • Применяет все изменения от текущей автоматической транзакции.

    Объявление

    Swift

    class func flush()

    Objective C

    + (void)flush

    Обсуждение

    SceneKit автоматически вызывает этот метод в конце каждого, проходят через цикл выполнения, независимо от режима цикла выполнения. Если Ваше приложение не имеет цикла выполнения, необходимо вызвать этот метод явно.

    Если текущая операция имеет какие-либо вложенные транзакции, все еще анимирующие, SceneKit ожидает для фиксации изменений текущей операции до тех завершенных транзакций.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Возвращает продолжительность, в секундах, всех анимаций в текущей операции.

    Объявление

    Swift

    class func animationDuration() -> CFTimeInterval

    Objective C

    + (CFTimeInterval)animationDuration

    Возвращаемое значение

    Продолжительность анимации, в секундах.

    Обсуждение

    Продолжительность по умолчанию является нулем для транзакций, автоматически создаваемых SceneKit, и 0.25 для анимаций Вы создаете использование begin метод.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + setAnimationDuration:

  • Устанавливает продолжительность всех анимаций в текущей операции.

    Объявление

    Swift

    class func setAnimationDuration(_ duration: CFTimeInterval)

    Objective C

    + (void)setAnimationDuration:(CFTimeInterval)duration

    Параметры

    duration

    Продолжительность анимации, в секундах.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + animationDuration

  • Возвращает функцию синхронизации, которую SceneKit использует для всех анимаций в этой группе транзакции.

    Объявление

    Swift

    class func animationTimingFunction() -> CAMediaTimingFunction?

    Objective C

    + (CAMediaTimingFunction *)animationTimingFunction

    Возвращаемое значение

    Носители, синхронизирующие функцию для анимаций транзакции.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Устанавливает функцию синхронизации, которую SceneKit использует для всех анимаций в этой группе транзакции.

    Объявление

    Swift

    class func setAnimationTimingFunction(_ function: CAMediaTimingFunction?)

    Objective C

    + (void)setAnimationTimingFunction:(CAMediaTimingFunction *)function

    Параметры

    function

    Носители, синхронизирующие функцию для анимаций транзакции.

    Обсуждение

    Носители, синхронизирующие функции, также известные как кривые анимации, определяют отношение между прошедшим временем анимации и ее эффектом на свойство. Например, kCAMediaTimingFunctionEaseInEaseOut функция создает эффект, медленно начинающийся, убыстряющийся, и затем медленно заканчивающийся.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + animationTimingFunction

  • Возвращает булево значение, указывающее, анимированы ли неявно изменения в animatable свойствах во время транзакции.

    Объявление

    Swift

    class func disableActions() -> Bool

    Objective C

    + (BOOL)disableActions

    Возвращаемое значение

    YEStrue если отключена неявная анимация; NOfalse если позволяется неявная анимация.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + setDisableActions:

  • Отключает неявную анимацию изменений в транзакции.

    Объявление

    Swift

    class func setDisableActions(_ flag: Bool)

    Objective C

    + (void)setDisableActions:(BOOL)flag

    Параметры

    flag

    YEStrue отключить неявную анимацию; NOfalse позволить неявную анимацию.

    Обсуждение

    По умолчанию любые изменения в animatable свойствах объектов в графике сцены неявно создают анимации. (Эти анимации могут не быть видимы, если Вы не используете setAnimationDuration: метод для установки ненулевой продолжительности для транзакции.) Используют этот метод для отключения неявной анимации во время транзакции.

    Отключение анимации применяется ко всем изменениям свойства в текущей операции и любых вложенных транзакциях в ней. Однако можно вызвать этот метод снова во вложенной транзакции для включения неявной анимации для той транзакции.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + disableActions

  • Устанавливает блок завершения, который SceneKit сразу выполняет после завершенных анимаций транзакции.

    Объявление

    Swift

    class func setCompletionBlock(_ block: (() -> Void)?)

    Objective C

    + (void)setCompletionBlock:(void (^)(void))block

    Параметры

    block

    Блок, который вызывает SceneKit, когда анимации текущей операции закончили играть. Блок не берет параметров и не возвращает значения.

    Обсуждение

    SceneKit выполняет блок завершения на основном потоке, как только все анимации в транзакции (и любые вложенные транзакции) закончили играть или были удалены. Если Вы не вносите изменений в график сцены, неявно создающих анимации, SceneKit выполняет блок сразу, когда фиксируется транзакция.

    После установки блока завершения его, как гарантируют, вызовут. При изменении блока завершения для транзакции предыдущий блок сразу выполняется.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Возвращает блок, ранее связанный с текущей операцией.

    Объявление

    Swift

    class func completionBlock() -> (() -> Void)?

    Objective C

    + (void (^)(void))completionBlock

    Обсуждение

    Посмотрите setCompletionBlock: поскольку описание роли завершения блокирует объект.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + setCompletionBlock:

  • Попытки получить рекурсивную спин-блокировку для обеспечения законности значений Вы получаете во время транзакции.

    Объявление

    Swift

    class func lock()

    Objective C

    + (void)lock

    Обсуждение

    Модель данных SceneKit ориентирована на многопотоковое исполнение в этом, она гарантирует, что внутренние структуры данных не будут повреждены параллельными попытками изменить их содержание от многократных потоков. Однако эта модель не гарантирует законность значений, которые Вы читаете из объектов диаграмм сцены после возврата их.

    Например, рассмотрите следующую работу:

    Swift

    • node.position = SCNVector3(x: node.position.x, y: node.position.y + 10, z: node.position.z)

    Objective C

    • _node.position = SCNVector3Make(_node.position.x, _node.position.y + 10, _node.position.z);

    Намерение этой строки состоит в том, чтобы переместить узел десятью модулями. Но если другой поток изменяет узел position свойство одновременно, новое значение позиции могло быть неожиданным. Если Ваше приложение изменяет график сцены от многократных потоков, используйте блокировку транзакции, чтобы гарантировать, чтобы Ваши модификации вступили в силу, как предназначено.

    Swift

    • SCNTransaction.lock()
    • node.position = SCNVector3(x: node.position.x, y: node.position.y + 10, z: node.position.z)
    • SCNTransaction.unlock()

    Objective C

    • [SCNTransaction lock];
    • _node.position = SCNVector3Make(_node.position.x, _node.position.y + 10, _node.position.z);
    • [SCNTransaction unlock];

    Если другой поток в настоящее время содержит блокировку на транзакции, вызывая lock не имеет никакого эффекта.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

  • Оставляет ранее полученную блокировку транзакции.

    Объявление

    Swift

    class func unlock()

    Objective C

    + (void)unlock

    Обсуждение

    Посмотрите lock метод для большего количества подробных данных о блокировке транзакции.

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + блокировка

  • Связывает произвольный объект с текущей операцией с помощью указанного ключа.

    Объявление

    Swift

    class func setValue(_ anObject: AnyObject?, forKey key: String)

    Objective C

    + (void)setValue:(id)anObject forKey:(NSString *)key

    Параметры

    anObject

    Объект связаться с текущей операцией.

    key

    Уникальная строка, идентифицирующая объект для более позднего извлечения.

    Обсуждение

    Вложенные транзакции вложили объем данных. Установка значения для ключа связывает его с текущей операцией (или самая внутренняя вложенная транзакция) только, и чтение значения для ключа перерывает вложенные транзакции (запускающийся с самого внутреннего).

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + valueForKey:

  • Возвращает объект, ранее связанный с текущей операцией с помощью указанного ключа.

    Объявление

    Swift

    class func valueForKey(_ key: String) -> AnyObject?

    Objective C

    + (id)valueForKey:(NSString *)key

    Параметры

    key

    Уникальная строка, идентифицирующая объект ранее, связалась с транзакцией.

    Возвращаемое значение

    Объект ранее связал с транзакцией (или транзакцией включения) использование указанного ключа, или nil если не могло бы быть найдено никакое значение для того ключа.

    Обсуждение

    Вложенные транзакции вложили объем данных. Установка значения для ключа связывает его с текущей операцией (или самая внутренняя вложенная транзакция) только, но чтение значения для ключа перерывает вложенные транзакции (запускающийся с самого внутреннего).

    Оператор импорта

    Objective C

    @import SceneKit;

    Swift

    import SceneKit

    Доступность

    Доступный в OS X v10.8 и позже.

    См. также

    + setValue:forKey: