Pincer pour zoomer Effet sur UIImageView à l'intérieur de scrollView?
Je suis en utilisant le storyboard (iOS 6.0) pour créer une galerie photo dans la visionneuse de mon application. C'est ainsi que ma imageViewController est mis en place dans le storyboard:
J'ai fait en sorte de permettre userInteraction et de multiples touche à la fois le imageView et le scrollView. Ce que je veux faire est, sur la limite, je veux faire un zoom dans l'imageView (maximum de l'échelle 3) et être en mesure de pan autour de. C'est ce que j'ai actuellement, cependant, même si le geste de pincement est détecté, l'échelle ne change pas.
- (IBAction)imagePinched:(id)sender {
if (pinchRecognizer.state == UIGestureRecognizerStateEnded || pinchRecognizer.state == UIGestureRecognizerStateChanged) {
NSLog(@"gesture.scale = %f", pinchRecognizer.scale);
CGFloat currentScale = self.fullScreenView.frame.size.width / self.fullScreenView.bounds.size.width;
CGFloat newScale = currentScale * pinchRecognizer.scale;
if (newScale < 1) {
newScale = 1;
}
if (newScale > 3) {
newScale = 3;
}
CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale);
self.fullScreenView.transform = transform;
pinchRecognizer.scale = 1;
}
}
La plupart des questions et des tutoriels en ligne traiter avec la création par programme les points de vue et de le faire, mais la moins de code, mieux c'est (à mes yeux). Quelle est la meilleure façon d'obtenir que cela fonctionne avec storyboard? Je vous remercie à l'avance!!!!!
Mise à JOUR:
Voici mon plein .m fichier code:
- (void)viewDidLoad
{
[super viewDidLoad];
//Assign an image to this controller's imageView
fullScreenView.image = [UIImage imageNamed:imageString];
//Allows single and double tap to work
[singleTapRecognizer requireGestureRecognizerToFail: doubleTapRecognizer];
}
- (IBAction)imageTapped:(id)sender {
NSLog(@"Image Tapped.");
//On tap, fade out viewController like the twitter.app
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)imageDoubleTapped:(id)sender {
NSLog(@"Image Double Tapped.");
//On double tap zoom into imageView to fill in the screen.
[fullScreenView setContentMode:UIViewContentModeScaleAspectFill];
}
- (IBAction)imagePinched:(id)sender {
if (pinchRecognizer.state == UIGestureRecognizerStateEnded || pinchRecognizer.state == UIGestureRecognizerStateChanged) {
NSLog(@"gesture.scale = %f", pinchRecognizer.scale);
CGFloat currentScale = self.fullScreenView.frame.size.width / self.fullScreenView.bounds.size.width;
CGFloat newScale = currentScale * pinchRecognizer.scale;
if (newScale < 1) {
newScale = 1;
}
if (newScale > 3) {
newScale = 3;
}
CGAffineTransform transform = CGAffineTransformMakeScale(newScale, newScale);
self.fullScreenView.transform = transform;
pinchRecognizer.scale = 1;
}
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return self.fullScreenView;
}
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale {
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
//Dispose of any resources that can be recreated.
}
@end
source d'informationauteur KingPolygon
Vous devez vous connecter pour publier un commentaire.
Je pense que la meilleure solution dans la Documentation d'Apple
Vérifiez Dans La Documentation D'Apple
La première étape est de s'assurer que vos points de vue ont le bon délégués de mise en œuvre. Par exemple, dans le .m fichier
De la documentation, assurez-vous d'avoir cette mise en œuvre:
La UIScrollView classe peut avoir un délégué qui doit adopter le UIScrollViewDelegate protocole. Pour le zoom et le panoramique de travail, le délégué doit mettre en œuvre les deux viewForZoomingInScrollView: et scrollViewDidEndZooming:withView:atScale:; de plus, le maximum (maximumZoomScale) et le minimum ( minimumZoomScale) de l'échelle de zoom doit être différent.
La scrollViewDidEndZooming méthode peut rester vide pour le moment. Si vous avez déjà fait ou il ne marche pas encore, merci de poster plus de votre code et puis il est plus facile d'aider plus précisément.
Vous devez faire ce que l'Oued suggéré ci-dessus, mais aussi l'ensemble de la setMinimumZoomScale être différente de setMaximumZoomScale. Ils sont tous les deux 1.0 f par défaut.
Après cela, le
UIImageView
devrait être pinchableJ'ai créé un travail entièrement démo de l'application (de nature similaire à Facebook par défaut de la galerie de photos) qui démontre une pincée de zoom de l'Affichage de l'Image imbriquée à l'intérieur d'un rouleau de vue avec mise en page automatique et des story-boards. Voir mon projet ici: http://rexstjohn.com/facebook-like-ios-photo-modal-gallery-swipe-gestures/.
Il comprend également async photo chargement à l'aide d'MKNetworkKit et geste en fonction de glisser à travers une galerie de photos. Profiter et j'espère qu'il sauve tout le monde de temps à essayer de comprendre cela, car il est un peu ennuyeux.
Ici est de savoir comment Apple recomends à faire ce que vous voulez faire. J'ai utilisé le code fourni par Apple et il a travaillé comme un charme! Si vous souhaitez optimiser la gestion de la mémoire, vous pouvez utiliser iCarousel (faite par nicklockwood), qui ont une gestion du cache pour dealloc inutilisés vues!
J'ai créé une classe permettant de gérer le zoom de UIImageViews similaire à Instagram. Peut-être ce que vous cherchez, sinon, vous pouvez regarder comment je l'ai réalisé. https://github.com/twomedia/TMImageZoom