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是什么,然后他的调用顺序才能合理的应用,来极大的缩短时间。
标签:触摸,self,iOS,hitTest,点击,withEvent,UIView 来源: https://blog.51cto.com/smengxiang/2381978