Как получить доступ к каждому узлу в l oop от Observer? - PullRequest
0 голосов
/ 17 апреля 2020

Когда он нажимает на кнопку, флаг flagObservation работает, и поэтому он должен удалить AllAction для каждого ringNode в l oop. Проблема в том, что Наблюдение не знает, что такое индекс RingNode. Вопрос: Как получить доступ к каждому кольцевому узлу, созданному в l oop, из Observe?

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()   //Delete action 
          } 

         }

       }

    @IBAction func pushPauseButton(_ sender: Any) {
        taylor.flag = 1
    }    
}


class Motion: NSObject{
    @objc dynamic var flag = Int() 
}

1 Ответ

0 голосов
/ 20 апреля 2020

Решение: ringNode записать в массив:

 let ringNodes = [SCNNode]() 

Набрать наблюдателя из l oop и запустить l oop в наблюдателе:

flagObservation = observe(\arViewController.taylor.flag, options: [.new]) { (vc, change) in 

  for index in 0..<ringNodes.count { 

    let ringNode = ringNodes[index] 

    ringNode.removeAllActions() 

  }
}

(Благодаря Василий Я. за чаевые)

...