在 iOS 中自定义 Swift 可刷新视图

Customize Swift Refreshable View in iOS

提问人:ahmed 提问时间:10/10/2023 最后编辑:halferahmed 更新时间:10/20/2023 访问量:55

问:

我想在滚动视图上使用 swifts 可刷新修饰符,但是我不想要默认的加载图标。我怎样才能隐藏它,以便我可以显示我自己的,有没有办法在拖动完成后显示加载图标几秒钟?

我找不到任何修饰符或内置方法来执行此操作。我认为添加清晰的色调可能会起作用,但这会导致其他问题。

import SwiftUI
   struct ContentView: View {
       var body: some View {
           ScrollView {
               RefreshableView()
           }
           .refreshable { 
               //some action
           }
       }
   }

   struct MyProgress: View {
       @State private var isProgress = false
       var body: some View {
           HStack{
                ForEach(0...4, id: \.self){index in
                     Circle()
                           .frame(width:10,height:10)
                           .foregroundColor(.red)
                           .scaleEffect(self.isProgress ? 1:0.01)
                           .animation(self.isProgress ? Animation.linear(duration:0.6).repeatForever().delay(0.2*Double(index)) :
                                .default
                           , value: isProgress)
                }
           }
           .onAppear { isProgress = true }
           .padding()
       }
   }

   struct RefreshableView: View {
       @Environment(\.refresh) private var refresh

       @State private var isRefreshing = false

       var body: some View {
           VStack {
               if isRefreshing {
                   MyProgress().transition(.scale)
               }
           }
           .animation(.default, value: isRefreshing)
           .background(GeometryReader {
               Color.clear.preference(key: ViewOffsetKey.self, value: -$0.frame(in: .global).origin.y)
           })
           .onPreferenceChange(ViewOffsetKey.self) {
               if $0 < -80 && !isRefreshing {
                   isRefreshing = true
                   Task {
                   }
               }
           }
       }
   }
}
iOS 阵列 Swift 异步 SwiftUI

评论

0赞 Sweeper 10/10/2023
查看 stackoverflow.com/q/72026893/5133585

答: 暂无答案