简体   繁体   English

点击时的UIImageView图像更改延迟

[英]UIImageView image change delay when tapped

I have a UIImageView with a tap gesture recognizer. 我有一个带有点击手势识别器的UIImageView。 When tapped I want the UIImageView to alternate between 2 images. 点击时,我希望UIImageView在2张图像之间交替显示。 The code I have achieves this but when the UIImageView is tapped repeatedly very quickly the UIImageView seems to lag and get behind. 我拥有的代码可以实现这一点,但是当UIImageView很快被反复轻按时,UIImageView似乎会滞后并落后。

My Code: 我的代码:

@IBOutlet weak var moneyButton: UIImageView!

let benchUpImage = UIImage(named: "benchUp")
let benchDownImage = UIImage(named: "benchDown")
var benchIsDown = false

func moneyButtonPressed(sender: UITapGestureRecognizer){

    if benchIsDown == false{
        moneyButton.image = benchDownImage
        benchIsDown = true
    }else{
        moneyButton.image = benchUpImage
        benchIsDown = false
    }

}

Swift 3.0 斯威夫特3.0

You can simply allow user to tap with some delay. 您可以简单地允许用户稍稍延迟一下。 Consider replacing your code by below one 考虑将代码替换为以下代码之一

var canUserTap = true
let delayTime = 0.4 //setDelayTimming in seconds
@IBAction func moneyButtonPressed( _ sender : UITapGestureRecognizer){
    if(canUserTap){
        if benchIsDown == false{
            moneyButton.image = benchDownImage
            benchIsDown = true
        }else{
            moneyButton.image = benchUpImage
            benchIsDown = false
        }
        canUserTap = false
        Timer.scheduledTimer(timeInterval: delayTime,
                             target:self,
                             selector:#selector(allowUserTap(_:)),
                             userInfo:nil,
                             repeats:false)
    }

}

func allowUserTap(_ timer:Timer){
    canUserTap = true

}

I think the problem with your code is that you don't handle the states of the recognizer. 我认为您的代码存在的问题是您不处理识别器的状态。 Thus, multiple tapping quickly make the image change at every state (begin, end, etc). 因此,多次轻击可以使图像在每种状态(开始,结束等)都发生变化。 Try to put the changing code in state "end" only: 尝试仅将更改的代码置于状态“ end”:

func moneyButtonPressed(sender: UITapGestureRecognizer){

   if sender.state == .Ended {
    if benchIsDown == false{
        moneyButton.image = benchDownImage
        benchIsDown = true
    }else{
        moneyButton.image = benchUpImage
        benchIsDown = false
    }
   }

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM