单击按钮时,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()
}
解决方案: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。给小费)