【发布时间】:2015-10-16 15:04:37
【问题描述】:
我正在以编程方式将UIView 添加到SKScene。在这个UIView 中,我有一个按钮可以触发SKScene 中的命令。我该怎么做呢?我的代码抛出异常。或者这只是不干净的编程?
class LevelAchievedView: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.opaque = false
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func drawRect(rect: CGRect) {
let replayButton = UIButton()
replayButton.setTitle("Replay?", forState: UIControlState.Normal)
replayButton.setTitleColor(UIColor.greenColor(), forState: UIControlState.Normal)
replayButton.titleLabel!.font = UIFont(name: "HelveticaNeue-Light", size: 30)
replayButton.addTarget(self.superview, action: "returnToStart", forControlEvents: .TouchUpInside)
replayButton.frame.origin = CGPointMake(10, 10)
self.addSubview(replayButton)
}
看来我搞砸了replayButton.addTarget(self.superview...,我想我不能在这种情况下使用self.superview,尽管我在SKScene 中有func returnToStart()。我错过了什么?
抛出的异常:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SKView returnToStart]: unrecognized selector sent to instance 0x7ff10980fc00'
【问题讨论】:
-
我认为你在
SKScene类中创建了returnToStart。但是self.superview不是SKScene,仅仅是因为SKScene不是UIView的子类。您的代码尝试在didMoveToView(view: UIView)收到的UIView上执行returnToStart。也不是returnToStart!=returnToStart:。 -
是的,我在我的 SKScene 类中创建了 returnToStart。我可以从 UIView 访问 SKScene 功能吗?
-
我发布了一个解决方案。
标签: ios swift uiview uibutton skscene