objective-c - iOS7 Sprite Kit如何将交互式Sprite Nodes和交互式UIViews结合起来?

标签 objective-c uiview ios7 sprite-kit kobold-kit

我正在构建一个 Sprite 套件游戏,并创建了一个带有 Collection View 和按钮的 UIView 来表示游戏内库存。根据我过去使用 UIView 的经验,如果我在另一个之上添加一个,顶部的 UIView 将拦截触摸,除非它的用户交互启用设置为“否”。

但是,当我将库存 UIView 添加到 Scene.view 并将用户交互设置为 YES 时, Sprite 似乎我的场景中 UIView 下方的节点仍然会接收触摸,或者至少将用户交互启用设置为 YES 的节点会接收触摸。

因此,用户可以与我的库存 UIView 进行交互,并且仍然会在库存下的游戏板上引起操作。看来基于 Kobold-Kit 的按钮行为也是随机行为,屏幕一侧的按钮可以通过 UIView 点击,而其他按钮则不能。我的其他具有touchesBegan的节点:代码确实忽略了它们之上的UIView。

我什至尝试在现有场景之上添加另一个节点,这样它将捕获所有触摸,但这在这种情况下似乎没有帮助。

如果我希望某些节点具有交互性,如果有人解释如何正确地将 UIViews 与 SKScene 和 SKSpriteNodes 结合起来,我将不胜感激。

  • 我需要一个单独的场景来存放库存吗?
  • 是否有办法在库存处于事件状态时禁止将触摸传递到场景?

这是我到目前为止所拥有的:

-(void)didMoveToView:(SKView *)view {
    [super didMoveToView:view];

        messageConsole = [[MyTextView alloc] initWithFrame:CGRectMake(playerPortraitOffset, 768-75, 415, 75)];

    messageConsole.backgroundColor = [UIColor clearColor];
    messageConsole.font = [UIFont boldSystemFontOfSize:10];
    messageConsole.textColor = [UIColor lightGrayColor];
    messageConsole.editable = NO;
    [self.view addSubview:messageConsole];

    [self.view addSubview:inventoryViewController.view];


}

更新:测试了 Kobold 套件的行为,结果如下:

  • 对于顶级 UI 元素,例如 Label、collection View 和 UIButton,它们不会传递触摸
  • 对于常规 UIView 和 UIImageView,它们会将触摸传递到场景,即使它们下面有一个交互式 UIButton。删除 UIImage 并公开相同的 UIButton 似乎可以阻止触摸通过。

最佳答案

对所有交互节点使用 KKButtonBehavior 可以解决此问题。

否则,当您显示 UIKit 库存时,请尝试将 SKView 的 userInteractionEnabled 设置为 NO。它还应该阻止具有该属性设置的其他节点接收触摸事件。如果没有并且您不想使用 KKButtonBehavior,则必须将每个节点的 userInteractionEnabled 设置为 NO 以忽略触摸事件,或者添加您自己的标志,以便节点知道在库存时忽略触摸事件起来了。

-(void)preventUserInteraction:(BOOL)prevent
{
//Both seem to disable touches passed to Kobold Kit behaviors under the UIView
    self.userInteractionEnabled = !prevent;


    //self.scene.userInteractionEnabled = !prevent;

}

关于objective-c - iOS7 Sprite Kit如何将交互式Sprite Nodes和交互式UIViews结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20686025/

相关文章:

ios - 如何通过标识符在 Storyboard 中获取 View Controller ?

ios - 更改 UIButton 的 imageview 的 alpha

ios - 从 XIB 加载时不遵守约束

ios - 为具有圆角的 UIImageView 创建阴影?

ios - 在 Swift 中创建自定义 UIView 并显示为弹出窗口

ios - App Store 是否接受自定义浏览器?

ios - 是否可以使用 Swift 更改 iOS 7 中的静态单元格高度?

ios - 为什么Xcode的模板没有内容?

iOS 6 vs 7 外观build设置

objective-c - XCode 6.3 在抛出 Objective-C++ 异常时立即引发 SIGABRT