2010-02-05 2 views
5

J'ai un UIScrollView avec zoom et panoramique. Je veux que l'image défile au centre après une commande d'utilisateur. Mon problème est de calculer la taille et l'emplacement d'une image qui est au centre de l'image.Comment utiliser scrollRectToVisible pour faire défiler vers le centre d'une image?

Est-ce que quelqu'un sait comment calculer l'image correcte pour le centre de mon image? Le problème est que si le zoomScale est différent, le cadre change.

Merci!

+0

http://www.raywenderlich.com/10518/how-to-use-uiscrollview-to-scroll-and-zoom-content –

Répondre

12

est ici peut-être un peu mieux le code au cas où quelqu'un est dans le besoin ;-)

UIScrollView + CenteredScroll.h:

@interface UIScrollView (CenteredScroll) 

-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated; 

@end 

UIScrollView + CenteredScroll.m:

@implementation UIScrollView (CenteredScroll) 

-(void)scrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated 
{ 
    CGRect centeredRect = CGRectMake(visibleRect.origin.x + visibleRect.size.width/2.0 - self.frame.size.width/2.0, 
            visibleRect.origin.y + visibleRect.size.height/2.0 - self.frame.size.height/2.0, 
            self.frame.size.width, 
            self.frame.size.height); 
    [self scrollRectToVisible:centeredRect 
        animated:animated]; 
} 

@end 
+0

Super, travaille pour moi. –

-5

Bon, ça marche. Voici le code Incase quelqu'un est dans le besoin:

CGFloat tempy = imageView.frame.size.height; 
CGFloat tempx = imageView.frame.size.width; 
CGRect zoomRect = CGRectMake((tempx/2)-160, (tempy/2)-240, myScrollView.frame.size.width, myScrollView.frame.size.height); 
[myScrollView scrollRectToVisible:zoomRect animated:YES]; 
+9

Pas vraiment utile avec des nombres magiques .. –

7

Basé sur la réponse de Daniel Bauke, j'ai mis à jour son code pour inclure les zoom s Cale:

@implementation UIScrollView (jsCenteredScroll) 

-(void)jsScrollRectToVisibleCenteredOn:(CGRect)visibleRect 
          animated:(BOOL)animated 
{ 

    CGPoint center = visibleRect.origin; 
    center.x += visibleRect.size.width/2; 
    center.y += visibleRect.size.height/2; 

    center.x *= self.zoomScale; 
    center.y *= self.zoomScale; 


    CGRect centeredRect = CGRectMake(center.x - self.frame.size.width/2.0, 
            center.y - self.frame.size.height/2.0, 
            self.frame.size.width, 
            self.frame.size.height); 
    [self scrollRectToVisible:centeredRect 
        animated:animated]; 
} 

@end 
1
private func centerScrollContent() { 
    let x = (imageView.image!.size.width * scrollView.zoomScale/2) - ((scrollView.bounds.width)/2) 
    let y = (imageView.image!.size.height * scrollView.zoomScale/2) - ((scrollView.bounds.height)/2) 
    scrollView.contentOffset = CGPointMake(x, y) 
} 
Questions connexes