为什么边框厚度会随着按钮的颜色而变化(蓝色会变成2px边框)?

时间:2012-12-10 07:18:29

标签: objective-c ios uibutton border

我正在开发游戏,由于某种原因,边框厚度会根据按钮的颜色而变化。直到我在应用程序上放置背景图像才发生此问题,所以我不确定是什么导致它。我拍了几张截图来说明我的意思。出于某种原因,当边界的按钮为蓝色时,边框厚度会变为2像素而不是1像素。

此外,控制按钮上的边框存在一些问题。通过控制按钮,我的意思是顶部的6个按钮,按照红色,蓝色,棕色,绿色,紫色和黄色的顺序排列。

以下是截图:

Screenshot #1 Screenshot #2

我通过在背景中放置一个按钮来创建边框,该按钮从x-1,y-1开始,宽度为+ 2,高度为+ 2。这是一段代码,可以给你一个想法:

 UIButton *borderButton = [UIButton buttonWithType:UIButtonTypeCustom];
 borderButton.frame = CGRectMake((controlX-1), (controlY-1), 42, 32);
 borderButton.backgroundColor = [UIColor blackColor];
 [self.view addSubview:borderButton];

 UIButton *controlButton = [UIButton buttonWithType:UIButtonTypeCustom];
 [controlButton addTarget:self
                      action:@selector(doMove:)
            forControlEvents:UIControlEventTouchDown];
 controlButton.frame = CGRectMake(controlX, controlY, 40, 30);
 controlButton.tag = 500 + i;
 tmpColor = [self.colors objectAtIndex:i];
 controlButton.backgroundColor = tmpColor;
 [self.view addSubview:controlButton];

此代码取自循环,其中controlX和controlY给出控制按钮应该从哪里开始的x / y值。

如果有人知道如何解决这个问题我会非常感激。如果我以错误的方式处理边界并且有一种更简单且更少问题的方式来实现相同的外观,我也愿意这样做,因为在我的结尾没有太多的代码可以改变。提前感谢任何可以帮助我解决这个恼人的UI故障的人。

1 个答案:

答案 0 :(得分:1)

使用边框实现自定义按钮的最简单方法是使用按钮的图层:

#import <QuartzCore/QuartzCore.h>
...
UIButton *controlButton = [UIButton buttonWithType:UIButtonTypeCustom];
 [controlButton addTarget:self
                      action:@selector(doMove:)
            forControlEvents:UIControlEventTouchDown];
 controlButton.frame = CGRectMake(controlX, controlY, 40, 30);
 controlButton.tag = 500 + i;

 // Set layer properties
 controlButton.layer.borderWidth = 1.0;
 controlButton.layer.borderColor = [UIColor blackColor].CGColor;
 controlButton.layer.cornerRadius = 5.0; // if you want rounded corners...

 tmpColor = [self.colors objectAtIndex:i];
 controlButton.backgroundColor = tmpColor;
 [self.view addSubview:controlButton];

您可能还需要检查该按钮和其他元素(如标签)是否位于整体坐标处,以避免图像模糊。要更正坐标,请使用CGRectIntegral

P.S。对于复杂的动画/游戏逻辑,最好使用Cocos2D

等框架