我正在做一个带有不透明度变化的滑入/滑出效果,这是通过遵循SwiftUI转换实现的

VStack {

}
.transition(
  .asymmetric(
    insertion: .opacity
      .combined(with: .offset(x: 50)),
    removal: .opacity
      .combined(with: .offset(x: -50))
  )
)

除了不透明度的变化和偏移,我想在插入时"模糊"视图,并在删除步骤中"模糊"视图.不幸的是,SwiftUI在这里看起来并不提供.blur个转换来组合,所以我想问一下,是否有可能以某种方式添加这些类型的自定义转换并与它们组合?

推荐答案

💡我使用一个简单的动画,因为它是相同的一个你已经提供

方法1:将修改量应用于条件视图

将条件视图包装在一组中,并根据如下条件应用模糊:

Group { // 👈 Wrap the condition
    if showDetails {
        Text("This is the label")
            .transition(.opacity.combined(with: .offset(x: -50)))
    }
}
.blur(radius: showDetails ? 0 : 10) // 👈 Use the modifier on the group

Demo

Demo


Method 2: Custom Transition

您可以使用自定义AnimatableModifier创建自定义过渡.

@Baffo rasta在我还没有来得及完成我的答案之前就提到了this method个,这应该是我的功劳,但以下是我的,这是他的某种重构版本:

struct Blur: AnimatableModifier {
    init(radius: Double = 0) { animatableData = radius }
    var animatableData: Double

    func body(content: Content) -> some View {
        content.blur(radius: animatableData)
    }
}

extension AnyTransition {
    static var blur: AnyTransition {
        AnyTransition.modifier(active: Blur(radius: 10.0), identity: .init())
    }
}

用途:

.opacity
    .combined(with: .offset(x: -50))
    .combined(with: .blur) // 👈 Combine with other transitions

Ios相关问答推荐

带外部笔划的圆形进度视图

SWIFT中具有可选返回类型和泛型的网络请求

如何在iPhone 15上消除.NET Maui中状态栏和页面之间的差距

swiftui动画如何实时确定不对称过渡

保存和读取登录到 keys 串不工作 IOS swift

Strange UIView.animate更改UIButton标题 colored颜色 的行为

创建 Flutter 项目时,如何从我的系统中删除特定的开发者身份?

xcode-select:找不到clang

react 在 android 上运行的本机应用程序,但在 iOS 上出现问题,详细信息在描述中共享

如何在不支持并发的自动关闭中修复'async'调用?

按钮在 SwiftUI 中没有采用给定的高度和宽度

通过MatchedGeometryEffect向上滑动视图

如何在保持纵横比的同时zoom UIView 的内容以适应目标矩形?

在iOS7半透明导航栏中获取正确的 colored颜色

在 iOS 中获取设备位置(仅限国家/地区)

Xcode 11 向后兼容性:UIWindowScene 仅在 iOS 13 或更高版本中可用

iOS:设备旋转后如何运行函数(Swift)

更新字段时,UITextField值已更改未触发

在 NSUserDefaults 中存储值是否有任何限制?

在转发类对象中找不到属性