我正在开发一个应用程序,该应用程序可使用户彼此堆叠图形。
图形被实例化为UIImageView,并且在实际图形之外是透明的。我还使用平移手势让用户在屏幕上拖动它们。
因此,当您将一堆不同大小和形状的图形彼此叠加在一起时,您可能会有一种幻想,即您正在触摸一个子索引视图,但是实际上您在触摸顶部的视图,因为它的某些透明部分将鼠标悬停在您的接触点上。
我想知道是否有人对我们如何才能做到只听imageview实体部分的平移手势有想法。或者可以加强用户体验的东西,以便他们触摸的就是他们选择的东西。谢谢
最佳答案
创建自己的UIImageView
子类。在子类中,如果该点位于图像的透明部分中,则重写pointInside:withEvent:
方法以返回NO。
当然,您需要确定某个点是否在透明零件中。 :)
如果您碰巧用CGPath
或UIBezierPath
勾勒出图像的不透明部分,则可以使用CGPathContainsPoint
或-[UIBezierPath containsPoint:]
轻松实现。
如果没有方便的路径,则必须检查图像的像素数据。在stackoverflow.com上已经有很多答案可以解释如何做到这一点。搜索get pixel CGImage
或get pixel UIImage
。