小编Mik*_*rdo的帖子

SwiftUI 动画:一些隐式过渡动画在 iOS 13 上被破坏了?

在 Xcode 11.3.1 和 11.4 上测试:

将隐式动画附加到过渡时,某些过渡类型似乎已损坏。具体来说,任何与位置相关的转换都不会应用给定的隐式动画。.slide, .move,.offset坏了。.opacity.scale似乎确定。(详见附件)

显式动画似乎在所有情况下都能正常工作。

即使使用自定义复合过渡,与位置相关的子过渡也不会响应隐式动画。

这是一个错误,还是预期的行为?

如果您想根据隐式属性更改为特定 UI 元素触发多个不同的动画曲线,这似乎是一个问题。

在此处输入图片说明


struct MyExample: View {

    @State private var isShowing = true

    private let myAnimation = Animation.spring(response: 0.8, dampingFraction: 0.2, blendDuration: 3.0)
    var body: some View {
        VStack(spacing:20) {
            if self.isShowing {
                Text("Opacity").modifier(MyBigFont())
                    .transition(AnyTransition.opacity.animation(myAnimation))

                Text("Scale").modifier(MyBigFont())
                    .transition(AnyTransition.scale.animation(myAnimation))

                Text("Slide").modifier(MyBigFont())
                    .transition(AnyTransition.slide.animation(myAnimation))

                Text("Move").modifier(MyBigFont())
                    .transition(AnyTransition.move(edge: .trailing).animation(myAnimation))

                Text("Offset").modifier(MyBigFont())
                    .transition(AnyTransition.offset(x: 20, y: 0).animation(myAnimation))

                Text("Custom").modifier(MyBigFont())
                    .transition(AnyTransition.myCustomTransition.animation(myAnimation))
            }

            Spacer()

            Button(action: {
                self.isShowing.toggle()
            }) {
                Text("Implicit Toggle")
            }

            Button(action: …
Run Code Online (Sandbox Code Playgroud)

animation swiftui

9
推荐指数
2
解决办法
2330
查看次数

SwiftUI 动画:如何以延迟交错重复动画

尝试在 SwiftUI 中实现以下动画,发现几乎不可能:

在此输入图像描述

总结一下效果:重复脉冲,以交错延迟来动画每个片段。对于每个段:

  • 从不透明度 = 0.5 开始,比例 = 1
  • 动画设置为不透明度 = 1.0,比例 = 1.3
  • 动画曲线开始很快,缓出时间较长

此外,每个“脉冲”之间存在延迟。

我使用 SwiftUI 能够达到的最接近效果是使用.repeatForever修改器连续重复的动画。(下面的代码。暂时忽略时间上的不匹配。)

如何在动画的每个循环之间添加延迟?

这是我的代码的结果如下:

在此输入图像描述

import SwiftUI

struct ArrowShape : Shape {

    func path(in rect: CGRect) -> Path {
        var path = Path()

        path.move(to: CGPoint(x: 0, y: 0))
        path.addLine(to: CGPoint(x: rect.size.width, y: rect.size.height/2.0))
        path.addLine(to: CGPoint(x: 0, y: rect.size.height))

        return path
    }
}

struct Arrows: View {
    private let arrowCount = 3

    @State var scale:CGFloat = 1.0
    @State var fade:Double = 0.5 …
Run Code Online (Sandbox Code Playgroud)

animation ios swift swiftui

6
推荐指数
1
解决办法
3296
查看次数

标签 统计

animation ×2

swiftui ×2

ios ×1

swift ×1