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.0heroNode.opacity = 1.0view.pointOfView = heroCameraheroCamera.camera.yFov = 20.0lightNode.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() -> CFTimeIntervalObjective 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() -> BoolObjective C
+ (BOOL)disableActionsВозвращаемое значение
YEStrueесли отключена неявная анимация;NOfalseесли позволяется неявная анимация.Оператор импорта
Objective C
@import SceneKit;Swift
import SceneKitДоступность
Доступный в iOS 8.0 и позже.
См. также
-
Отключает неявную анимацию изменений в транзакции.
Объявление
Swift
class func setDisableActions(_flag: Bool)Objective C
+ (void)setDisableActions:(BOOL)flagПараметры
flagYEStrueотключить неявную анимацию;NOfalseпозволить неявную анимацию.Обсуждение
По умолчанию любые изменения в 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)anObjectforKey:(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 и позже.
См. также
