我有三个小型自定义UIButton(w:25,h:35)的视图,我觉得很难获得触摸事件。
我已为touchUpInside事件添加了目标。
[button addTarget:self action:@selector(keyPressed :) forControlEvents:UIControlEventTouchUpInside];
但正如我所说,我自己似乎很容易错过它。然后我查看了苹果键盘上的类似按钮。它们似乎有一个更大的触摸区域,特别是字母为"A"
和"L"
的键。我想知道他们是如何设法做到这一点的。
非常感谢任何帮助和代码示例。
答案 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?
这基本上让你为按钮周围的矩形设置插入或开始边距。