【问题标题】:How to make tappable UIImages that run functions?(Swift)如何制作运行功能的可点击 UIImages?(Swift)
【发布时间】:2015-02-15 04:54:02
【问题描述】:

(我几天前才开始使用 Swift,对编程比较陌生,所以请多多包涵。)我正在尝试让随机块出现在屏幕上,用户必须点击它们才能使它们消失。我已经能够创建块,但我不知道如何真正使它们可点击。有人可以帮帮我吗?到目前为止,这是我的代码:

func createBlock(){

    let imageName = "block.png"
    let image = UIImage(named: imageName)
    let imageView = UIImageView(image: image!)

    imageView.frame = CGRect(x: xPosition, y: -50, width: size, height: size)
    self.view.addSubview(imageView)

    UIView.animateWithDuration(duration, delay: delay, options: options, animations: {

        imageView.backgroundColor = UIColor.redColor()
        imageView.frame = CGRect(x: self.xPosition, y: 590, width: self.size, height: self.size)

        }, completion: { animationFinished in


            imageView.removeFromSuperview()
            self.life-=1


    })



}

我想让方块在被点击时消失;关于如何做到这一点的任何建议?

【问题讨论】:

  • 你真的应该研究一下 SpriteKit。识别图像上的点击很容易,但是在它们被动画化时做到这一点就不那么容易了。 SpriteKit 是一个简单的 2d 游戏引擎,专为这类事情而构建。

标签: swift uiimageview clickable


【解决方案1】:

这非常简单,只需使用 UITapGestureRecognizer。我通常将识别器初始化为全局变量。

let tapRecognizer = UITapGestureRecognizer()

然后在你的 viewDidLoad 中:

// Replace with your function
tapRecognizer.addTarget(self, action: "removeBlock")
imageView.addGestureRecognizer(tapRecognizer)

【讨论】:

  • 谢谢,但它仍然不起作用:(我在 createBlock 函数中有“removeBlock”函数,所以也许这就是它不起作用的原因?我应该添加“tapRecognizer. addTarget(self, action: "removeBlock") imageView.addGestureRecognizer(tapRecognizer)" 代码在 createBlock 函数内吗?
【解决方案2】:
func removeImage(gesture: UIGestureRecognizer) {
    gesture.view?.removeFromSuperview()
}

func createBlock() {
    let imageName = "block.png"
    let image = UIImage(named: imageName)
    let imageView = UIImageView(image: image!)

    imageView.frame = CGRect(x: xPosition, y: -50, width: size, height: size)

    imageView.userInteractionEnabled = true                       // IMPORTANT
    imageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "removeImage:"))

    self.view.addSubview(imageView)

    UIView.animateWithDuration(duration, delay: delay, options: options, animations: {

        imageView.backgroundColor = UIColor.redColor()
        imageView.frame = CGRect(x: self.xPosition, y: 590, width: self.size, height: self.size)

    }, { _ in
        imageView.removeFromSuperview()
        self.life-=1
    })
}

注意imageView.userInteractionEnabled = true 这真的很重要,因为这将允许该视图上的触摸事件,它在 UIImgageView 中设置为 false 作为默认值。

【讨论】:

  • 谢谢@Arbitur ,但它仍然没有工作......当我点击块时,没有任何反应......
  • 对我有用,但我在删除 UIView 动画时进行了测试。如果您在制作动画时尝试将其移除,这是错误的方法,因为在制作动画时点击事件不起作用。
  • 我想我现在知道你在做什么了 :) 你正在制作一个游戏,而“方块”是某种敌人,如果你在它们之前不点击它们......你会失去一些东西一条生命。那么这对你来说绝对是错误的方法。
  • 是的,这就是我想做的,但它就是行不通!你说这是错误的方法,你有什么建议?
  • 我不确定最好的解决方案,但使用 NSTimer 更新 UI 可以处理点击事件,但它更难编程。否则也许 SpriteKit 有你可能想要使用的东西,看看它。
猜你喜欢
  • 2023-04-01
  • 2016-07-04
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多