如何指示使用 UIKit 从 SKScene 创建的视图?

2023-12-14

我有一个名为“MainScene.swift”的 SKScene 文件,并在其上创建了一个按钮,供用户跳转到另一个页面。另一个页面不是由 SpriteKit 创建的,而是由 UIKit 创建的。这种情况下如何指明目标页面并编写代码呢?

如果我使用 SpriteKit 创建两个页面,那么当跳转到另一个场景时,我通常会这样做。

override func viewDidLoad() {
    super.viewDidLoad()

    let scene = MainScene(size: CGSize(width: 750, height: 1334))
    let skView = self.view as! SKView

    scene.scaleMode = .AspectFit
    skView.presentScene(scene)
}

当我在使用 UIKit 创建的场景上执行相同的操作时,在“身份”列中键入情节提要 ID,然后编写如下代码;我只知道使用故事板的方法。

class ViewController: UIViewController {
    @IBAction func gotoNewPage(sender: AnyObject) {
        let nextVC = self.storyboard?.instantiateViewControllerWithIdentifier("newPage")
    presentViewController(nextVC!, animated: false, completion: nil)    
    }
}

但是,当在 SKScene 和 UIKit 创建的场景之间尝试相同的操作时,我不知道如何从前一个场景中指定后者;我不坚持使用故事板。如果有什么简单的方法请告诉我。先感谢您。


这听起来像是委托模式的工作。 为LevelScene添加协议;

// LevelScene.swift
protocol LevelScene : class {
    var gameDelegate: GameDelegate? { get set }
}

添加GameDelegate协议;

// GameDelegate.swift
protocol GameDelegate : class {
    func gameOver()
}

在 mainScene 中添加协议引用并创建一个名为 gameDelegate 的属性;

class MainScene: SKScene, LevelScene {
    weak var gameDelegate: GameDelegate?
}

在您的 GameViewController 中添加协议引用并实现所需的协议函数 - 在本例中,它称为 gameOver 并像往常一样连接到您的 UIKit 视图;

class GameViewController: UIViewController, GameDelegate {
    func gameOver() {
        self.performSegue(withIdentifier: ExitGameSegueKey, sender: self)
    }
}

呈现场景时将delegate设置为gameViewController;

scene.gameDelegate = self

然后在mainScene中需要时调用委托函数;

self.gameDelegate?.gameOver()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指示使用 UIKit 从 SKScene 创建的视图? 的相关文章

  • 如何在 Swift 中生成随机数?

    我意识到 Swift 书提供了随机数生成器的实现 最佳实践是复制并粘贴此实现吗 或者有一个库可以做到这一点 我们现在可以使用吗 斯威夫特 4 2 Xcode 10 附带的 Swift 4 2 为许多数据类型引入了新的易于使用的随机函数 您只
  • 如何垂直对齐 UICollectionView 中的 UICollectionViewCells?

    我在水平滚动时有不同高度的单元格UICollectionView似乎垂直均匀地分布单元格 在单元格之间留下空白空间 我想将它们顶部对齐 并在每列的底部有可变的空白空间 我将提供的 UICollectionViewFlowLayout 扩展到
  • 更改 UIView 的变换不会影响约束

    在 iOS 11 中 更改 UIView 的变换属性 例如缩放 不会影响绑定到该视图的约束 在 iOS 10 中一切都按预期工作 我有代码 import UIKit class TestViewController UIViewContro
  • 智能排序 Localized.strings 文件

    In my Localizable Strings我尝试按字母顺序排列所有对 是否可以按字母顺序重新排序我的Localizable strings 也许使用 genstring 或特殊的 bash 脚本 在这里我还有额外的要求需要完成 1
  • NSAttributedString - 获取字体属性

    我需要获取有关我的属性字符串的信息 但不知道如何获取 我得到这本词典 2013 11 04 18 06 10 628 App 1895 60b NSColor UIDeviceWhiteColorSpace 0 3 1 NSFont
  • 收到 fcm 推送通知时设置应用程序徽章

    我正在使用 FCM 进行云消息传递 当我在后台和前台应用程序状态下收到来自服务器的推送通知时 我想添加应用程序徽章 我缺少什么 主要问题是根据推送通知添加 更新 删除应用程序徽章 我可以接收和处理推送消息 我在这个问题上花了 3 天 请帮帮
  • 是否可以使用 AWS AppSync 构建离线优先的移动应用程序?

    我想使用 AWS AppSync 进行移动开发 Android iOS 但我不确定其离线功能 根据文档 数据将在离线时访问 并在客户端再次上线时自动同步 但我找不到任何有关应用程序客户端在使用 AppSync 创建和修改离线数据之前是否需要
  • Swift 中的“is”关键字

    据我所知 似乎共识是is在 Swift 关键字中是同义词isKindOfClass method 但是 我在执行以下操作时遇到困难 inside of a method in UITabViewController check if the
  • 如何通过触摸按钮在 swift 2 中播放 m4a 文件?

    当我触摸按钮时 如何播放音频文件 我在网上找不到任何东西 因为它都是 swift 1 我想要音频代码original功能 import UIKit import AVFoundation class ViewController UIVie
  • Xcode 6 无法在 Swift 中自动完成

    我正在尝试导入各种库 但我不记得它们的确切名称 很遗憾Xcode6 使用swift 不会像中那样自动完成它们Xcode5 使用objective c 例如 ALAssetsLibrary MPMediaPlayer etc 我被迫用谷歌搜索
  • Cordova - 已弃用尝试访问非导航器对象上的属性“userAgent”

    我正在尝试让我的 Cordova iPhone 应用程序在 iOS 8 1 中运行 在 7 中工作正常 从 8 开始出现以下错误 Deprecated attempt to access property userAgent on a no
  • 使用 Firebase/Analytics pod 时 SwiftUI 预览不起作用

    似乎在将 Xcode 12 更新到 beta 5 后 使用 Firebase Analytics pod 时 SwiftUI 预览不再工作 预览失败并出现错误 linker command failed with exit code 1 u
  • Spotify:使用网络 API 登录不接受重定向 URL

    我正在尝试使用 Web API 登录 Spotify 因为我不需要会话对象 在我的授权方法中 我需要传入重定向 url 但 GET 请求中不接受 iOS 重定向 url 的格式化方式 func authorize create the ur
  • xcodebuild 错误 - SecKey API 返回:-25308

    我在尝试构建 iOS 应用程序时收到以下错误 此错误仅在构建发布配置时发生 另外 我使用 CocoaPods 作为第三方依赖项 这些构建通过 SSH 在 Jenkins 上运行 SecKey API returned 25308 null
  • 在 iOS 中将一个或多个格式化程序与页面渲染器一起使用

    有没有人尝试过使用多个格式化程序 UIViewPrintFormatter UIMarkupTextPrintFormatter UISimpleTextPrintFormatter 与页面渲染器 UIPrintPageRenderer 打
  • 如何在按回车键时以编程方式关闭 iOS 键盘

    我创建了一个UITextField以编程方式制作UITextFieldviewController 的属性 我需要通过回车和触摸屏幕来关闭键盘 我能够让屏幕触摸关闭 但按回车键不起作用 我已经了解了如何使用故事板以及通过分配和初始化来做到这
  • 为什么NWPathMonitor状态总是满足?

    当没有连接时 我从 URL 会话中收到一条错误消息 指出请求超时 我正在使用网络协议来事先检查连接情况 但显然当我在内部调用它时这不起作用viewDidLoad static func startUpdateProcess let moni
  • 如何根据 UITableViewCell 中的内容调整 UICollectionView 的水平高度

    我正在尝试放置一个UICollectionView in a UITableViewCell 我想在中显示评论UICollectionViewCells 与分页 注释中可能不止一行 所以我想调整大小UICollectionView如果注释标
  • 内联 YouTube 视频在 iOS 上的 cordova 应用程序中不起作用

    我用 cordova 开发了一个移动应用程序 我确实需要能够播放内联 YouTube 视频 我尝试了一段时间来解决它 我设置了属性playsinline to 1在 YouTube iframe API 中 I put
  • iPhone 和服务器上的 3DES 加密不同

    我有以下代码用于加密发送到服务器的请求 服务器上的解码由 NET 完成 在 iPhone 上 我使用带有以下代码的安全框架 NSString doCipher NSString plainText CCOperation encryptOr

随机推荐