ios – 如何对两个动画进行排序,延迟时间间隔

ios – 如何对两个动画进行排序,延迟时间间隔,第1张

概述我有一个UI ImageView,我想旋转180度,占用1秒,然后我想在这个位置等待1秒,然后旋转180度回到原来的位置需要1秒钟. 我该如何做到这一点?我已经尝试了100种方法,它不断向后d回而不是向后旋转 编辑:我忘了添加我需要这个无限重复 您可以在UIView.animate上显示的completionHandler中执行第二个动画 let duration = self.transitio 我有一个UI ImageVIEw,我想旋转180度,占用1秒,然后我想在这个位置等待1秒,然后旋转180度回到原来的位置需要1秒钟.

我该如何做到这一点?我已经尝试了100种方法,它不断向后d回而不是向后旋转

编辑:我忘了添加我需要这个无限重复

解决方法 您可以在UIVIEw.animate上显示的completionHandler中执行第二个动画

let duration = self.TransitionDuration(using: TransitionContext)let firstAnimDuration = 0.5UIVIEw.animate(withDuration: firstAnimDuration,animations: {    /* Do here the first animation */}) { (completed) in   let secondAnimDuration = 0.5   UIVIEw.animate(withDuration: secondAnimDuration,animations: {        /* Do here the second animation */   })}

现在你可能有另一个问题.

如果使用CGAffinetransform旋转视图,并且为每个动画分配一个此类型的新对象到vIEw.transform,您将丢失先前的变换 *** 作

所以,根据这篇文章:How to apply multiple transforms in Swift,你需要连接转换 *** 作

2动画块的示例

这是一个旋转180并在1秒后返回原点的例子:

let vIEw = UIVIEw.init(frame: CGRect.init(origin: self.vIEw.center,size: CGSize.init(wIDth: 100,height: 100)))vIEw.backgroundcolor = UIcolor.redself.vIEw.addSubvIEw(vIEw)var transform = vIEw.transformtransform = transform.rotated(by: 180)UIVIEw.animate(withDuration: 2,animations: {    vIEw.transform = transform}) { (completed) in    transform = CGAffinetransform.IDentity    UIVIEw.animate(withDuration: 2,delay: 1,options: [],animations: {         vIEw.transform = transform    },completion: nil)}

.repeat动画和.autoreverse的示例

.animate方法使您能够设置一些动画选项.特别是结构UIVIEwAnimationoptions包含:

> .repeat,无限重复你的动画块
> .autoreverse,将您的视图恢复到原始状态

考虑到这一点,你可以这样做:

var transform = vIEw.transform.rotated(by: 180)UIVIEw.animate(withDuration: 2,delay: 0,options: [.repeat,.autoreverse],animations: {     self.myVIEw.transform = transform})

但是你需要在两个动画之间有一个延迟,所以你需要这样做:

递归动画示例和1秒的延迟

只需在VIEwController中创建一个方法,为视图设置动画.在最后一个completionHandler中,只需调用该方法来创建一个无限循环.

最后,您需要在vIEwDIDAppear上调用该方法来启动动画.

overrIDe func vIEwDIDAppear(_ animated: Bool) {    super.vIEwDIDAppear(animated)    self.animation()}func animation() {    var transform = vIEw.transform    transform = transform.rotated(by: 180)    UIVIEw.animate(withDuration: 2,animations: {        self.myVIEw.transform = transform    }) { bool in        transform = CGAffinetransform.IDentity        UIVIEw.animate(withDuration: 2,animations: {            self.myVIEw.transform = transform        },completion: { bool in            self.animation()        })    }}
总结

以上是内存溢出为你收集整理的ios – 如何对两个动画进行排序,延迟时间间隔全部内容,希望文章能够帮你解决ios – 如何对两个动画进行排序,延迟时间间隔所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1209604.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存