我一直在修改LMinh名为LMGaugeView的自定义UIView,以使其看起来像一个16瓶的圆形“瓶转盘”。
想象16个点(CGPoints)均匀分布在圆的边缘(UIView)。我希望能够执行以下场景:
图中显示了10瓶,但你明白了。只要我触摸到圆形视图,我就希望能够根据它们的CGPoint值来确定我点击了哪个“小瓶”。
我创建了一个需要
hitTest:withEvent:
方法,但我正在处理两个可以触摸的子视图(在其superview的框架内)
因此,圆圈是唯一的视图(这意味着
hitTest:withEvent:
每次我接触圆视图时,它只会返回圆视图。)
这就是
hitTest:...
实施:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
if (!self.isUserInteractionEnabled || self.isHidden || self.alpha <= 0.01) {
return nil;
}
CGRect touchRect = CGRectInset(self.bounds, -14, -14);
if (CGRectContainsPoint(touchRect, point)) {
for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
CGPoint convertedPoint = [subview convertPoint:point fromView:self];
UIView *hitTestView = [subview hitTest:convertedPoint withEvent:event];
if (hitTestView) {
return hitTestView;
}
}
return self;
}
return nil;
}
我是否需要使用其他与hitTest相关的方法来实现这一点?如果您需要查看更多代码,请告诉我。