2010-09-07 5 views

Répondre

8

Jetez un oeil à this vidéo

Description à partir de la vidéo:

  • Ajouter UIScrollViewDelegate délégué
  • Prenez un UIScrollView
  • Prenez un UIImageView qui va être ajouté sur ScrollView
  • Placez la vue déroulante dans la fenêtre principale
  • Connectez les délégués
  • Configuration imageView
  • Définir l'échelle de zoom max/min [chose ici noyau]
  • Mettre en œuvre la méthode de délégué pour retourner la vue
+27

@Jigar Joshi, votre réponse n'est pas une réponse, en fait. Je ne sais pas pourquoi vous avez demandé à l'OP de l'accepter. Maintenant, je dois aller regarder la vidéo pour se souvenir de la réponse à cette question simple? –

+0

@Yar si OP accepte + upvotes signifie que sa question a été répondue avec succès. Si vous avez une question différente à l'esprit, ce n'est pas la réponse à cette question. s'il vous plaît revenir en arrière votre mauvais downvote –

+3

@Jigar Joshi, ne peut pas revenir sur la baisse car il est trop tard. Tu devrais changer ta réponse. Pourquoi ne pas ajouter quelques instructions sur la façon de faire ce que l'OP voulait faire, qui ne nécessite pas de regarder une vidéo? –

171

réponse est here:

Les affichage défilement gère également le zoom et le panoramique du contenu. Lorsque l'utilisateur fait un pincement ou geste de pincement-out, la vue de défilement ajuste le décalage et l'échelle du contenu. Lorsque le geste se termine, l'objet gestion de l'affichage du contenu devrait mettre à jour devrait subviews du contenu nécessaire. (Notez que le mouvement peut se terminer et qu'un doigt peut toujours être hors service.) Pendant que le mouvement 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 le zoom et le panoramique pour fonctionner, le délégué doit implémenter à la fois viewForZoomingInScrollView: et scrollViewDidEndZooming: withView: atScale :; en plus, la maximale (maximumZoomScale) et minimum ( minimumZoomScale) échelle de zoom doit être différent.

Alors:

  1. Vous avez besoin d'un délégué qui implémente UIScrollViewDelegate et est mis à delegate sur votre UIScrollView exemple
  2. Sur votre délégué vous devez mettre en œuvre une méthode: viewForZoomingInScrollView: (qui doit retourner le vue du contenu que vous êtes intéressé par le zoom). Vous pouvez également implémenter scrollViewDidEndZooming:withView:atScale: en option.
  3. Sur votre instance UIScrollView, vous devez régler le minimumZoomScale et maximumZoomScale être différent (ils sont 1,0 par défaut).

Note: La chose intéressante à ce sujet est que si vous voulez pause zooming. Est-il suffisant de retourner nil dans la méthode viewForZooming...? Il casse le zoom, mais certains gestes seront foireux (pour deux doigts). Par conséquent, pour casser le zoom, vous devez régler l'échelle de zoom min et max à 1.0.

+16

Excellente réponse - cela m'a exactement ce dont j'avais besoin. (De plus, je n'ai pas eu à aller regarder une vidéo!) – Olie

+1

merci. chose la plus importante est la deuxième étape ici, qui ne se trouve pas dans la réponse originale – thgc

+1

très bonne réponse! – Microns

-1

Je ne pense pas que cela fonctionne pour iOS 5.0 et Xcode 4.3+ Im recherchant la même chose ici, j'ai trouvé ceci est pour les images, mais il peut vous aider.

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

+0

pas besoin de définir la taille du contenu de scrollview et la solution ci-dessus fonctionne parfaitement sur Xcode 4.3+ et iOS 5.0 aussi – Deepak

+1

Bien que ce soit potentiellement une bonne réponse, il s'agit essentiellement d'une ** ** "lien uniquement" ** réponse. Vous devriez inclure quelques informations de vos liens afin que si l'information derrière les liens est jamais changée/perdue, la réponse a toujours du sens. Voir [ce lien] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-ansans-not-an-answer) –

6

Bonne lecture à travers ce tutoriel Ray Wenderlich:

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

Si vous suivez à travers la section 'Scrolling et Zooming une plus grande image' il obtiendra une image et vous permettre pincer et zoomer.

Si le lien se modifier, voici la principale info: 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 si vous voulez que le geste double tap pour être 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.

+1

Bien que ce soit potentiellement une bonne réponse, il s'agit essentiellement d'une réponse ** "lien uniquement" **. Vous devriez inclure quelques informations de vos liens afin que si l'information derrière les liens est jamais changée/perdue, la réponse a toujours du sens. Voir [ce lien] (http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-ansans-not-an-answer) –

0

Assurez-vous de définir votre viewController en tant que délégué scrollViews et mettre en œuvre:

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