【问题标题】:Allow user interaction outside a non rectangular UIView content允许用户在非矩形 UIView 内容之外进行交互
【发布时间】:2012-07-17 12:16:21
【问题描述】:

在显示圆形图像(需要保持交互)的 UIView 上,您将如何防止圆形之外的区域接收任何用户交互,以便该视图下的其他 ui 仍然处于活动状态?

我尝试用 CGPath 屏蔽 UIView,但没有帮助。

有什么想法吗?

【问题讨论】:

    标签: objective-c uiview uiimageview cgpath user-interaction


    【解决方案1】:

    由于触摸事件在视图层次结构中向下冒泡,作为 UIView,您可以检查触摸事件是否与您相关,如果它不只是返回 NO 并且该事件将向下传递到层次结构中的下一个 UIView

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    {
        for (UIView * view in [self subviews]) {
            if ([view pointInside:[self convertPoint:point toView:view] withEvent:event]) {
                return YES;
            }
        }
        return NO;
    }
    

    【讨论】:

      【解决方案2】:

      不要将任何接收 UI 事件的元素放在圈外。 如果这是不可避免的,那么只要您需要,只要禁用圆圈外的所有元素即可。

      【讨论】:

      • 我将标题更新为 - 允许用户交互,即使在圆形图像和视图框架之间的重叠 alpha 区域下,我也需要在图像下方获取这 3 个蓝色按钮以获取事件。跨度>
      • 如果您只需要激活控件的一部分,那么只需停用整个控件并放入一个仅覆盖您想要的区域的不可见按钮。
      • 如果在 uiview 上将交互设置为 false,则不可见按钮也将变为非活动状态。你知道任何非解决方法吗?
      • 不。但是不要在整个 UIView 上将交互设置为 false,只在您不想与之交互的组件上设置。我很确定没有任何非解决方法(取决于您对解决方法的定义)。
      猜你喜欢
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      相关资源
      最近更新 更多