重叠UIControls

时间:2013-10-14 21:07:48

标签: ios touch-event uicontrol

我有两个自定义UIControl。这些是滚轮。

他们的帧重叠。在屏幕截图中,左上角的那个位于右侧的那个后面。当在重叠区域内启动触摸时,如何在左侧开始跟踪?

我的beginTrackingWithTouch看起来像这样:

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
if (!insideCircle) return NO; } // pseudo-code

如何将事件传播到响应NO的UIControl后面的视图?

overlapping frames

1 个答案:

答案 0 :(得分:3)

我的建议是:
1)您的车轮的子类UIView,例如WheelView;
2)覆盖-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
例如:

-(BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
    CGFloat xOffset = (point.x - self.bounds.size.width / 2);
    CGFloat yOffset = (point.y - self.bounds.size.height / 2);
    CGFloat distanceSqr = xOffset * xOffset + yOffset * yOffset;
    if (distanceSqr > radius * radius)
    {
        // touch point is outside of circle
        return NO;
    }
    return YES;
}

因此,当您返回NO时,触摸将传播到下一个视图,即“下方”。但是,当您的圈子重叠时,这不会起作用 - 仅限于框架,如屏幕截图所示。