Я модифицировал этот пользовательский UIView от LMinh под названием LMGaugeView, чтобы он выглядел как круговая «флаконная карусель» с 16 пузырьками.
Представьте себе 16 точек (CGPoints), равномерно распределенных по краюкруг (UIView).Я хочу быть в состоянии сделать следующий сценарий:
На рисунке показано 10 флаконов, но вы поняли идею.Как только я коснусь вида круга, я хочу иметь возможность определить, какой «флакон» я нажал, основываясь только на их значении CGPoint.
Я создал приложение (названное Twinstones, просто чтобы выбросить его туда)для этого требовался метод hitTest:withEvent:
, но я имел дело с 2 подпредставлениями, к которым можно было прикоснуться (в рамках их суперпредставления).
Для этого круг является единственным видом (что означает 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, который мне нужно использовать длязаставить это работать?Если вам нужно увидеть больше кода, дайте мне знать.