显示 1 秒后自动关闭模式 - swiftui
Posted
技术标签:
【中文标题】显示 1 秒后自动关闭模式 - swiftui【英文标题】:Dismiss modal automatically after 1 sec of being shown - swiftui 【发布时间】:2021-09-13 05:28:17 【问题描述】:有没有办法在显示 1 秒后自动关闭模态(.sheet)?无需任何用户干预。
我想显示它从底部开始,1 秒,然后消失(如果可能,动画向上)
基本上我有 1 个视图显示匹配信息,然后我单击下一步或不喜欢,我想显示一个 fullScreenCover 1 秒,将我丑陋的滚动隐藏到顶部以显示下一个匹配。这是相同的视图,但在数组中显示了一个新元素
谢谢/感谢/感谢
ScrollViewReader ProxyReader in
ScrollView(.vertical, showsIndicators: false, content:
Group
//CustomImageView(urlString: model.matches[index].imageUrl3 ?? "")
if model.matches[index].imageUrl3 == ""
Image(systemName: "person")
.frame(width: 300, height: 300, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
.aspectRatio(contentMode: .fit)
else
RemoteImage(url: model.matches[index].imageUrl3!)
.aspectRatio(contentMode: .fit)
.frame(width: 200)
Text(model.matches[index].bucketList)
.padding()
)//scroll view
//to recreate the veiw from scratch
.id(self.scrollViewID)
//this is to show the rejection button
.overlay(
Button(action:
//move to the next match
self.isPresented.toggle()
if self.index == model.matches.count-1
//go back to first match
self.index = 0
else
self.index += 1
//scroll to top
withAnimation(.spring())
ProxyReader.scrollTo("SCROLL_TO_TOP", anchor: .top)
//how to dismiss and delay animation for 2 secs!!
self.isPresented.toggle()
, label:
Image(systemName: "xmark.circle.fill")
.font(.system(size:50, weight: .semibold))
.foregroundColor(.white)
.padding()
.background(Color("red"))
.clipShape(Circle())
)
.padding(.trailing)
.padding(.bottom, getSafeArea().bottom == 0 ? 12 : 0) //this is an if statement
//.opacity(-scrollViewOffset > 450 ? 1 : 0)
.animation(.easeInOut)
//to show rejection transition
.fullScreenCover(isPresented: $isPresented, content:
FullScreenModalView.init(
DispatchQueue.main.asyncAfter(deadline: .now() + 1)
isPresented = false
)
)
【问题讨论】:
将你的代码缩减为minimal reproducible example 哎呀,它去 【参考方案1】:如果我得到您的要求,解决方案是使用DispatchQueue.main.asyncAfter()
:
//to show rejection transition
.fullScreenCover(isPresented: $isPresented, content:
FullScreenModalView.init()
DispatchQueue.main.asyncAfter(deadline: .now() + 1)
isPresented = false
)
请注意,这可能并不完全准确,因为触发时间取决于当时操作系统的繁忙程度,但通常会非常好。此外,您通常希望在关闭模式时进行一些用户交互,因为用户可能会在您显示它的第二秒内将视线移开。
【讨论】:
以上是关于显示 1 秒后自动关闭模式 - swiftui的主要内容,如果未能解决你的问题,请参考以下文章