2017-08-03 2 views
0

J'essaie de créer l'effet que lorsque vous faites défiler/glisser vers le bas, l'UIView sur le dessus du contrôleur de vue rétrécira et la partie inférieure se développera.Comment ajouter une animation de diapositive à uiview hauteur constante?

Voici mon code pour le geste de balayage que j'ai ajouté à la vue supérieure.

@IBAction func swipeUp(_ sender: UISwipeGestureRecognizer) { 
     if(upperView.isHidden == false){ 
      upperView.isHidden = true 
      self.heightUpperView.constant = 0 
      self.view.layoutIfNeeded() 
     } 
     else{ 
      self.heightUpperView.constant = 372 
      upperView.isHidden = false 
      self.view.layoutIfNeeded() 
     } 
    } 

Cela fonctionne mais il manque d'animation. Je me demande quelle serait la meilleure approche pour imiter l'animation de défilement ou l'animation d'en-tête collante.

Nous vous remercions de votre aide à l'avance.

Répondre

1

self.view.layoutIfNeeded() doit être appelé à partir UIView.animateWith.... Voici un exemple avec votre code:

@IBAction func swipeUp(_ sender: UISwipeGestureRecognizer) 
{ 
    // Set new constants first 
    if(upperView.isHidden == false) 
    { 
      upperView.isHidden = true 
      self.heightUpperView.constant = 0 
    } 
    else 
    { 
      self.heightUpperView.constant = 372 
      upperView.isHidden = false 
    } 

    // This line will animate all your constraint changes 
    UIView.animate(withDuration: 0.3) 
    { 
      self.view.layoutIfNeeded() 
    } 
} 
1

swift 3.0

Vous pouvez essayer ci-dessous un.

@IBAction func swipeUp(_ sender: UISwipeGestureRecognizer) { 
     if(upperView.isHidden == false){ 
      UIView.animate(withDuration: 0.8) { 
      self.upperView.isHidden = true 
      self.heightUpperView.constant = 0 
      self.view.layoutIfNeeded() 
      } 
     } 
     else{ 
      UIView.animate(withDuration: 0.8) { 
      self.upperView.isHidden = false 
      self.heightUpperView.constant = 372 
      self.view.layoutIfNeeded() 
      } 
     } 
}