Ran dans un problème avec une animation d'image UIView. La vue doit animer à la fois l'origine et la taille, la taille augmentant et l'origine se déplaçant linéairement pour conserver la vue au même endroit. Mais ce qui se passe est que la vue diminue jusqu'à la taille (0,0) et augmente ensuite jusqu'à une taille qui n'est toujours pas la taille correcte. Voir la vidéo ci-jointe.UIImageView l'image ne s'anime pas comme prévu (taille et origine)
Vidéo de la question: https://media.pairby.com/I/u/a/IualExcJXn7CqLsGkcNZfwyEw5MKi3SV/v.mp4
func animateIn() {
// Make _iconView large
let w = bounds.width
_iconView.frame = CGRect(
x: frame.midX - w/2,
y: frame.midY - w/2,
width: w, height: w)
isHidden = false
UIView.animate(withDuration: 0.2, animations: {
self.alpha = 1
// Animate it smaller
let w = self.bounds.width * 0.5
self._iconView.frame = CGRect(
x: self.frame.midX - w/2,
y: self.frame.midY - w/2,
width: w, height: w)
})
}
func animateOut() {
UIView.animate(withDuration: 3, delay: 0, options: .beginFromCurrentState, animations: {
self.alpha = 0
// Make it large again
let w = self.bounds.width
self._iconView.frame = CGRect(
x: self.frame.midX - w/2,
y: self.frame.midY - w/2,
width: w, height: w)
}, completion: { _ in self.isHidden = true })
}
Plus de détails:
self
est une sous-classe de UIView, contraint à un superview.
_iconView
est un UIImageView
animateIn
est garanti à courir avant animateOut
animateOut
est la fonction qui ne fonctionne pas comme prévu, animateIn
fonctionne
Je pense que vous oubliez le fait que parce que vous avez réduit de moitié la largeur avant que l'animation est réellement égale à la moitié de ce que vous pensiez (la taille d'origine). donc il ne revient qu'à la moitié de la taille que vous attendez – torinpitchers
'_iconView' est-il un' UIImageView', avec une image "X"? Est-ce que 'self' est la" vue principale "ou un' UIView' sous-classé? Essayez-vous de "faire croître" le X sur toute la largeur de la vue, et de le faire disparaître en transparence? – DonMag
Hey, @torinpitchers. Je n'ai pas réduit de moitié la largeur de l'aperçu (auto). J'utilise les limites de l'aperçu lors des calculs. – Travo