gpt4 book ai didi

ios - 自定义 UIButton 不显示

转载 作者:行者123 更新时间:2023-11-28 06:44:59 25 4
gpt4 key购买 nike

我正在制作一款游戏,一切正常。但是我做的这个自定义按钮好像有问题:

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)

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

最佳答案

我目前正在将 UI 元素集成到 sprite-kit 场景中,我不得不说这有点棘手。如果你能给我更多关于这个类的其他元素的信息,它是 UIViewSKScene (SKView),还是 SKNode。当混合使用这两种方法时,这真的很痛苦。

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

示例( objective-c ):

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

`

-(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];
}

`

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

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

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

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

编辑:另一个例子是如何在 Sprite-Kit 中实现 UIButton 的对应(最简单的方法)。

(刚摘自这个问题 - Setting up buttons in SKScene)

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

//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;
}

将节点添加到您的场景:

[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...
}
}

关于ios - 自定义 UIButton 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36732332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com