【问题标题】:How to disable touch detection on a UIImage?如何禁用 UIImage 上的触摸检测?
【发布时间】:2012-05-08 04:51:27
【问题描述】:

我正在开发一个应用程序,它实际上像 MSPaint 一样工作(画线等...)。 我有一个白色的 UIView,基本上是用户绘制的地方。在这个 UIView 之上,我设置了一个 UIImage,它是灰色的,alpha 为 0,4。我希望将此 UIImage 用作吸墨纸。这个想法是当用户将手掌放在该区域时禁用触摸,因此绘图更舒适(禁用多点触控,并且使用这种“吸墨纸”,您不会用手掌意外绘制东西...... )

即使我把 UIImage 放在前面,在视图的顶部,即使我在这个 UIImage 上禁用了用户交互,仍然可以在 UIView 上绘图。 ,在 UIImage 后面(有点奇怪!)

我不明白发生了什么,因为图像似乎是透明的,并且“后面”的 UIView 仍然处于活动状态,即使她被 UIImage 覆盖?!

任何帮助/指示/想法将不胜感激!谢谢你:-)

【问题讨论】:

    标签: objective-c ios uiview uiimage touch


    【解决方案1】:

    您是否将 UIImage 的“userInteractionEnabled”属性设置为“NO”?

    【讨论】:

    • 是的,我想是的... UIImage 被称为 buvard,好吗? (这意味着法国的吸墨纸),而 UIView 称为 strokesView。这是我所做的:[buvard bringSubviewToFront:strokesView]; buvard.userInteractionEnabled = NO;
    • UIImage 没有 userInteractionEnabled 属性。你在想 UIImageView 吗?
    • 是的@bbarnhart,你是对的,buvard 是 UIImageView 而不是 UIImage...抱歉。
    • 是的,它是 UIImageView,因为 UIImage 不能直接呈现到屏幕上。
    【解决方案2】:

    您实际上可能想做相反的事情。当您禁用用户交互或触摸时,视图基本上对触摸变得不可见,并且它们被传递到下一个视图。

    在您的情况下,您确实需要 userInteractionEnabled ,因为您希望视图能够捕捉到这些触摸。

    【讨论】:

    • 我明白你的意思。但是如果我启用用户交互(使用界面生成器,以及将 userInteractionEnabled 设置为 YES),我仍然可以在 UIImageView 后面绘制...
    • 这是我需要的。启用用户交互以阻止它与 UIImageView 后面的按钮交互。谢谢!
    【解决方案3】:

    您必须禁用 UIImageView 而不是 UIImage 上的用户交互,它应该可以工作。

    编辑:

    或者你可能会偷偷摸摸,只是在它上面添加一个空视图。使用相同的帧大小,使其完美重叠,仅此而已。您将能够看到您需要的所有内容,并且它不是它的子视图,因此不会有任何交互,并且触摸将被注册但不会产生任何效果。 :P

    除非您发布一些代码,否则没有更好的想法...

    【讨论】:

    • 我的错误...实际上,“buvard”是一个 UIImageView...但问题仍然存在。
    • 当然,我可以向您展示我写的内容。但这并不是很有趣,IMO:在 strokesViewController.h 中:@property (nonatormic, retain) IBOutlet UIImageView *buvard 在 strokesViewController.m 中(在 viewDidLoad 中):[buvard bringSubviewToFront : strokesView]; buvard.userInteractionEnabled = YES; 正如您所建议的那样,我尝试了相同的视图,但它没有工作......
    • 您不希望用户不能在表面上绘图吗?你不应该将 userInteractionEnabled 设置为“NO”吗?
    • 我必须将其设置为 YES,否则我无法检测到此表面上的运动。我发布了我的答案...
    【解决方案4】:

    好的,所以我设法做我想做的事!耶!

    我有 3 个不同的课程:

    • StrokesViewController(UIViewController)-视图控制器

    • StrokesView (UIView) - 用户绘制笔触的视图。

    • BlottingPaper (UIView) - 吸墨纸。

    我得到了一个“链接”到这三个文件的 XIB 文件。

    我创建了这个名为“BlottingPaper”的新类,键入 UIView。 .h 和 .m 文件实际上是空的(我确实 import #import ) BlottingPaper 上启用了用户交互。 我不使用这个类的排他性触摸。

    在 XIB 文件中,我只是在 StrokesView 上放了一个视图。我将它链接到 BlottingPaper(根据需要修改 alpha,blablabla...)

    就是这样!当我将手掌放在上面时,它不会在我手所在的区域绘制任何东西,但我仍然可以用手指在 StrokesView 的其余部分上绘制!

    【讨论】:

      【解决方案5】:

      除了 Dancreek 的响应之外,您还应该设置 buvard.userInteractionEnabled = YES; 以便它捕获交互。

      您还应该设置buvard.exclusiveTouch = YES; 以便buvard 是唯一将接收触摸事件的视图。

      当您删除 buvard 时,您应该设置 buvard.exclusiveTouch = NO; 以便其他视图恢复接收触摸的能力。

      【讨论】:

        猜你喜欢
        • 2010-11-09
        • 1970-01-01
        • 1970-01-01
        • 2013-10-19
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多