iOSがbuttonクリック範囲を拡大する2つの方法
1700 ワード
UIが与える図は小さい場合や、buttonのクリック領域を拡大する必要がある場合があります.一般的にはbuttonのsizeを変更したり、frameを変更せずにbuttonのクリック領域を個別に拡大したりします.
1つ目の方法:UIButtonを継承し、次の方法を書き換える
2つ目の方法:次の方法を書き換える
上記の変化クリック領域は矩形ですが、クリック領域を円形範囲に規定する必要がある場合は、次のようにすることができます.
1つ目の方法:UIButtonを継承し、次の方法を書き換える
-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
CGRect bounds = self.bounds;
// 26, , 。
CGFloat widthDelta = MAX(26, 0);
CGFloat heightDelta = MAX(26, 0);
bounds = CGRectInset(bounds, -0.5 * widthDelta, -0.5 * heightDelta);
return CGRectContainsPoint(bounds, point);
}
2つ目の方法:次の方法を書き換える
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
CGRect rectBig = CGRectInset(self.bounds, -(27.0/2), -(27.0/2));
if (CGRectContainsPoint(rectBig, point)) {
return self;
}else{
return nil;
}
return self;
}
上記の変化クリック領域は矩形ですが、クリック領域を円形範囲に規定する必要がある場合は、次のようにすることができます.
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
[super hitTest:point withEvent:event];
CGPoint center = CGPointMake(self.bounds.size.width/2, self.bounds.size.height/2);
//
CGFloat raidus = self.frame.size.height >= self.frame.size.width ?self.frame.size.width/2 :self.frame.size.width/2;
//
BOOL pointInRound =[self touchPointInsideCircle:center radius:raidus targetPoint:point];
if (pointInRound) {
return self;
}else
{
return nil;
}
}
//
- (BOOL)touchPointInsideCircle:(CGPoint)center radius:(CGFloat)radius targetPoint:(CGPoint)point
{
CGFloat dist = sqrtf((point.x - center.x) * (point.x - center.x) +
(point.y - center.y) * (point.y - center.y));
return (dist <= radius);
}