当前位置: 首页 > 面试题库 >

如何知道是否在Xcode中触摸了.png的唯一可见区域

漆雕安晏
2023-03-14
问题内容

我已经将.png图像导入UIImageView到Xcode中,我要制作的是当触摸该图像时将其隐藏。

但是我的问题是png图像包含透明部分,当我触摸透明部分时,操作继续进行。我希望仅在触摸图像的可见部分时才继续执行操作。该如何解决呢?

Swift或Objective-C


问题答案:

我创建了一个自定义UIButton子类,其行为完全符合您的描述,请看一下:https : //github.com/spagosx/iOS-Shaped-Button-
Swift

它是用Swift编写的,但是很容易转换为Objective-c。

方法是从触摸点获取像素数据并访问RGBA值,在这种情况下,我们读取A(alpha)并检查其是否高于阈值。

看一下代码:

func alphaFromPoint(point: CGPoint) -> CGFloat {
    var pixel: [UInt8] = [0, 0, 0, 0]
    let colourSpace = CGColorSpaceCreateDeviceRGB()
    let alphaInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
    let context = CGContext(data: &pixel, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, space: colourSpace, bitmapInfo: alphaInfo.rawValue)

    context?.translateBy(x: -point.x, y: -point.y)

    self.layer.render(in: context!)

    let floatAlpha = CGFloat(pixel[3])
    return floatAlpha
}

然后,您可以将该floatAlpha值与可接受的alpha值进行比较:

    override func pointInside(point: CGPoint, withEvent event: UIEvent?) -> Bool {
        return self.alphaFromPoint(point) >= 100
    }


 类似资料:
  • 在过去的几天里,我一直在将我的游戏(Apopalypse)移植到Android Mobile平台。我在Google上快速搜索了精灵触摸检测,但没有找到任何有用的东西。每个气球触摸一次就会弹出,我只需要检测它是否被触摸。这是我的气球生成代码: 渲染(x、y、宽度和高度随机): 在主游戏类中产卵:

  • 问题内容: 我试图检测我的sprite节点是否已被触摸并且我不知道从哪里开始。 问题答案: 首先将的属性设置为字符串。 然后在功能上 这是一种方法。 您也可以继承并覆盖其中的内部。 然后做

  • 问题内容: 我有一个具有图像背景的侧边栏小部件。 在此上方是搜索输入表单。我不希望输入在图像加载之前显示。 有没有一种方法可以将事件处理程序附加到CSS背景图像(如正常的img元素/对象)? 我知道可以在普通图像上完成此操作,但是我想将其保留为CSS背景,因为该图像是sprite的一部分。我使用的是jQuery,因此使用jQuery或纯DOMJS的解决方案同样不错。 问题答案: 您可以使用DOM/

  • 问题内容: 每次我运行使用Flask-SQLAlchemy的应用程序时,都会收到以下警告,提示该SQLALCHEMY_TRACK_MODIFICATIONS选项将被禁用。 我试图找出此选项的作用,但是Flask-SQLAlchemy文档尚不清楚该跟踪的用途。 · 如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。

  • 问题内容: 是否可以 不 尝试加载就知道是否已加载Java类?尝试加载该类,但我不希望出现这种副作用。还有另一种方法吗? (我不想覆盖类加载器。我正在寻找一个相对简单的方法。) 问题答案: (感谢Aleksi)此代码: 产生: 请注意,示例类不在软件包中。完整的二进制名称是必需的。 二进制名称的一个示例是

  • 我大部分时间都用在我的计算数论研究上。我输入了以下内容: ,它给出了整数1到100的φ(n)-1的值。这里φ(n。它给出了以下输出: (我排除了一些整数以使问题简短)我想检查这些数字中是否有数字。我该怎么做?