【问题标题】:Overlapping UIControls重叠的 UIControls
【发布时间】:2013-10-14 21:07:47
【问题描述】:

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

它们的框架重叠。在屏幕截图上,左上角的那个在右边的后面。当在重叠区域内开始触摸时,如何开始左侧的跟踪?

我的 beginTrackingWithTouch 看起来像这样:

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

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

【问题讨论】:

    标签: ios touch-event uicontrol


    【解决方案1】:

    我的建议是:
    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 时,触摸将传播到下一个视图,即“下方”。但是,当您的圈子重叠时,这将不起作用 - 仅当框架时,如屏幕截图所示。

    【讨论】:

    • 没关系。圆圈不会重叠
    • @Vrol 之前我可以花点时间测试一下吗?
    • 接受答案是一个善意的决定...不要强迫任何人这样做,不要问它
    • @PetroKorienev 好吧,SO 这里的一些人靠它维持生计。善意只是一个点击。为什么不免费提供,尤其是在有用的时候?顺便说一句,我已经提高了你的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多