Trabalhar juntos para criar e crescer juntos! Este é o 29º dia da minha participação no "Nuggets Daily New Plan · August Update Challenge", clique para ver os detalhes do evento .
Antecedentes do projeto
A notificação de mensagem pode chegar oportunamente ao usuário com atualizações de status e conteúdo, e o usuário pode fazer julgamentos de acompanhamento com base na mensagem recebida. Esta é a forma mais comum de troca de informações no design de produtos.
A notificação de mensagem que aparece de cima para baixo é essencialmente um tipo de notificação de " lembrete médioApp
" que é acionado de acordo com as condições, por exemplo: toda vez que você compra online, uma notificação de mensagem será exibida após o pagamento ser bem-sucedido .
Portanto, neste capítulo, tentaremos usá SwiftUI
-lo para implementar a interação de notificação pop-up no aplicativo.
Construção do projeto
Primeiro, crie um novo SwiftUI
projeto chamado NotificationToast
.
estilo pop-up de mensagem
Construímos uma nova view NotificationToastView
e, em seguida, declaramos a variável content da view pop-up, por exemplo:
struct NotificationToastView: View {
var notificationImage: String
var notificationTitle: String
var notificationContent: String
var notificationTime: String
var body: some View {
//弹窗样式
}
}
复制代码
No código acima, declaramos 4 String
tipos de variáveis: informações de notificationImage
ícone, informações de notificationTitle
título, informações de notificationContent
conteúdo e notificationTime
tempo de envio.
Em seguida, construímos o conteúdo do estilo, exemplo:
HStack {
Image(notificationImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 60)
.clipShape(Circle())
.overlay(Circle().stroke(Color(.systemGray5), lineWidth: 1))
VStack(spacing: 10) {
HStack {
Text(notificationTitle)
.font(.system(size: 17))
.foregroundColor(.black)
Spacer()
Text(notificationTime)
.font(.system(size: 14))
.foregroundColor(.gray)
}
Text(notificationContent)
.font(.system(size: 14))
.foregroundColor(.black)
.lineLimit(4)
.multilineTextAlignment(.leading)
}
}
.padding()
.frame(minWidth: 10, maxWidth: .infinity, minHeight: 10, maxHeight: 80)
.background(.white)
.cornerRadius(8)
.shadow(color: Color(.systemGray4), radius: 5, x: 1, y: 1)
.padding()
复制代码
No código acima, construímos o layout de estilo, Image
usando a notificationImage
variável de informações da imagem, que está em uma HStack
relação de layout horizontal com outros elementos.
À direita está o texto da variável de título HStack
organizada horizontalmente notificationTitle
e o texto do notificationTime
tempo de envio, que estão espalhados Spacer
.
Na parte inferior estão as informações de conteúdo, que são organizadas verticalmente notificationContent
com as informações do título e as informações de tempo de envio .VStack
Mostramos ContentView
o efeito no exemplo:
NotificationToastView(notificationImage: "me", notificationTitle: "文如秋雨", notificationContent: "一只默默努力变优秀的产品汪,独立负责过多个国内细分领域Top5的企业级产品项目,擅长B端、C端产品规划、产品设计、产品研发,个人独立拥有多个软著及专利,欢迎产品、开发的同僚一起交流。", notificationTime: "2分钟前")
复制代码
Interação pop-up de mensagem
Em termos de interação, podemos fazer uma interação simples, criar um botão, exibir uma janela pop-up de mensagem quando o botão for clicado e aguardar 2 segundos para desaparecer automaticamente após a exibição da janela pop-up de mensagem.
A lógica de implementação também é muito simples. Podemos fazer com que a janela pop-up seja carregada fora da visualização e, quando o botão for clicado, deixar a janela pop-up de mensagem aparecer de baixo para baixo e aguardar 2 segundos antes de retornar à visualização .
Primeiro, declaramos um deslocamento para definir a posição inicial da mensagem pop-up. Exemplo:
@State var offset: CGFloat = -UIScreen.main.bounds.height / 2 - 80
复制代码
Em seguida, adicione modificadores à visualização pop-up, por 偏移量
exemplo :动画
ZStack {
NotificationToastView(notificationImage: "me", notificationTitle: "文如秋雨", notificationContent: "一只默默努力变优秀的产品汪,独立负责过多个国内细分领域Top5的企业级产品项目,擅长B端、C端产品规划、产品设计、产品研发,个人独立拥有多个软著及专利,欢迎产品、开发的同僚一起交流", notificationTime: "2分钟前")
.offset(x: 0, y: offset)
.animation(.interpolatingSpring(stiffness: 120, damping: 10))
Button(action: {
if offset <= 0 {
offset += 180
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
self.offset -= 180
}
}
}) {
Text("弹出通知")
}
}
复制代码
No código acima, deixamos NotificationToastView
a posição Y轴
de deslocamento da exibição pop-up ser a posição da variável que declaramos offset
e, em seguida, usamos a ZStack
sobreposição para exibir um botão. Quando estivermos offset
fora da exibição, clique no botão para modificar a posição do deslocamento 180
e 等待2秒
em seguida, deduza após a chamada ser bem-sucedida. Subtraia o deslocamento de volta 最初的位置
.
Visualização do projeto
Vamos ver o efeito final.
Parabéns, você concluiu todo o conteúdo deste capítulo!
Venha e experimente.
Se esta coluna for útil para você, por favor, curta, comente e siga~