ios - Peek 和 Pop 函数 SpriteKit

标签 ios swift sprite-kit 3dtouch

我在 `SKScene' 中有一个菜单。我正在尝试将 Peek 和 Pop 功能集成到其中。我有多种可能的选择,所以我的问题是如何确定哪个被强制触摸。

这是我的代码:

import SpriteKit
import UIKit

class Menu: SKScene, UIViewControllerPreviewingDelegate {

//SETUP Menu


 func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? {
        return UIViewController()
    }

    //POP
    func previewingContext(_ previewingContext: UIViewControllerPreviewing, commit viewControllerToCommit: UIViewController) {
        return
    }

}

GameViewController.swift:

import UIKit
import SpriteKit

class GameViewController: UIViewController {


    override func viewDidLoad() {
    super.viewDidLoad()

    if let scene = GameScene(fileNamed:"GameScene") {
       if self.traitCollection.forceTouchCapability == .available {
          registerForPreviewing(with: scene as! UIViewControllerPreviewingDelegate, sourceView: scene.view!)
          }
         }

       // Move to Menu

 }
}

我很确定我应该在 sourceView 字段中传递信息。但由于这是在 GameViewController 中,我不知道该怎么做。而且我不知道如何在菜单中执行此操作,我应该将这段代码放在哪里?

 if let scene = GameScene(fileNamed:"GameScene") {
            if self.traitCollection.forceTouchCapability == .available {
                registerForPreviewing(with: scene as! UIViewControllerPreviewingDelegate, sourceView: ButtonPressed)
            }
        }

最佳答案

您将无法像您尝试的那样在 SKScene 或 SKSpriteNode 菜单中使用 Peek 和 Pop,我试图在我的一款游戏中做同样的事情。

Peek 和 Pop 仅适用于 UIKit,特别是它允许您预览 (Peek) 而不是打开 (Pop) UIViewControllers。

在 SpriteKit 中你通常只有 1 个 ViewController,GameViewController。 GameViewController 应该只处理您的 SKScene 演示,您的实际 UI 是/应该直接在相关 SKScenes 中使用 SpriteKit API(例如 SKLabelNodes、SKSpriteNodes 等)来完成。因此,您并没有真正使用 UIKit,也没有多少可以使用 Peek 和 Pop 进行预览。

这有一些异常(exception),所以这取决于您制作的游戏类型。例如,在我的一个游戏中,我将 UICollectionViewController 用于我的级别选择菜单(40 个级别),因为它们非常适合该场景(单元格重用、平滑滚动等)。因为该菜单是使用 UIKit 制作的,所以我可以在您强制触摸单元格时注册查看和弹出。我有另一个带有一些 UILabel、UIImageView 等的 UIViewController,我专门用于 Peeking(见图片),当我弹出时,我只是开始实际级别。

所以综上所述,在SpriteKit中可以使用Peek和Pop的情况并不多。我也不建议您尝试使用 UIKIt 设计您的 UI,以便您可以使用 Peek 和 Pop。希望 Apple 有一天会更新 API,这样什么时候可以查看和弹出 SKNodes 或 SKScenes,那就太棒了。

希望对你有帮助

enter image description here

关于ios - Peek 和 Pop 函数 SpriteKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42189694/

相关文章:

ios - 如何在不使用 Storyboard 的情况下创建新的 Swift 项目?

ios - 发送到不可变对象(immutable对象)的快速变异方法

ios - SpriteKit 黑屏

swift - 如何使用 Swift 将游戏的高分保存在排行榜上?

swift - WorldNode 与对象生成冲突

ios - 有什么方法可以让 iphone 的播客应用程序播放我的播客吗? (带代码)

ios - QuickLook 不显示仅以文件名作为标题的 pdf 灰色屏幕

IOS FCM未收到数据消息

ios - 使用 Firebase 电子邮件验证链接登录

ios - 基于 Swift 3 中的 didSelectRowAtIndexpath 从数组中添加或删除对象