如何从Observer循环访问每个节点?

问题描述 投票:0回答:1

单击按钮时,flagObservation起作用,因此它应该为循环中的每个ringNode移除AllAction。问题是:观察不知道什么是ringNode索引。问题:如何访问从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()   //Delete action 
          } 

         }

       }

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


class Motion: NSObject{
    @objc dynamic var flag = Int() 
}
swift scenekit
1个回答
0
投票

解决方案:ringNode写入数组:

 let ringNodes = [SCNNode]() 

观察者从循环中取出,并在观察者中运行循环:

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

  for index in 0..<ringNodes.count { 

    let ringNode = ringNodes[index] 

    ringNode.removeAllActions() 

  }
}

(感谢Vasilii Ya。给小费)

© www.soinside.com 2019 - 2024. All rights reserved.