2017-09-08 4 views
0

J'essaie d'obtenir un UIView pour glisser vers le haut à partir du bas de l'écran. J'ai créé le UIView en tant que fichier nib distinct. J'ajoute d'abord la vue au-delà du port d'affichage de l'écran, puis j'anime la valeur y pour la faire glisser vers le haut.UIView ne glisse pas par le bas

self.bannerView = BannerView(frame: CGRect(x: 10, y: self.view.bounds.height, width: self.view.bounds.width - 10, height: 44)) 
self.collectionView?.addSubview(self.bannerView!) 

UIView.animate(withDuration: 0.5) { 
    self.bannerView?.frame.origin.y = self.bannerView!.frame.origin.y - 64 
} 

Cependant, cela ne semble pas fonctionner. La vue ne s'affiche pas. Mais les calculs semblent être corrects. Je ne peux pas comprendre ce qui ne va pas.

Exemple de projet téléchargé here.

+0

Êtes-vous poussant juste hors de l'écran plus avec vos calculs? – solenoid

Répondre

2

Vous devez changer l'ensemble frame au lieu de simplement la valeur y - qui ne fonctionnera pas.

À titre d'illustration - vous pouvez vous référer à https://youtu.be/2kwCfFG5fDA?list=PL0dzCUj1L5JGKdVUtA5xds1zcyzsz7HLj&t=993 dans lequel il a été démontré que votre problème était de travailler en changeant de cadre. L'exemple est au-dessus de la vidéo est également dans Swift correspondant ainsi à votre besoin dans la question.

+1

Merci. Cela a effectivement fonctionné. – Isuru

0

Je n'ai pas validé vos maths, mais essayez de définir le cadre entier au lieu de changer une propriété de l'image affectée car cela ne fonctionnera pas.

var frame = self.bannerView!.frame 
frame.origin.y = frame.origin.y - 64 
self.bannerView?.frame = frame 
0

Une solution de ligne:

self.bannerView?.frame = self.bannerView!.frame.offsetBy(dx: 0, dy: -64) 

(coller ce à l'intérieur du bloc d'animation)