繁体   English   中英

点击时的UIImageView图像更改延迟

[英]UIImageView image change delay when tapped

我有一个带有点击手势识别器的UIImageView。 点击时,我希望UIImageView在2张图像之间交替显示。 我拥有的代码可以实现这一点,但是当UIImageView很快被反复轻按时,UIImageView似乎会滞后并落后。

我的代码:

@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
    }

}

斯威夫特3.0

您可以简单地允许用户稍稍延迟一下。 考虑将代码替换为以下代码之一

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

}

我认为您的代码存在的问题是您不处理识别器的状态。 因此,多次轻击可以使图像在每种状态(开始,结束等)都发生变化。 尝试仅将更改的代码置于状态“ 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