【问题标题】:UIButton extend touch area like apple keyboardUIButton 像苹果键盘一样扩展触摸区域
【发布时间】:2015-01-06 00:44:13
【问题描述】:

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

我为 touchUpInside 事件添加了目标。

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

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

任何帮助和代码示例将不胜感激。

【问题讨论】:

    标签: ios iphone xcode keyboard


    【解决方案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;
    }
    

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

    【讨论】:

      【解决方案2】:

      您不应创建小于 40x40 磅的按钮。您可以将较小的图像放入其中。您可以使用 25,35 的图像(例如 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;
      

      【讨论】:

      • 我没有使用图像,我正在从界面生成器中添加键并使用背景颜色。
      • 好的,在这种情况下,您可以使用比例尺寸(在这种情况下为 +15)。您的新按钮是:w:40 h:50。你添加一个清晰的边界。它的外观是一样的。
      【解决方案3】:

      您是否尝试过使用边缘插图?

      这基本上可以让您为按钮周围的矩形设置内边距或外边距。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-24
        • 2011-08-03
        • 2012-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-26
        相关资源
        最近更新 更多