1. 程式人生 > 實用技巧 >iOS 按鈕點選區域修改 button部分割槽域可以點選 修改點選區域

iOS 按鈕點選區域修改 button部分割槽域可以點選 修改點選區域

比如

一個按鈕,只讓中間點選區域點選有效,其他地方點選無效,重寫UIButton的兩個方法

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event;

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    if (self.hidden ||
        self.alpha < 0.01 ||
        self.userInteractionEnabled  
== NO) { return nil; } if ([self pointInside:point withEvent:event]) { __block UIView * hit = nil; [self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { //把點選的點轉為子檢視的座標點
CGPoint subConv = [self convertPoint:point toView:obj]; hit = [self hitTest:subConv withEvent:event]; if (hit) { *stop = YES; } }]; return hit != nil ? hit : self ; }
else { return nil; } } - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { CGFloat clickX = point.x; CGFloat clickY = point.y; CGFloat centerX = self.frame.size.width / 2.0; CGFloat centerY = self.frame.size.height / 2.0; //直角三角形求斜角長度 CGFloat distance = sqrt((centerX - clickX) * (centerX - clickX) + (centerY - clickY) * (centerY - clickY)); if (distance < self.frame.size.width / 2) { return YES; } else { return NO; } }