SCNTransaction
Оператор импорта
Swift
import SceneKit
Objective C
@import SceneKit;
Доступность
Доступный в iOS 8.0 и позже.
SCNTransaction
класс определяет механизм SceneKit для пакетной обработки модификаций графика сцены в атомарные обновления. Вы используете SCNTransaction
методы класса управлять анимацией, следующей из изменения animatable свойств в графике сцены и объединить наборы изменений во вложенные транзакции.
Добавление анимации с автоматической транзакцией
SceneKit создает транзакцию автоматически каждый раз, когда Вы изменяете объекты в графике сцены. Это группы транзакции любые дополнительные изменения Вы делаете из того же потока во время текущей итерации цикла выполнения того потока. Когда цикл выполнения затем выполняет итерации, SceneKit автоматически фиксирует транзакцию, атомарно применяя все изменения, внесенные во время транзакции в график сцены представления (т.е., версия графика сцены, в настоящее время выводимого на экран).
Поскольку автоматическая транзакция имеет продолжительность по умолчанию нуля, любые изменения, которые это содержит, появляются немедленно, когда SceneKit автоматически фиксирует транзакцию. При помощи setAnimationDuration:
метод для изменения продолжительности Вы неявно анимируете все изменения, внесенные в animatable свойства во время транзакции. Можно использовать неявную анимацию для добавления анимации к сцене быстро и легко. Например, код в Перечислении 1 постепенно исчезает и перемещает один узел, постепенно появляется другой, перемещает и масштабирует камеру точки зрения и фокусирует центр внимания, все в единственном вторая анимация.
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
class func begin()
Objective C
+ (void)begin
Обсуждение
Если существует тот, новая транзакция вкладывается в текущей операции потока.
В первый раз, когда Вы изменяете график сцены во время передачи через цикл выполнения, SceneKit автоматически создает транзакцию и делает его текущей операцией. (SceneKit фиксирует ту транзакцию, когда начинается следующая итерация циклов выполнения.) При вызове этого метода для создания пользовательской транзакции прежде, чем изменить график сцены, пользовательская транзакция становится текущей операцией.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Фиксации все изменения сделаны во время текущей операции.
Объявление
Swift
class func commit()
Objective C
+ (void)commit
Обсуждение
Если нет никакой текущей операции, этот метод не имеет никакого эффекта.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
-
Применяет все изменения от текущей автоматической транзакции.
Объявление
Swift
class func flush()
Objective C
+ (void)flush
Обсуждение
SceneKit автоматически вызывает этот метод в конце каждого, проходят через цикл выполнения, независимо от режима цикла выполнения. Если Ваше приложение не имеет цикла выполнения, необходимо вызвать этот метод явно.
Если текущая операция имеет какие-либо вложенные транзакции, все еще анимирующие, SceneKit ожидает для фиксации изменений текущей операции до тех завершенных транзакций.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Возвращает продолжительность, в секундах, всех анимаций в текущей операции.
Объявление
Swift
class func animationDuration() -> CFTimeInterval
Objective C
+ (CFTimeInterval)animationDuration
Возвращаемое значение
Продолжительность анимации, в секундах.
Обсуждение
Продолжительность по умолчанию является нулем для транзакций, автоматически создаваемых SceneKit, и
0.25
для анимаций Вы создаете использованиеbegin
метод.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Устанавливает продолжительность всех анимаций в текущей операции.
Объявление
Swift
class func setAnimationDuration(_
duration
: CFTimeInterval)Objective C
+ (void)setAnimationDuration:(CFTimeInterval)
duration
Параметры
duration
Продолжительность анимации, в секундах.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Возвращает функцию синхронизации, которую SceneKit использует для всех анимаций в этой группе транзакции.
Объявление
Swift
class func animationTimingFunction() -> CAMediaTimingFunction?
Objective C
+ (CAMediaTimingFunction *)animationTimingFunction
Возвращаемое значение
Носители, синхронизирующие функцию для анимаций транзакции.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Устанавливает функцию синхронизации, которую SceneKit использует для всех анимаций в этой группе транзакции.
Объявление
Swift
class func setAnimationTimingFunction(_
function
: CAMediaTimingFunction?)Objective C
+ (void)setAnimationTimingFunction:(CAMediaTimingFunction *)
function
Параметры
function
Носители, синхронизирующие функцию для анимаций транзакции.
Обсуждение
Носители, синхронизирующие функции, также известные как кривые анимации, определяют отношение между прошедшим временем анимации и ее эффектом на свойство. Например,
kCAMediaTimingFunctionEaseInEaseOut
функция создает эффект, медленно начинающийся, убыстряющийся, и затем медленно заканчивающийся.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Возвращает булево значение, указывающее, анимированы ли неявно изменения в animatable свойствах во время транзакции.
Объявление
Swift
class func disableActions() -> Bool
Objective C
+ (BOOL)disableActions
Возвращаемое значение
YES
true
если отключена неявная анимация;NO
false
если позволяется неявная анимация.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Отключает неявную анимацию изменений в транзакции.
Объявление
Swift
class func setDisableActions(_
flag
: Bool)Objective C
+ (void)setDisableActions:(BOOL)
flag
Параметры
flag
YES
true
отключить неявную анимацию;NO
false
позволить неявную анимацию.Обсуждение
По умолчанию любые изменения в animatable свойствах объектов в графике сцены неявно создают анимации. (Эти анимации могут не быть видимы, если Вы не используете
setAnimationDuration:
метод для установки ненулевой продолжительности для транзакции.) Используют этот метод для отключения неявной анимации во время транзакции.Отключение анимации применяется ко всем изменениям свойства в текущей операции и любых вложенных транзакциях в ней. Однако можно вызвать этот метод снова во вложенной транзакции для включения неявной анимации для той транзакции.
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Устанавливает блок завершения, который 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
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Возвращает блок, ранее связанный с текущей операцией.
Объявление
Swift
class func completionBlock() -> (() -> Void)?
Objective C
+ (void (^)(void))completionBlock
Обсуждение
Посмотрите
setCompletionBlock:
поскольку описание роли завершения блокирует объект.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Попытки получить рекурсивную спин-блокировку для обеспечения законности значений Вы получаете во время транзакции.
Объявление
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
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Оставляет ранее полученную блокировку транзакции.
Объявление
Swift
class func unlock()
Objective C
+ (void)unlock
Обсуждение
Посмотрите
lock
метод для большего количества подробных данных о блокировке транзакции.Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Связывает произвольный объект с текущей операцией с помощью указанного ключа.
Объявление
Swift
class func setValue(_
anObject
: AnyObject?, forKeykey
: String)Objective C
+ (void)setValue:(id)
anObject
forKey:(NSString *)key
Параметры
anObject
Объект связаться с текущей операцией.
key
Уникальная строка, идентифицирующая объект для более позднего извлечения.
Обсуждение
Вложенные транзакции вложили объем данных. Установка значения для ключа связывает его с текущей операцией (или самая внутренняя вложенная транзакция) только, и чтение значения для ключа перерывает вложенные транзакции (запускающийся с самого внутреннего).
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также
-
Возвращает объект, ранее связанный с текущей операцией с помощью указанного ключа.
Объявление
Swift
class func valueForKey(_
key
: String) -> AnyObject?Objective C
+ (id)valueForKey:(NSString *)
key
Параметры
key
Уникальная строка, идентифицирующая объект ранее, связалась с транзакцией.
Возвращаемое значение
Объект ранее связал с транзакцией (или транзакцией включения) использование указанного ключа, или
nil
если не могло бы быть найдено никакое значение для того ключа.Обсуждение
Вложенные транзакции вложили объем данных. Установка значения для ключа связывает его с текущей операцией (или самая внутренняя вложенная транзакция) только, но чтение значения для ключа перерывает вложенные транзакции (запускающийся с самого внутреннего).
Оператор импорта
Objective C
@import SceneKit;
Swift
import SceneKit
Доступность
Доступный в iOS 8.0 и позже.
См. также