iOS UIView中hitTest:withEvent方法觸摸的位置設置

#pragma mark 在UIView視圖結構中查找點擊view的觸摸事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    
    // 若是不能夠交互 | 隱藏 | 透明度過小 3者任意一個都忽略不能點擊
    if(!self.userInteractionEnabled || self.hidden || self.alpha<=0.01){
        return nil;
    }
    if([self pointInside:point withEvent:event]){
        
       __block UIView *hit =  nil;
        
        //NSEnumerationReverse 倒序
        [self.subviews enumerateObjectsWithOptions:(NSEnumerationReverse) usingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            
            ///進行座標轉化
            CGPoint vonverPoint = [self convertPoint:point toView:obj];
            hit = [obj hitTest:vonverPoint withEvent:event];
            if(hit){
                *stop = YES;
            }
        }];
        if(hit){
            return hit;
        }else{
            return self;
        }
    }else{
        return nil;
    }
}

#pragma mark 觸摸的位置是否在當前view視圖中合適的點擊位置
- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event{
    
    CGFloat x1 = point.x; // 觸摸的x
    CGFloat y1 = point.y; // 觸摸的y
    
    CGFloat x2 = self.frame.size.width/2; //view的 x
    CGFloat y2 = self.frame.size.height/2; //view的 y
    
    
    double dis = sqrt((x1-x2 )*(x1-x2) + (y1-y2 )*(y1-y2)); //這裏設置本身的判斷,button的大小 或者按鈕中心的一點 或者buton裏放置的最大圓等
    if(dis<=self.frame.size.width/2){ //判斷當前觸摸的點是否是本身要點擊的區域
        return YES;
    }else{
        return NO;
    }
}

在UIView中作的轉盤遊戲,咱們須要判斷點擊的位置,而後作對應的點擊事件處理,咱們就能夠用上面的辦法,或者tabBar凸出的部分等都會用到,首先就要了解hitTest是什麼,而後他的調用順序才能合理的應用,來極大的縮短期。ide

相關文章
相關標籤/搜索