ios - 如何:让 SKScene 访问dismiss() UIKit 方法
问题描述
是否可以在 SKScene 类中访问dismiss()?Dismiss 是 apples UIKit 提供的一种方法,这里是 Apple 关于dismiss的官方文档的链接。
class GameScene: SKScene {
}
尝试从 IBAction 示例中触发解雇:
@IBAction func dismissTapped(_ sender: Any) {
//figure out how to dismiss
}
解雇通常会像这样使用 -
dismiss(animated: true, completion: nil)
解决方案
dismiss
是 UIviewController 上的方法,而不是 SKScene 上的方法。但是,您的场景确实有一个view
属性是它的包含视图(它是 a SKView
,它是 a UIView
,它是 a UIResponder
)。您可以使用next
继承自的视图方法UIResponder
沿着响应者链向上走,直到您点击第一个视图控制器(因为UIViewController
也是 a UIResponder
):
extension UIResponder {
func firstParent<T: UIResponder>(ofType type: T.Type ) -> T? {
return next as? T ?? next.flatMap { $0.firstParent(ofType: type) }
}
}
//Use in your SKScene like so
view?.firstParent(ofType: UIViewController.self)?.dismiss(animated: true, completion: nil)
推荐阅读
- javascript - 嵌套范围内的 JavaScript 变量在范围外不会出错
- php - 如何在会话消息中显示可验证的值?
- html - 溢出:滚动在我的响应式菜单上不起作用。该怎么办?
- find - 查找文件并更改权限,忽略目录
- sapui5 - SAPUI5 获取特定子账户的所有注册用户
- javascript - 来自 fetch 的承诺没有正确解决
- python - 使用 python 到数据库的自然语言接口
- javascript - 如何使获取动态链接 JavaScript
- email - Google Suite 应用脚本电子邮件发送限制
- angular - 如何使用ionic3中的按钮隐藏/显示功能