首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >影响其他视图的SwiftUI图像不透明度动画

影响其他视图的SwiftUI图像不透明度动画
EN

Stack Overflow用户
提问于 2021-09-26 20:12:38
回答 1查看 127关注 0票数 0

我正在尝试建立一个带有进度条和状态图标的列表。我想用动画图标来指示某个下载活动正在进行中。但是,当我应用动画时,它也会影响进度条并使其产生动画效果。

下面是列表视图的代码:

代码语言:javascript
复制
List(syncProgres.downloadQueue) { mediaFile in
    VStack(alignment: .leading) {
        Text(mediaFile.path).font(.callout).lineLimit(2).truncationMode(.middle)
        Spacer()
        ProgressView(value: Double(mediaFile.downloadedBytes) / Double(mediaFile.downloadTotalBytes))
        HStack {
            Text("\(MiscUtils.toHumanReadable(bytes: mediaFile.downloadedBytes)) of \(MiscUtils.toHumanReadable(bytes: mediaFile.downloadTotalBytes))").font(.footnote)
            Spacer()
            Image(systemName: "arrow.down.doc").opacity(opacity)
                .onAppear {
                    let baseAnimation = Animation.linear(duration: 1)
                    let repeated = baseAnimation.repeatForever(autoreverses: true)
                    
                    withAnimation(repeated) {
                        opacity = 0.2
                    }
                }
        }
    }.frame(height: 80, alignment: .center)
}
EN

回答 1

Stack Overflow用户

发布于 2021-09-27 17:27:30

所以swiftUI视图修饰符从下到上工作,如果进度条从它下面的视图获取动画,在你不想受影响的视图下面添加'.animation(.default)‘。

代码语言:javascript
复制
List(syncProgres.downloadQueue) { mediaFile in
    VStack(alignment: .leading) {
        Text(mediaFile.path).font(.callout).lineLimit(2).truncationMode(.middle)
        Spacer()
        ProgressView(value: Double(mediaFile.downloadedBytes) / Double(mediaFile.downloadTotalBytes))
            .animation(.default)
        HStack {
            Text("\(MiscUtils.toHumanReadable(bytes: mediaFile.downloadedBytes)) of \(MiscUtils.toHumanReadable(bytes: mediaFile.downloadTotalBytes))").font(.footnote)
            Spacer()
            Image(systemName: "arrow.down.doc").opacity(opacity)
                .onAppear {
                    let baseAnimation = Animation.linear(duration: 1)
                    let repeated = baseAnimation.repeatForever(autoreverses: true)                
                    withAnimation(repeated) {
                        opacity = 0.2
                    }
                }
        }
    }.frame(height: 80, alignment: .center)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69338607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档