Comment activer le zoom dans UIScrollView

Comment activer l’effet de zoom dans UIScrollView?

Regardez cette vidéo

Description de la vidéo:

  • Ajouter un délégué UIScrollViewDelegate
  • Prenez un UIScrollView
  • Prenez un UIImageView qui va être ajouté à Scrollview
  • Placez la vue de défilement dans la fenêtre principale
  • Connecter les delegates
  • Configurer l’imageVoir
  • Définir l’échelle de zoom max / min [élément essentiel ici]
  • Implémenter une méthode de délégué pour retourner la vue

La réponse est ici :

La vue de défilement gère également le zoom et le panoramique du contenu. Lorsque l’utilisateur effectue un pincement ou un pincement, la vue de défilement ajuste le décalage et l’échelle du contenu. Lorsque le geste se termine, l’object qui gère la vue du contenu doit mettre à jour les sous-vues du contenu si nécessaire. (Notez que le geste peut se terminer et qu’un doigt peut toujours être en panne.) Pendant que le geste est en cours, la vue de défilement n’envoie aucun appel de suivi à la sous-vue.

La classe UIScrollView peut avoir un délégué qui doit adopter le protocole UIScrollViewDelegate. Pour que le zoom et le panoramique fonctionnent, le délégué doit implémenter à la fois viewForZoomingInScrollView: et scrollViewDidEndZooming: withView: atScale :; En outre, l’échelle de zoom maximale (maximumZoomScale) et minimale (minimumZoomScale) doit être différente.

Alors:

  1. Vous avez besoin d’un délégué qui implémente UIScrollViewDelegate et qui est configuré pour delegate sur votre instance UIScrollView
  2. Sur votre délégué, vous devez implémenter une méthode: viewForZoomingInScrollView: ( qui doit renvoyer la vue du contenu qui vous intéresse dans le zoom ). Vous pouvez également implémenter scrollViewDidEndZooming:withView:atScale: optional.
  3. Sur votre instance UIScrollView , vous devez définir minimumZoomScale et maximumZoomScale pour qu’ils soient différents (ils sont 1.0 par défaut).

Note: Ce qui est intéressant à propos de cela, c’est que si vous voulez rompre le zoom. Est-ce suffisant de retourner nil dans la méthode viewForZooming... ? Il fait une pause dans le zoom, mais certains gestes seront perturbés (pour deux doigts). Par conséquent, pour interrompre le zoom, vous devez définir l’échelle de zoom min et max sur 1,0.

Lisez ce tutoriel de Ray Wenderlich:

http://www.raywenderlich.com/76436/use-uiscrollview-scroll-zoom-content-swift

Si vous suivez la section “Défilement et zoom d’une image plus grande”, une image s’affiche et vous permet de pincer et de zoomer.

En cas de modification du lien, voici les informations principales: Mettez ce code dans votre contrôleur de vue (cela définit la fonctionnalité principale):

 override func viewDidLoad() { super.viewDidLoad() // 1 let image = UIImage(named: "photo1.png")! imageView = UIImageView(image: image) imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size:image.size) scrollView.addSubview(imageView) // 2 scrollView.contentSize = image.size // 3 var doubleTapRecognizer = UITapGestureRecognizer(target: self, action: "scrollViewDoubleTapped:") doubleTapRecognizer.numberOfTapsRequired = 2 doubleTapRecognizer.numberOfTouchesRequired = 1 scrollView.addGestureRecognizer(doubleTapRecognizer) // 4 let scrollViewFrame = scrollView.frame let scaleWidth = scrollViewFrame.size.width / scrollView.contentSize.width let scaleHeight = scrollViewFrame.size.height / scrollView.contentSize.height let minScale = min(scaleWidth, scaleHeight); scrollView.minimumZoomScale = minScale; // 5 scrollView.maximumZoomScale = 1.0 scrollView.zoomScale = minScale; // 6 centerScrollViewContents() } 

Ajoutez ceci à la classe:

 func centerScrollViewContents() { let boundsSize = scrollView.bounds.size var contentsFrame = imageView.frame if contentsFrame.size.width < boundsSize.width { contentsFrame.origin.x = (boundsSize.width - contentsFrame.size.width) / 2.0 } else { contentsFrame.origin.x = 0.0 } if contentsFrame.size.height < boundsSize.height { contentsFrame.origin.y = (boundsSize.height - contentsFrame.size.height) / 2.0 } else { contentsFrame.origin.y = 0.0 } imageView.frame = contentsFrame } 

Et puis ceci si vous voulez que le geste de double tap soit reconnu:

 func scrollViewDoubleTapped(recognizer: UITapGestureRecognizer) { // 1 let pointInView = recognizer.locationInView(imageView) // 2 var newZoomScale = scrollView.zoomScale * 1.5 newZoomScale = min(newZoomScale, scrollView.maximumZoomScale) // 3 let scrollViewSize = scrollView.bounds.size let w = scrollViewSize.width / newZoomScale let h = scrollViewSize.height / newZoomScale let x = pointInView.x - (w / 2.0) let y = pointInView.y - (h / 2.0) let rectToZoomTo = CGRectMake(x, y, w, h); // 4 scrollView.zoomToRect(rectToZoomTo, animated: true) } 

Si vous voulez plus de détails, lisez le tutoriel, mais cela couvre à peu près tout.

Assurez-vous de définir votre viewController en tant que délégué scrollViews et implémentez:

 func viewForZooming(in scrollView: UIScrollView) -> UIView? { return imageView } 

Vérifiez tucan9389 / ZoomableScrollView à partir de huynguyencong / ImageScrollView.
Il suffit de créer ZoomableScrollView et d’ display(view:) appel display(view:) .

DEMO

DEMO

Usage

 import ZoomableScrollView class ViewController: UIViewController @IBOutlet weak var zoomableScrollView: ZoomableScrollView! override func viewDidLoad() { super.viewDidLoad() let myView = MyCustomView() zoomableScrollView.display(view: myView) } } 

Je ne pense pas que cela fonctionne pour iOS 5.0 et Xcode 4.3+ Je cherche la même chose ici, j’ai trouvé cela pour des images mais cela peut vous aider.

http://www.youtube.com/watch?v=Ptm4St6ySEI