Как из Observer получить доступ к каждому индексу ringNode в цикле?
При нажатии на кнопку срабатывает flagObservation, он должен сделать removeAllAction для каждой ringNode в цикле в том положении в котором они двигались, без пересоздания движения заново. Проблема что observe не в курсе какой именно ringNode.removeAllActions() остановить. Вопрос: Как получить доступ из observe для каждого ringNode в цикле?
import ARKit
import SceneKit
import UIKit
final class arViewController: NibViewController<arContentView>{
@objc let taylor = Motion()
var flagObservation: NSKeyValueObservation?
func createAndMove(){
switch CreateSomeThihgs{
case .first, .second:
for index in 0..<Array.count {
...
let ringNode = SCNNode(geometry: geometry)
...
ringNode.runAction(SCNAction.repeatForever(...) //Запускаем движение
flagObserve = observe(\arViewController.taylor.flag, options:[.new]) { (vc, change) in
ringNode.removeAllActions() //Удаляем движение }
}
}
@IBAction func pushPauseButton(_ sender: Any) {
taylor.flag = 1
}
}
class Motion: NSObject{
@objc dynamic var flag = Int() }
Ответы (1 шт):
Автор решения: lera
→ Ссылка
Решение: ringNode записать в массив:
let ringNodes = [SCNNode]()
Наблюдателя вынести из цикла, и запустить цикл внутри наблюдателя для каждого ringNode:
flagObservation = observe(\arViewController.taylor.flag, options: [.new]) { (vc, change) in
for index in 0..<ringNodes.count {
let ringNode = ringNodes[index]
ringNode.removeAllActions()
}
}
(Спасибо Васе Я. за подсказку)