自定义UIButton不会显示

时间:2016-04-20 01:34:33

标签: ios swift sprite-kit uibutton

我制作游戏,一切都很好。但是我这个自定义按钮似乎有问题:

let button = UIButton(type: UIButtonType.Custom) as UIButton
let image = UIImage(named: "bluePlayButton")
button.setImage(image, forState: UIControlState.Normal)
button.frame = CGRectMake(self.size.width/2, self.size.height * 0.15, 300, 200)
button.layer.zPosition = 1

self.view?.addSubview(button)

当我运行应用程序时,该按钮不会出现。我的代码有什么问题,是否有遗漏?

1 个答案:

答案 0 :(得分:1)

我目前正在将一些UI元素集成到sprite-kit场景中,我不得不说这有点棘手。如果您可以向我提供有关该课程其他元素的更多信息,请选择SKSceneSKNode(SKView)还是-(void)didMoveToView:(SKView *)view { //Your code but in Objective-C UIButton * button = UIButton UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; UIImage * image = [UIImage imageNamed:@"bluePlayButton"]; [button setImage:image forState:UIControlStateNormal]; [button setFrame:CGRectMake(self.size.width/2, self.size.height * 0.15, 300, 200)]; button.layer.zPosition=1; [self.view addSubView:button]; } 。当混合两种方法时,这真的很痛苦。

但是根据您提供的信息,我可以告诉您我遇到了同样的问题,并且我解决了更改我在SKScene上添加UI元素的方法的问题。在 viewDidLoad 之前,我应该在 viewDidAppear 上进行。

示例(目标-C):

  • iCarousel 是一个UI元素(不是SKView或SKNode)。

`

//fire button
- (SKSpriteNode *)fireButtonNode
{
    SKSpriteNode *fireNode = [SKSpriteNode spriteNodeWithImageNamed:@"fireButton.png"];
    fireNode.position = CGPointMake(fireButtonX,fireButtonY);
    fireNode.name = @"fireButtonNode";//how the node is identified later
    fireNode.zPosition = 1.0;
    return fireNode;
}

`

  • 此外,仔细检查按钮的zPosition和其他元素。

  • 确保使用调试器正确加载图像。即使使用扩展名(.png),也可能会发生一些事情以防止这种情况发生。 (正如@matt在评论中所建议的那样)

  • 强烈建议避免将UIKit元素与Sprite-Kit元素混合使用。

  • 如果这不能解决您的问题,请提供更多信息;)

修改: 另一个如何在Sprite-Kit中执行与UIButton相对应的示例(最简单的方法)。

(刚从这个问题中取出 - Setting up buttons in SKScene

您可以使用SKSpriteNode作为按钮,然后当用户触摸时,检查这是否是触摸的节点。使用SKSpriteNode的name属性来标识节点:

[self addChild: [self fireButtonNode]];

将节点添加到场景中:

//handle touch events
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [touches anyObject];
    CGPoint location = [touch locationInNode:self];
    SKNode *node = [self nodeAtPoint:location];

    //if fire button touched, bring the rain
    if ([node.name isEqualToString:@"fireButtonNode"]) {
         //do whatever...
    }
}

处理触摸:

{
  name: "Alex"
  id: 1
}
{
  name: "Felix"
  id: 2
}


db.collection.find({}, {name:1, id:0}).toArray()