我对Swift还是很陌生,我正为这个问题而苦苦挣扎。我想使用rgl::planes3d
将squareImage
的大小和点传递到项目中的另一个swift文件。
视图控制器:
setSquareRec
课程:
class ViewController: UIViewController, SceneDelegate {
@IBOutlet var squareImage: UIImageView!
var scene = Scene()
func setSquareRec() {
scene.x = Int(squareImage.bounds.minX)
scene.y = Int(squareImage.bounds.minY)
scene.width = Int(squareImage.bounds.width)
scene.height = Int(squareImage.bounds.height)
}
...
}
它在函数protocol SceneDelegate{
func setSquareRec()
}
class Scene: SKScene {
var width = 0
var height = 0
var x = 0
var y = 0
...
let ARViewController = ViewController()
ARViewController.setSquareRec()
}
的第一行(Thread 5: Fatal error: Unexpectedly found nil while unwrapping an Optional value
)中给我错误scene.width = Int(sqareImage.bounds.minX)
怎么可能没有价值呢?以及如何将其传递给另一个班级?我看了这么多解决方案,但没有一个起作用,或者我不明白。
答案 0 :(得分:1)
您使用let ARViewController = ViewController()
实例化视图控制器。
尝试从情节提要中对其进行充气。
随时询问是否不清楚。
答案 1 :(得分:1)
实际上,您使用委托的方式是错误的,您没有使用委托itselg。请查看下面的方法。
import UIKit
class ViewController: UIViewController, SceneDelegate {
@IBOutlet var squareImage: UIImageView!
var scene = Scene()
override func viewDidLoad() {
super.viewDidLoad()
//set delegate for scene as this delegate
scene.sceneDelegate = self
}
func setSquareRec() {
scene.x = Int(squareImage.bounds.minX)
scene.y = Int(squareImage.bounds.minY)
scene.width = Int(squareImage.bounds.width)
scene.height = Int(squareImage.bounds.height)
}
}
protocol SceneDelegate{
func setSquareRec()
}
class Scene: SKScene {
var width = 0
var height = 0
var x = 0
var y = 0
var sceneDelegate: SceneDelegate?
...
//call this delegate method like this
//This will call the setSquareRec method to any class who is set as delegate
sceneDelegate.setSquareRec()
...
}
未经测试的亲切测试,如有任何问题,请通知我