#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是什么,然后他的调用顺序才能合理的应用,来极大的缩短时间。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。