Ajouter un zoom sur un UIScrollView
Bonjour,
Petit nouveau dans le developpement iPhone, je souhaiterai avoir vos lumière :
J'ai un UIScrollView qui m'affiche une image et qui fonctionne pour le défilement...
Je voudrais rajouter à ce UIScrollView un zoom in et zoom out.
Est ce possible et si oui vers ou chercher car ce que j'ai trouvé sur la doc apple ne fonctionne pas (ou je dois pas bien faire les choses)...
Merci de votre aide.
Stounfr
Petit nouveau dans le developpement iPhone, je souhaiterai avoir vos lumière :
J'ai un UIScrollView qui m'affiche une image et qui fonctionne pour le défilement...
Je voudrais rajouter à ce UIScrollView un zoom in et zoom out.
Est ce possible et si oui vers ou chercher car ce que j'ai trouvé sur la doc apple ne fonctionne pas (ou je dois pas bien faire les choses)...
Merci de votre aide.
Stounfr
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
1) Modifier les matrices de transformation
Je développerai davantage s'il y a besoin, mais en gros, ça modifie les coordonnées avant le dessin.
2) Dessiner plus gros
Si tu as un rectangle de dimensions 100x100 et que tu le dessines à 200x200, tu as effectivement fait un zoom à 200%.
Dans ton cas, j'imagine que tu utilises une UIImageView. Tu règles son imageScaling à NSScaleProportionally ou NSScaleToFit (ainsi, l'image prendra toute la taille de la vue).
Quand une image est placée dans l'UIImageView, tu regardes les dimensions de l'image, et tu changes la taille de l'UIImageView (frameSize) pour qu'elle corresponde à la taille de l'image, multipliée par le facteur de zoom.
Si tu n'as pas compris, n'hésite pas à demander, je te pondrai du code.
voici mon code pour ma classe MyViewController
MyViewController.h :
Et voici MyViewController.m
dans mon interface bluilder ma view contient un UIScrollView qui affiche mon images.
Ma UIScrollView fait 280X360 et affiche bien mon image de 2000X2000. Le défilement marche au poil.
J'avais lu sur le forum ceci dans le sujet http://www.objective-cocoa.org/forum/index.php?topic=3023.0:
myScrollView.maximumZoomScale = 4.0;
myScrollView.minimumZoomScale = 0.25;
Un peu perdu quand même dans tout ca...
Bon, déjà , je vois pas pourquoi tu as défini des propriétés scrollView1 et 2. Les propriétés servent à accéder aux variables d'instance.
Pour le code, ça doit donner quelque chose comme ça:
J'ai ajouté:
- une outlet vers les UIImageView préalablement glissée dans la scrollview. La vie est trop courte pour écrire du code.
- une action pour changer le zoom. À relier par exemple à un slider dont les valeurs vont de 0,25 à 4.
Et le .m:
La partie intéressante se trouve dans la dernière méthode. Il faut prendre les dimensions de l'image, les multiplier par le facteur de zoom, et donner cette taille à la UIImageView. Comme tu l'as réglée sous IB pour que l'image la remplisse entièrement, ça te fait un beau zoom.
Je pense que la scrollview s'adapte automatiquement à son contenu; il n'est donc sans doute pas nécessaire de décommenter la 3ème ligne.
alors lorsque je mets ce que tu as mis, j'ai une erreur.
Dans mon .m
L'erreur qui m'est retourné (j'en ai 3) :
/Users/stoun/Desktop/test/Classes/MyViewController.m:31: error: incompatible type for argument 1 of '_setImageViewSize:'
/Users/stoun/Desktop/test/Classes/MyViewController.m:38: error: incompatible type for argument 1 of '_setImageViewSize:'
/Users/stoun/Desktop/test/Classes/MyViewController.m:43: error: 'image' undeclared (first use in this function)
Stoun
:crackboom:-
Stoun
Cela a du te faire disparaà®tre au moins les deux premiers messages d'erreur ?
Bon, précise ce qui "ne fonctionne pas" : encore des messages d'erreurs, exécution non conforme, ...
Vérifications
Vérifie si l'image est bien prise en compte
UIImage * image=[UIImage imageNamed:@GUAD.tif];
NSLog(@%@",image);
puis que l'imageView est bien connectée, ainsi que les scroll view
NSLog(@%@",imageView);
That was my two cents, après j'ai pas regardé en détail le reste du code ici...
perso je me demande surtout comment on peut faire un ZoomOut ( je voudrais revenir a la position initiale )
mais je vois pas comment on fait
si quelqu'un a une idée
En complétant l'exemple de ce post , et sans sous-classer UIScrollView.
@synthesize window,myScrollView,myImageView;
@synthesize initialViewFrame,initialContentSize;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// loading image
NSURL * imageURL=[NSURL URLWithString:@"http://www.austinbull.com/clonemines.png"];
NSData * imageData=[NSData dataWithContentsOfURL:imageURL];
UIImage * image=[UIImage imageWithData:imageData];
self.myImageView=[[[UIImageView alloc] initWithImage:image] autorelease];
// configure scroll view
self.initialContentSize=myScrollView.contentSize=myImageView.frame.size;
self.initialViewFrame=myImageView.frame;
myScrollView.maximumZoomScale=4.0;
myScrollView.minimumZoomScale=0.5;
myScrollView.clipsToBounds=YES;
[myScrollView addSubview:myImageView];
[window makeKeyAndVisible];
}
-(IBAction) resetZoomScale:(id) sender{
NSLog(@zooming out);
UIView *view = [(id<UIScrollViewDelegate>)[myScrollView delegate] viewForZoomingInScrollView:myScrollView];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:0.4];
myScrollView.contentSize = initialContentSize;
view.frame= initialViewFrame;
[myScrollView scrollRectToVisible:CGRectMake(0.,0.,myScrollView.frame.size.width,myScrollView.frame.size.height) animated:YES];
[UIView commitAnimations];
}
M'en vais Tester ca tout de suite :P
J.
je t'adore :P
John
en attendant , Bienvenu sur le site !