2012-04-27 62 views
0

我正在开发一款应用程序,其实际上就像MSPaint(绘制线条等等)。 我得到了一个白色的UIView,基本上是用户绘制的地方。在这个UIView之上,我设置了一个UIImage,它是灰色的,带有一个0,4 alpha。我希望这个UIImage被用作吸墨纸。这个想法是当用户把手掌放在这个区域时禁用触摸,所以绘制更加舒适(多点触摸被禁用,并且使用这种“吸墨纸”,您不会意外地用手掌画东西...... )如何禁用UIImage上的触摸检测?

即使我将UIImage带到前面,在视图顶部,即使禁用了此UIImage上的用户交互,仍然可以在UIView上绘制。 ,在UIImage背后(有点奇怪!)

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

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

回答

1

好的,所以我设法做到了我想做的!好极了!

我得到3个不同的类:

  • StrokesViewController(UIViewController中)-the视图控制器

  • StrokesView(UIView的) - ,其中用户绘制的笔划的图。

  • 吸印纸(UIView) - 吸墨纸。

我得到了一个XIB文件“链接”到所有三个。

我创建了这个名为“BlottingPaper”的新类,类型为UIView。 .h和.m文件实际上是空的(我导入#import < Foundation/Foundation.h>) 在BlottingPaper上启用用户交互。 我不使用这门课程的独家触摸。

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

就是这样!当我把手掌放在它上面时,它并没有在我手所在的区域绘制任何东西,但我仍然可以用我的手指画在其余的StrokesView上!

4

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

+0

是的,我认为是这样的... UIImage被称为buvard,好吗? (这意味着法国的吸墨纸),UIView被称为strokesView。这是我做的: '[buvard bringSubviewToFront:strokesView]; buvard.userInteractionEnabled = NO;' – tvincent 2012-04-27 12:45:56

+1

UIImage没有userInteractionEnabled属性。你在想UIImageView吗? – bbarnhart 2012-04-27 13:09:47

+0

是@bbarnhart,你说得对,buvard是一个UIImageView,而不是UIImage ...对不起。 – tvincent 2012-04-27 13:17:40

2

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

编辑:

或者你可以偷偷摸摸,只是添加一个空的观点了吧。使用相同的框架尺寸,使其完美重叠,就是这样。你将能够看到你需要的一切,它不是它的子视图,所以没有任何交互,触摸将被注册但不会有任何影响。 :P

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

+0

我的错误...其实,“buvard”是一个UIImageView ...但问题保持不变。 – tvincent 2012-04-27 13:17:06

+0

当然,我可以告诉你我写的是什么。但它不是真的很有趣,IMO: 在strokesViewController.h: '@property(nonatormic,保留)IBOutlet中的UIImageView * buvard' 在strokesViewController.m(在viewDidLoad中): '[buvard bringSubviewToFront:strokesView]。 buvard.userInteractionEnabled = YES;' 我试过同样的视图,就像你所建议的那样,但它不起作用... – tvincent 2012-04-30 08:15:13

+0

你不想让用户无法在表面上画图吗? 不应该将userInteractionEnabled设置为'NO'? – 2012-05-02 10:42:33

4

你实际上可能想要做的正好相反。当您禁用用户交互或触摸时,视图基本上变为不可见触摸,并传递到下一个视图。

在你的情况下,你确实想要userInteractionEnabled,因为你想让视图捕捉这些触摸。

+0

我明白你的意思了。但是,如果我启用了用户交互(使用界面生成器,并将userInteractionEnabled设置为YES),我仍然可以在UIImageView后面绘制... – tvincent 2012-04-27 13:15:49

+0

尝试使用C4-Travis的注释。 – Dancreek 2012-04-27 16:33:43

+0

这是我需要的。启用用户交互以阻止它与UIImageView后面的按钮进行交互。谢谢! – RanLearns 2016-09-01 03:32:18

0

除了Dancreek的回应,您应该设置buvard.userInteractionEnabled = YES;,以便捕捉交互。

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

当您删除buvard时,您应该设置buvard.exclusiveTouch = NO;,以便其他视图将重新获得触摸的能力。