You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI卡片滑动转场异常:仅首次滑动生效问题求助

问题原因与解决方案

你的问题核心在于视图的存在状态没有发生变化:
第一次点击按钮时,dealtCard从false切换到true,SwiftUI会插入Image视图,这时候.slide转场会正常触发。但后续点击按钮时,dealtCard始终保持true,只是更新了cardDealt的图片名称——此时Image视图只是修改了显示内容,并没有被重新插入或移除,所以转场动画不会再次执行。

解决方法一(推荐):用id强制重建视图

给Image添加.id(cardDealt),让SwiftUI认为每次卡片变化都是一个全新的视图,从而触发转场:

Image(cardDealt)
    .resizable()
    .cornerRadius(15)
    .aspectRatio(contentMode: .fill)
    .transition(.slide)
    .id(cardDealt) // 新增这行代码

解决方法二:手动控制视图的移除与插入

修改deal方法,先让旧卡片移除,再插入新卡片:

func deal() {
    // 先隐藏当前卡片
    withAnimation {
        dealtCard = false
    }
    // 等待转场完成后,更新卡片并显示
    DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
        let cpuCardValue = Int.random(in:1...50)
        cardDealt = "card" + String(cpuCardValue)
        withAnimation {
            dealtCard = true
        }
    }
}

注:延迟时间0.3可以根据实际转场动画时长调整,确保旧卡片完全消失后再显示新卡片。

内容的提问来源于stack exchange,提问作者user13470314

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:16