0

在我的应用程序开发过程中发生了一些奇怪的事情。我有一个包含几个 UIButtons 的视图。所有人都在使用自定义艺术品,并且是带有 CostumType 的 UIButton。对我来说,一切都感觉不错。在模拟器和手机上。

但是当我把应用程序交给别人时,这个人点击了一个按钮,它就不起作用了。感觉按钮只是对某个点击的反应,实际上感觉不对(如果将其与正常行为进行比较)。

我该怎么做才能让它表现正常?正常意味着习惯 iOS 应用程序的人可以像他一样使用它,但它可以工作。

下面是一个按钮的示例代码:

focusButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [focusButton setFrame:CGRectMake(self.bounds.size.width-(self.bounds.size.width/widthFactor)+108, self.bounds.origin.y+(self.bounds.size.height/(heightFactor*2))+2, 36, 40)];
    focusButton.contentHorizontalAlignment = false; // I think these lines doesn't effect the behavior
    focusButton.contentVerticalAlignment = false;
    [focusButton setBackgroundImage:[UIImage imageNamed:@"arrowUp.png"] forState:UIControlStateNormal];
    [focusButton setBackgroundImage:[UIImage imageNamed:@"arrowUpH.png"] forState:UIControlStateHighlighted];
    [focusButton addTarget:self action:@selector(focusOrDefocusCourse) forControlEvents:UIControlEventTouchUpInside];
    [self addSubview:focusButton];

按钮背景如下所示: 按钮

4

2 回答 2

2

这很好..一旦用框架测试..

UIButton *btn_foucs = [UIButton buttonWithType:UIButtonTypeCustom];

[btn_foucs setFrame:CGRectMake(20, 20, 200, 40)];

[btn_foucs setImage:[UIImage imageNamed:@"btn_erase.png"] forState:UIControlStateNormal];

[btn_foucs setImage:[UIImage imageNamed:@"btn_erase_h.png"] forState:UIControlStateHighlighted];

[self.view addSubview:btn_foucs];
于 2012-10-05T04:33:00.710 回答
1

您可能想看看 UIButton 属性imageEdgeInsets。这使您可以使图像仅绘制到框架的一部分中,从而使可触摸区域大于图像本身(减少“丢失”按钮的机会)。例如,您可以执行以下操作:

int touch_offset = 10;
[focusButton setFrame:CGRectMake(self.bounds.size.width-(self.bounds.size.width/widthFactor)+108-touch_offset, self.bounds.origin.y+(self.bounds.size.height/(heightFactor*2))+2-touch_offset, 36+(touch_offset*2), 40+(touch_offset*2))];
focusButton.imageEdgeInsets = UIEdgeInsetsMake(touch_offset, touch_offset, touch_offset, touch_offset);

这应该使可触摸区域比每边的图像宽 10 像素,可通过更改 touch_offset 值进行调整。作为一般准则,Apple 建议使用不小于 44x44 像素的可触摸区域。

于 2012-10-05T03:26:54.500 回答