温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iOS UIView中hitTest:withEvent方法触摸的位置设置

发布时间:2020-07-14 01:11:40 来源:网络 阅读:1097 作者:大头狼小鬼 栏目:移动开发
#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是什么,然后他的调用顺序才能合理的应用,来极大的缩短时间。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI