我如何在Swift中使一个图像自己移动?

2022-01-28 06:20:41 标签 iosswiftimageuigesturerecognizer

这是我的代码,使我的图像随机移动被点击(使用手势识别器)。

但我希望它能不断地,自动地运动,它自己不停地运动。

let x = Int.random(in: 0...275)
let y = Int.random(in: 210...565)
UIView.animate(withDuration: 0, delay: 0, options: .curveLinear, animations: {
    self.randomView.center.y = CGFloat(y)
    self.randomView.center.x = CGFloat(x)
}, completion: nil)

如果需要,我可以从ViewController文件共享整个代码。

###在回答你的问题,你可以递归调用一个延迟的方法。

话虽如此,你看起来一点也不活跃。如果你只是想把它移动到不同的位置,你可以这样做:

weak var timer: Timer?
func moveToRandomLocation() {
    let x = Int.random(in: 0...275)
    let y = Int.random(in: 210...565)
    
    randomView.center = CGPoint(x: x, y: y)
    
    timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: false) { [weak self] _ in
        self?.moveToRandomLocation()
    }
}

这移动了它一个半秒之后就叫它自己了。而[弱自我]捕获列表避免了强引用循环。我用一个Timer Timer会使那个Timer失效如果你想停止它的话。

或者只是使用重复计时器:

weak var timer: Timer?
func startMovingToRandomLocations() {
    timer = Timer.scheduledTimer(withTimeInterval: 0.5, repeats: true) { [weak self] _ in
        let x = Int.random(in: 0...275)
        let y = Int.random(in: 210...565)
        self?.randomView.center = CGPoint(x: x, y: y)
    }
}

无论哪种方式,当你想停止它(包括在deinit实现中)调用:

timer?.invalidate()

如果你想做动画,你会使用非零的持续时间。

func moveToRandomLocation() {
    let x = Int.random(in: 0...275)
    let y = Int.random(in: 210...565)
    
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveLinear) {
        self.randomView.center = CGPoint(x: x, y: y)
    } completion: { [weak self] _ in
        self?.moveToRandomLocation()
    }
}
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码