提问人:ahmed 提问时间:10/10/2023 最后编辑:halferahmed 更新时间:10/20/2023 访问量:55
在 iOS 中自定义 Swift 可刷新视图
Customize Swift Refreshable View in iOS
问:
我想在滚动视图上使用 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 {
}
}
}
}
}
}
答: 暂无答案
评论