7
votes

Tweetbot bannière image tirer pour zoomer image

Tweetbot et Kickstarter pour iOS utilise une fonctionnalité Cool sur les profils d'utilisateur ayant une image de bannière. Si vous retirez sur le TableView L'image zooms.

Je travaille partiellement en utilisant ce qui suit, il modifie la hauteur de l'image, mais étrangement, pas la largeur: < Pré> xxx

Est-ce que quelqu'un sait comment recréer cet effet?


0 commentaires

6 Réponses :


0
votes

Je pense que c'est simplement redimensionner la vue de l'image pour adapter l'espace vertical tout en conservant le même rapport d'aspect.


1 commentaires

Je l'ai fait et j'ai ajouté le code ci-dessus. Cela fait un peu de travail, mais pour une raison quelconque, la largeur ne change jamais, même si le NSLog indique que le cadre est modifié. La hauteur est changée.



35
votes

OK, je l'ai compris. Voici ce que j'ai fait: xxx


6 commentaires

@Nic Hubbard, j'essaie d'avoir un effet difficile d'obtenir cet effet dans un Uiscrollview. L'image ne colle pas au sommet. Pouvez-vous m'aider. ?


@ Priyatham51 - Cela fait plus d'un an depuis que je l'ai fait, donc je ne me souviens plus de l'ins et des aboutissants.


@Nichubbard, je l'ai réussi avec des contraintes de mise en page automatiques telles que décrivez ici ( blog.domesticcat.com.au/ios/2014/03/19/... ). Merci pour votre réponse. :)


Où est la définition @property? obtenu moins de moi.


Ce qui précède est correct, mais lorsque l'image est inférieure à celle de la taille réelle de la vue, l'image a tendance à aligner sur le coin droit. Peut être résolu en créant une vue uiimage des mêmes limites


@ Priyatham51 Si vous modifiez la dernière ligne à cette vue, la vue collera au sommet: Self.ImageView.center = cgPointMake (self.view.center.x, self.view.center.xer.y - y);



0
votes

Version SWIFT 2 de la réponse de Nic Hubbard:

var imageView: UIImageView!
var cachedImageViewSize: CGRect!

override func viewDidLoad(){

   super.viewDidLoad()

   self.imageView = UIImageView(image: UIImage(named: "church-welcome.png"))
   self.imageView.contentMode = .ScaleAspectFill
   self.cachedImageViewSize = self.imageView.frame
   self.tableView.addSubview(self.imageView)
   self.tableView.sendSubviewToBack(self.imageView)
   self.tableView.tableHeaderView = UIView(frame: CGRectMake(0, 0, self.view.frame.size.width, 170))

}

func scrollViewDidScroll(scrollView: UIScrollView) {
var y: CGFloat = -scrollView.contentOffset.y
if y > 0 {
    self.imageView.frame = CGRectMake(0, scrollView.contentOffset.y, self.cachedImageViewSize.size.width + y, self.cachedImageViewSize.size.height + y)
    self.imageView.center = CGPointMake(self.view.center.x, self.imageView.center.y)
   }
}


0 commentaires

1
votes

La réponse ci-dessus pour Swift:

Décélérations variables: xxx

ViewDidLoad: xxx

ScrollViefDidscroll: xxx


0 commentaires

1
votes

Version SWIFT 3.0 de la réponse de Nic Hubbard:

override func viewDidLoad() {

    self.imageView = UIImageView(image: UIImage(named: "header-image"))
    imageView.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 170)
    self.imageView.contentMode = .scaleAspectFill
    self.cachedImageViewSize = self.imageView.frame
    self.tableView.addSubview(self.imageView)

    self.imageView.center = CGPoint(x: self.view.center.x, y:self.imageView.center.y)
    self.tableView.sendSubview(toBack: self.imageView)
    self.tableView.tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 170))
}

override func scrollViewDidScroll(_ scrollView: UIScrollView) {
    let y: CGFloat = -scrollView.contentOffset.y
    if y > 0 {
        self.imageView.frame = CGRect(x: 0, y: scrollView.contentOffset.y, width: self.cachedImageViewSize.size.width + y, height: self.cachedImageViewSize.size.height + y)
        self.imageView.center = CGPoint(x: self.view.center.x, y: self.imageView.center.y)
    }
}


0 commentaires

0
votes

Les solutions mentionnées ci-dessus ne fourniront pas vraiment la mise en œuvre exacte de la manière dont il se trouve dans Tweetbot ou Tinder [Picture de profil de la cible Zoom].

J'ai également dû résoudre ce problème et la mise en œuvre la plus parfaite que j'ai trouvée est d'utiliser 2 éléments principaux: p>

1) TableView qui a contesté INSET P>

2) IMAGEVoir la vue de cette table qui a une sortie pour la contrainte supérieure et la contrainte de hauteur et qui est au-dessus de Cet espace vide fourni par le contenu de la TableView Inset. p>

alors assurez-vous d'abord de définir les embarqués pour la validation de la View et de la hauteur initiale pour l'imageView. Vous pouvez le faire dans ViefDiDload par exemple. P>

imageView.contentMode = .scaleAspectFill
layer.masksToBounds = true


0 commentaires