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.