2010-02-05 5 views
4

J'ai une sous-classe UIViewController personnalisée contrôle d'un UIScrollView contenant un UIImageView, mis en place comme ceci:UIScrollView comportement étrange: zoom avant, panoramique, zoom sur feuilles afficher le contenu décentré

UIViewController 
+ UIScrollView (delegate: UIViewController, viewForZoomingInView: UIImageView) 
    + UIImageView 

je peux utiliser le UIScrollView pour zoomer sur mon image, et panoramique autour - mais si je le fais de telle sorte que le centre de la vue n'est pas le centre de l'image, puis effectuez un zoom arrière complet, mon image est décentrée; De plus, puisque je suis à l'échelle de zoom minimum à ce moment-là, je ne peux pas recadrer pour recentrer mon image. Je m'attendais à ce que lors du zoom arrière, UIScrollView recentre la zone contentSize sous ses limites afin que vous ne voyiez jamais au-delà du bord de la vue de contenu (ou plutôt, la taille de la vue de contenu plus contentInset). Ai-je tort dans cette hypothèse?

Si oui, que dois-je faire pour fournir ce comportement?

Voici mon code:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    imageView.image = image; 
    [imageView sizeToFit]; 

    float minimumScale = [imageScrollView frame].size.width/[imageView frame].size.width; 

    imageScrollView.contentSize = [imageView frame].size;  
    imageScrollView.maximumZoomScale = 2.0; 
    imageScrollView.minimumZoomScale = minimumScale; 

    imageScrollView.zoomScale = imageScrollView.minimumZoomScale; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return YES; 
} 

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return imageView; 
} 

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale 
{ 
    // nothing 
} 

EDIT: Solution!

Vous devez définir clipsToBounds = YES sur l'UIScrollView pour obtenir le comportement souhaité. Je ne l'ai pas trouvé initialement parce que c'est une propriété de UIView, pas directement de UIScrollView.

Répondre

1

J'ai vu le même sur mon UIImageView avec pincement dedans et dehors, dans IB j'ai vérifié sur "Sous-vues de clip" et la vue d'image a commencé à se comporter mieux.

Questions connexes