Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

209
Visualizações
Animaciones con safeAreaLayoutGuide (Swift 5)

Me gustaría una animación fluida de esta vista cada vez que se selecciona y se deselecciona la barra de búsqueda. Ahora mismo está entrecortado:

ingrese la descripción de la imagen aquí

Aquí está mi código a continuación en searchResultsUpdater. Por lo que entiendo, estas funciones deberían manejar las animaciones, no estoy seguro de qué está mal aquí:

 func updateSearchResults(for searchController: UISearchController) { //MapView moves up when search bar is selected if searchController.isActive == true{ UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIView.KeyframeAnimationOptions(rawValue: 7), animations: { self.mapView.frame.origin.y=self.view.safeAreaLayoutGuide.layoutFrame.origin.y },completion: nil) } //MapView moves down when cancel button is selected if searchController.isActive == false{ UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIView.KeyframeAnimationOptions(rawValue: 7), animations: { self.mapView.frame.origin.y=self.view.safeAreaLayoutGuide.layoutFrame.origin.y },completion: nil) } }

¡Cualquier ayuda se agradece, gracias!

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Encontré la solución. Originalmente tenía el CGRect para el marco mapView en viewDidLayoutSubviews():

 override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() //layout to fit frame of view mapView.frame = CGRect(x: 0, y: view.safeAreaInsets.top, width: view.frame.size.width, height: view.frame.size.height - view.safeAreaInsets.top) }

Lo moví a viewDidLoad(), y ahora funciona:

 override func viewDidLoad() { super.viewDidLoad() //add gesture recognizer for mapView mapView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(mapViewAnimation))) //layout to fit frame of view mapView.frame = CGRect(x: 0, y: view.safeAreaInsets.top, width: view.frame.size.width, height: view.frame.size.height - view.safeAreaInsets.top) }

También agregué un reconocedor de gestos para que el searchResultsUpdater no estuviera tan abarrotado:

 //handle the animation for mapview @objc func mapViewAnimation(){ UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIView.KeyframeAnimationOptions(rawValue: 7), animations: { self.mapView.frame.origin.y = self.view.safeAreaLayoutGuide.layoutFrame.origin.y },completion: nil) }

ingrese la descripción de la imagen aquí

Si alguien sabe por qué no funcionó cuando tenía el CGRect en didLayoutSubViews() no dude en hacérmelo saber. ¡Gracias!

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda