Swift MKMapView在GameScene中返回零
我目前正在试验MapKit和SpriteKit,但是我遇到了一个问题。Swift MKMapView在GameScene中返回零
当我尝试转换地图坐标到我的屏幕上的一个点(在我的GameScene),我得到一个错误:Unexpectedly found nil while unwrapping an optional value
下面的代码产生错误,是一个功能(用于测试目的)当屏幕被点击时运行。 monster.position = (mapView?.convert(spawnLocation, toPointTo: view))!
monster
是在我的GameScene的顶部声明的SKSpriteNode。 spawnLocation
只是一组坐标(我检查过它们应该可以在屏幕上看到)。 mapView
声明我GameScene的,像这样的顶级:var mapView = GameViewController().map
(我相信我的问题是在这里)
察看mapView
包含值或不无结果被打印到控制台:
if (mapView != nil) {
print("not nil")
monster.position = (mapView?.convert(spawnLocation, toPointTo: view))!
}
我地图显示了当我运行应用程序,但是当上面的代码执行时没有任何反应。我认为我的问题是我目前从GameViewController访问地图的方式,但我不知道如何解决它。
澄清:我的地图我GameViewController声明,我需要从我的GameScene访问它,这样我可以在坐标转换为在一个观点。
注意:我可能只是使用了错误的转换函数。
GameViewController:
@IBOutlet var parentView: UIView!
@IBOutlet var map: MKMapView!
@IBOutlet var skview: SKView!
let locationManager = CLLocationManager()
override func viewDidLoad() {
super.viewDidLoad()
map.delegate = self
map.showsScale = false
map.showsPointsOfInterest = false
map.showsUserLocation = true
map.showsBuildings = true
map.isZoomEnabled = false
map.isScrollEnabled = false
map.isPitchEnabled = false
map.isRotateEnabled = false
locationManager.requestWhenInUseAuthorization()
if (CLLocationManager.locationServicesEnabled()) {
locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.startUpdatingLocation()
}
let region = MKCoordinateRegionMakeWithDistance((locationManager.location?.coordinate)!, 400, 400)
map.setRegion(region, animated: false)
parentView.addSubview(map)
parentView.addSubview(skview)
GIDSignIn.sharedInstance().uiDelegate = self
}
所以继续我的问题的工作后,我又看this问题(我已经试过了答案的解决方案 - 它不工作)。 我发现我的问题可能是在我试图从访问MKMapView
/GameViewController
现场不是第一现场。 当我增加了以下我的代码,它印零:
print("view controller", self.gameViewController)
我又看了看负责从第一现场,我是有问题的一个过渡的代码,我添加了一行:
let signedInTransition = SKTransition.fade(withDuration: 1)
let nextScene = GameScene(size: scene!.size)
nextScene.scaleMode = .aspectFill
nextScene.gameViewController = self.gameViewController /* ADDED THIS LINE */
scene?.view?.presentScene(nextScene, transition: signedInTransition)
原来我的问题是,我的场景实际上没有一个GameViewController
,因此
let gameViewController:GameViewController!
从未实际上包含3 ned一个值。
这样做是否有效添加当前上下文或当前控制器对象,并在其他控制器中处理它我做了同样的事但之前没有为我工作 –
@iOSGeek我不完全确定你在问什么......我上面描述的是为我工作。如果它不为你工作,提供了究竟你的问题是什么的一些更详细 –