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

Posted

技术标签:

【中文标题】无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition【英文标题】:Cannot drive UIView.transition with the UIViewPropertyAnimator.fractionComplete 【发布时间】:2018-08-22 10:47:05 【问题描述】:

我正在尝试使用滑块驱动具有 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

【问题讨论】:

【参考方案1】:

在提供的代码中,您没有在动画闭包中定义任何动画,我对这个 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)

【讨论】:

谢谢,完整的代码在操场上,然后我添加你建议的调用

以上是关于无法使用 UIViewPropertyAnimator.fractionComplete 驱动 UIView.transition的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 StorageClass 配置卷 - 无法获取存储帐户的存储密钥

Worklight Studio 和本地开发,有时无法使用 Java 类,有时无法使用 HTML 文件

ADB无法使用解决办法

Ubuntu 80端口无法使用-非root用户无法使用1024以下端口

无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别

LINUX下的mail\mailx为啥无法使用外部SMTP发邮件