【问题标题】:Stop UIImageView from being touched more than once阻止 UIImageView 被多次触摸
【发布时间】:2017-05-07 06:41:31
【问题描述】:

我是 swift 新手,正在创建一个井字游戏,目前我的大部分功能都在工作,但无法弄清楚如何阻止一个方块被多次触摸。下面的代码是我迄今为止识别触摸的方式。

【问题讨论】:

  • 你可以在你的图片上使用标签,如果它是一个 UIImageView。将其标记为 0 未触动,1 触动,并检查标签。
  • 抱歉 Euguene,不知道如何使用标签防止 UIImageView 再次被触摸?
  • 第一次触摸时,使tag = 1,第二次触摸时,检查tag是否为1,如果是则跳过此触摸。如果我理解你在做什么正确,这应该可以解决问题。
  • @EugeneZhenyaGordin 多么丑陋的解决方法!请不要将视图标签用于此类目的
  • @EugeneZhenyaGordin 例如,我尝试过 topleft.isUserInteractionEnabled = false ,但这对我不起作用。我不明白如何在上面的代码中跳过 UIImageView?

标签: ios swift cocoa-touch uiimageview


【解决方案1】:

通常使用 iOS,您让他们为您完成工作。在你的情况下,我会使用 UIButton 类并对它们进行点击操作。

因此,只需打开您的情节提要并将您的 UIImageView 对象替换为 UIButton 对象即可。然后将图像设置为您在屏幕截图中标记的字段右侧的任何开头(从您的代码我猜它类似于Picture1.png)。

重复所有九个井字游戏按钮。

Ctrl-Track 从第一个按钮进入你的控制视图并设置动作。操作窗口应如下所示:

这应该向您的控件视图类添加一个函数,例如:

@IBAction func button(_ sender: UIButton) {
    // All your game response goes here
}

sender 是实际按下的按钮。

现在 ctrl-track 所有其他按钮到这个相同的功能。然后调用该函数,无论按下哪个按钮。使用sender在右键设置右图。

您现在可以使用所有代码填充该函数。我会排除一些游戏状态的表示 - 例如一个 2dim 数组 - 记录哪个用户点击了哪个字段,可以用来检查是否有一个用户获胜。

【讨论】:

  • 感谢@jboi 的回答,但有人告诉我,对于这个项目,我必须使用 UIImageView 的
  • 在这种情况下,您可以采取以下两种方式之一:(1)曾经坚持使用 ImageViews 的人可能没有所有的内心来正确决定。让我们找出并讨论(这将是我的方式,但我已经老了,并且在这种方式上经验丰富)并且(2)方式是在情节提要上使用一个中间步骤:将TapRecognizer 添加到每个 ImageView 和 ctrl-在视图控制器中跟踪从它们到您的功能的操作。其余的保持不变。
【解决方案2】:

如果你只是添加一个标志呢?

var isTouched = false
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    let Touch = event?.allTouches!.first!

    if topleft.frame.contains((Touch?.location(in: self.view))!) && !self.isTouched{
    self.isTouched = true
        if currentPlayer == 1 {
            topleft.image = #imageLiteral(resourceName: "Picture2.png")
            currentPlayer = 2
            playerturn.text = "Player 2, it's your turn!"
            playerturn.textAlignment = .center
        }
        else {
            topleft.image = #imageLiteral(resourceName: "Picture3.png")
            currentPlayer = 1
            playerturn.text = "Player 1, it's your turn!"
            playerturn.textAlignment = .center
        }
    }

【讨论】:

  • 我刚试过这个,但它也不起作用 Federico。我仍然可以多次点击左上角的方块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多