カスタムボタンがあります(カスタムビューとして円形の画像を使用します)。問題は、カスタムボタンのアクティブ領域が大きすぎることです。ボタンの外側を少なくとも100ピクセルタップしても、ボタンのタップとして登録されます。これにより、誤ってタップされます。
注:-ボタンはすでに最小要件よりも大きいため、ボタンのサイズを縮小したくありません。タップ可能なスペースを減らしたい。
これらのボタンのアクティブ領域を減らすにはどうすればよいですか?
カスタムボタンがあります(カスタムビューとして円形の画像を使用します)。問題は、カスタムボタンのアクティブ領域が大きすぎることです。ボタンの外側を少なくとも100ピクセルタップしても、ボタンのタップとして登録されます。これにより、誤ってタップされます。
注:-ボタンはすでに最小要件よりも大きいため、ボタンのサイズを縮小したくありません。タップ可能なスペースを減らしたい。
これらのボタンのアクティブ領域を減らすにはどうすればよいですか?
ボタンがまだ UIButton のサブクラスでない場合は、これを実現する必要があります。オーバーライドpointInside:withEvent:
して、「タッチ可能」領域を任意の形状に変更できます。ヒット ボックスのインセットを変更するだけのサブクラスは、次のようになります。
// --HEADER--
@interface TouchInsetButton : UIButton
@property (nonatomic, assign) UIEdgeInsets touchInsets;
@end
// --IMPLEMENTATION--
@implementation TouchInsetButton
@synthesize touchInsets = _touchInsets;
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
{
CGRect modifiedHitBox = UIEdgeInsetsInsetRect([self bounds], _touchInsets);
return CGRectContainsPoint(modifiedHitBox, point);
}
@end
お気づきのように、UIButton は通常、境界よりもわずかに大きい境界ボックスを使用することに注意してください。インセットを設定せずにこのサブクラスを使用すると、ボタンの境界内に完全にあるヒットのみを受け入れるボタンになります。