繁体   English   中英

无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition

[英]Cannot drive UIView.transition with the UIViewPropertyAnimator.fractionComplete

我正在尝试使用滑块驱动具有 2 个图像值(在本例中)的 UIImageView 的转换,但是在UIViewPropertyAnimator (应该可以工作)中使用UIView.transition却没有。 我错过了什么吗?

let animator = UIViewPropertyAnimator(duration: 3.0, curve: .linear)

let crossDissolve = {
  self.imageView.image = UIImage(named: "deadpool.jpg")
  UIView.transition(
    with: self.imageView,
    duration: 4.0,
    options: .transitionCrossDissolve,
    animations: {},
    completion: nil
  )
}

animator.addAnimations(crossDissolve)

这是一个带有问题示例的操场,只需将滑块从一侧拖到另一侧,图像就会柔和地交叉溶解

就像是:

图片

游乐场: https : //www.dropbox.com/s/ix8nfxg43ij68q3/UIViewPropertyAnimator.playground.zip? dl =0

在你没有在动画闭包中定义任何动画的代码中,我对这个 API 不是很熟悉,但我假设你会想要这样的东西。(我没有测试过这段代码)

let animator = UIViewPropertyAnimator(duration: 3.0, curve: .linear)

let crossDissolve = {
  UIView.transition(
    with: self.imageView,
    duration: 4.0,
    options: .transitionCrossDissolve,
    animations: {
        self.imageView.image = UIImage(named: "deadpool.jpg")
    },
    completion: nil
  )
}

animator.addAnimations(crossDissolve)

然后,您可以使用在滑块.valueChanged事件上调用的函数来处理动画进度

slider.addTarget(self, action: #selector(sliderValueChanged(_:)), for: .valueChanged) 

func sliderValueChanged(sender: UISlider) {
    myAnimation.fractionComplete = CGFloat(sender.value)
}

暂无
暂无

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

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