【发布时间】:2018-03-30 14:39:58
【问题描述】:
现在我正在试验 SceneKit DebugOptions。 我正在尝试使用 Popover ViewController 中的开关控制器实时更新/显示 Scenekits 调试选项。
我已经尝试了很多东西,比如 UserDefaults、Delegation 和 Protocols,但我还是无法实时看到结果,每次我必须杀死应用程序并重新启动它才能看到结果。
所以,如果有人能回答我的问题,我会很高兴:D
我添加到我的 MainVC 的扩展程序
extension ViewController: UIPopoverPresentationControllerDelegate, DebugOptions {
func wireFrameEnabled(enabled: Bool) {
if enabled == true {
print(enabled)
}
}
func showCameraEnabled(enabled: Bool) {
}
func showAllDebugOptions(enabled: Bool) {
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
guard let popoverController = segue.destination.popoverPresentationController, let button = sender as? UIButton else { return }
popoverController.delegate = self
popoverController.sourceRect = button.bounds
let debugMenuVC = popoverController.presentedViewController as! DebugMenuVC
debugMenuVC.delegate? = self
}
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return .none
}
}
协议
protocol DebugOptions {
func wireFrameEnabled(enabled: Bool)
func showCameraEnabled(enabled: Bool)
func showAllDebugOptions(enabled: Bool)
}
DebugMenuVC
class DebugMenuVC: UIViewController {
@IBOutlet weak var bgView: UIView!
@IBOutlet weak var showWireFrameSwitch: UISwitch!
@IBOutlet weak var showCameraSwitch: UISwitch!
@IBOutlet weak var showAllSwitch: UISwitch!
var delegate: DebugOptions?
override func viewWillLayoutSubviews() {
preferredContentSize = CGSize(width: 150, height: 300)
}
override func viewDidLoad() {
super.viewDidLoad()
buttonCheck()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
}
@IBAction func aSwitchBtnWasPressed( _ sender: UISwitch ) {
if (sender.tag == 0) && (sender.isOn == true) {
userDefaults.set(true, forKey: SHOW_WIRE_FRAME)
delegate?.wireFrameEnabled(enabled: true)
} else if (sender.tag == 0) && (sender.isOn == false) {
userDefaults.set(false, forKey: SHOW_WIRE_FRAME)
delegate?.wireFrameEnabled(enabled: false)
}
}
func buttonCheck() {
if userDefaults.bool(forKey: SHOW_WIRE_FRAME) == true{
showWireFrameSwitch.isOn = true
} else {
showWireFrameSwitch.isOn = false
}
}
}
【问题讨论】:
-
向我们展示您尝试过的代理方式,它适合您的情况
-
@Sh_Khan 我更新了我的文章/问题
-
试图在弹出窗口中打印委托以验证它在 delegate?.wireFrameEnabled(enabled: true) 和 delegate?.wireFrameEnabled(enabled: false )
-
问题是,在 MainVieController 中没有调用委托!
标签: swift debugging uiviewcontroller scenekit switchcontrol