UIButton扩展触摸区域,如苹果键盘

时间:2014-11-09 18:11:21

标签: ios iphone xcode keyboard

我有三个小型自定义UIButton(w:25,h:35)的视图,我觉得很难获得触摸事件。

我已为touchUpInside事件添加了目标。

  

[button addTarget:self action:@selector(keyPressed :) forControlEvents:UIControlEventTouchUpInside];

但正如我所说,我自己似乎很容易错过它。然后我查看了苹果键盘上的类似按钮。它们似乎有一个更大的触摸区域,特别是字母为"A""L"的键。我想知道他们是如何设法做到这一点的。

非常感谢任何帮助和代码示例。

3 个答案:

答案 0 :(得分:1)

创建一个新的类,该类包含UIButton并覆盖此函数:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
int errorMargin = 8;
if ([self.titleLabel.text isEqualToString:@"A"] || [self.titleLabel.text isEqualToString:@"a"]) {
    CGRect largerFrame = CGRectMake(0 - 20, 0 - errorMargin, self.frame.size.width + 22, self.frame.size.height + errorMargin*2);
    return (CGRectContainsPoint(largerFrame, point) == 1) ? self : nil;
}
if ([self.titleLabel.text isEqualToString:@"L"] || [self.titleLabel.text isEqualToString:@"l"]) {
    CGRect largerFrame = CGRectMake(0 - 2, 0 - errorMargin, self.frame.size.width + 20, self.frame.size.height + errorMargin*2);
    return (CGRectContainsPoint(largerFrame, point) == 1) ? self : nil;
}

CGRect largerFrame = CGRectMake(0 - 2, 0 - errorMargin, self.frame.size.width + 2, self.frame.size.height + errorMargin*2);
return (CGRectContainsPoint(largerFrame, point) == 1) ? self : nil;
}

您将获得相同的视觉输出和您想要的可触摸区域

答案 1 :(得分:0)

您不应该创建小于40x40点的按钮。您可以在其中放入较小的图像。您可以拥有25,35(b.e.myImage@2x.png)的图像。

一个例子:

UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(100, 100, 40, 40)];
[button setImage:[UIImage imageNamed:@"myImage"] forState:UIControlStateNormal];

//其他选项

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(myPosition.x-15, myPosition.y-15, 40, 40)];
[button setImage:[UIImage imageNamed:@"myImage"] forState:UIControlStateNormal];
 // ......
button.layer.borderColor = [[UIColor clearColor] CGColor];
button.layer.borderWidth = 15.0;
button.layer.masksToBounds = YES;

答案 2 :(得分:0)

您是否尝试过使用Edge Insets?

这基本上让你为按钮周围的矩形设置插入或开始边距。

https://developer.apple.com/library/ios/documentation/uikit/reference/uibutton_class/index.html#//apple_ref/doc/uid/TP40006815-CH3-SW31