2009-11-28 7 views
0

En ce qui concerne l'iPhone SDK:Comment déterminer les coordonnées d'une grande image recadrée dans un UIImageView?

J'ai un 512 x 512 image de pixel, et je veux afficher dans un UIImageView 200 x 200 pixels avec culture (à la résolution native, sans zoom, montage, ou rotation). Y at-il un moyen de déterminer les coordonnées de l'image qui sont visibles à l'intérieur de l'UIImageView? Par exemple, si l'image est exactement au centre de la UIImageView, alors je veux savoir quelles sont les coordonnées de l'image aux points (0,0) et (200,200) de UIImageView, qui seront (156,156) et (356,356), respectivement pour l'image affichée.

Je prévois d'implémenter des fonctions "pan" et "zoom" à un moment donné, mais je veux d'abord savoir comment résoudre ce problème. La référence de la classe UIImageView n'a pas semblé utile ... J'espérais éviter d'utiliser un UIView, mais si cela est nécessaire, je vais suivre cette route.

Merci!

Répondre

0

Merci pour votre aide. L'élaboration des fonctions de panoramique/zoom est devenue triviale après l'implémentation de UIScrollView. L'implémentation de UIScrollView m'a permis de déterminer les coordonnées dont j'avais besoin avec les valeurs myScrollView.bounds.origin.x et myScrollView.bounds.origin.y ... le zoom nécessite encore des calculs - comme vous l'avez dit plus haut, mais je suis sur la bonne voie maintenant.

Voici le code que j'ai utilisé pour faire l'UIScrollView (basé sur plusieurs sources disponibles sur le net et ce site - le ScrollViewSuite d'Apple a été particulièrement utile.) Voici le code que j'ai utilisé dans la section (void)viewDidLoad de mon programme. le trouver utile:

UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[imageArray objectAtIndex:0]]; //imageArray is an array/stack of images... 
[self setMyImage:tempImageView]; //myImage is of type UIImageView 
[myImage setTag:100]; //set this to an 'arbitrary' value so that when I update the scrollview I can remove the current image... 
[tempImageView release]; 

myScrollView.contentSize = CGSizeMake(myImage.frame.size.width, myImage.frame.size.height); 
myScrollView.maximumZoomScale = 10.0; 
myScrollView.minimumZoomScale = 0.15; 
myScrollView.clipsToBounds = YES; 
myScrollView.delegate = self; 

[myScrollView addSubview:myImage]; 
0

Vous avez raison sur ce que vous avez vu à partir de la référence UIImageView - il n'y a pas de moyen facile de le faire en utilisant UIImageView seul. Vous devez prendre en compte des éléments tels que contentMode de UIImageView ou vous limiter à calculer uniquement la position d'un seul UIViewContentMode. Toutefois, lorsque vous finirez par implémenter le panoramique et le zoom, vous utiliserez un UIScrollView avec UIImageView comme sous-vue de ce UIScrollView. À ce stade, il serait plus sain de dimensionner votre UIImageView initialement à la taille de l'image que vous affichez (peut être dynamique). Vous pouvez ensuite déterminer où se trouve l'image en déterminant où est l'image , ce qui est quelque chose que vous pouvez accomplir beaucoup plus simplement et avec juste un peu de maths.