2013-06-01 7 views
15

Ich verwende Storyboard (iOS 6.0), um einen Fotogalerie-Viewer für meine App zu erstellen. Dies ist, wie mein imageViewController in Storyboard eingerichtet ist:Prise zum Zoomen Auswirkung auf UIImageView in scrollView?

enter image description here

ich sicher gemacht haben und Anwenderwechsel mehrere Berührungen sowohl auf der Imageview und Scrollview zu aktivieren. Was ich tun möchte, ist, auf Prise möchte ich in die Bildansicht (maximale Skala 3) hineinzoomen und in der Lage sein, herum zu schwenken. Dies ist, was ich derzeit habe, obwohl die Pinch-Geste erkannt wird, ändert sich die Skala nicht.

- (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; 
    } 

} 

Die meisten Fragen und Tutorials online handeln von programmatisch die Ansichten erstellen und dies zu tun, aber der weniger Code, desto besser (in meinen Augen). Was ist der beste Weg, dies mit dem Storyboard umzusetzen? Vielen Dank im Voraus!!!


AKTUALISIERT:

Hier mein voller .m-Datei-Code ist:

- (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 
+1

Ich löste meine Zweifel mit Ihrer Frage. Danke –

+0

hast du die Antwort? – YaBoiSandeep

Antwort

0

Here ist, wie Apple zu tun recomends, was Sie tun wollen. Ich benutzte den von Apple bereitgestellten Code und es funktionierte wie ein Zauber! Wenn Sie die Speicherverwaltung optimieren möchten, können Sie iCarousel (made by nicklockwood) verwenden, die eine Cache-Verwaltung für nicht genutzte Dealloc-Ansichten haben!

+0

Danke Lucaslt89. Ich werde auf jeden Fall einen Blick darauf werfen, sobald die Entwickler-Site wieder verfügbar ist (aktuell wird die Nachricht "In Wartung" angezeigt). Ist es zufällig der ScrollView Suite-Beispielcode? – KingPolygon

+0

Sicher, Sie können alle Beispiele der WWDC 2010 von hier herunterladen: [link] (http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/getSoftware?wosid=CB3fDiRN7qTm2k83u941h1gXUgA&fileID=26713&code= y & source = x) – lucaslt89

+0

Können Sie bitte die Jahr- und Sitzungsnummer angeben? Die von Ihnen geposteten Links funktionieren nicht. –

2

Der erste Schritt besteht darin, sicherzustellen, dass in Ihren Ansichten die richtigen Delegaten implementiert sind. Zum Beispiel in der .m-Datei

@interface myRootViewController() <.., UIGestureRecognizerDelegate, UIScrollViewDelegate, ...> 

Aus der Dokumentation, stellen Sie sicher, dass dies umgesetzt:

Die UIScrollView-Klasse einen Delegaten haben kann, die das UIScrollViewDelegate Protokoll annehmen müssen. Zum Zoomen und Verschieben muss der Delegierte sowohl viewForZoomingInScrollView: als auch scrollViewDidEndZooming implementieren: withView: atScale:; Darüber hinaus müssen die maximale (maximumZoomScale) und minimale (minimumZoomScale) Zoomskala unterschiedlich sein.

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 
{ 
    return self.fullScreenView; 
} 


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

Die scrollViewDidEndZooming Methode kann nun leer bleiben. Wenn Sie das bereits getan haben oder es immer noch nicht funktioniert, schreiben Sie bitte mehr von Ihrem Code und dann ist es einfacher, genauer zu helfen.

+0

Ich habe hinzugefügt Delegates an den ImageViewController und fügte diese beiden Methoden zu meinem Code hinzu, aber es scheint immer noch nicht den Zoom-Effekt auszulösen. Ich habe meinen Code mit mehr Code aktualisiert. Vielen Dank für Ihre Geduld und Hilfe! – KingPolygon

+0

Es wäre hilfreich zu wissen, ob diese scrollView-Methoden aufgerufen werden, wenn die Gestenerkennung ausgelöst wird – ceekay

1

Sie müssen das tun, was Wadi vorgeschlagen hat, aber setMinimumZoomScale auch anders einstellen als setMaximumZoomScale. Sie sind standardmäßig 1.0f.

Danach sollte die UIImageView quetschbaren seine

33

Ich denke, ein bessere Lösung in Apple-Dokumentation

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView 

{ 

    return self.imageView; 

} 
- (void)viewDidLoad { 

    [super viewDidLoad]; 

    self.scrollView.minimumZoomScale=0.5; 

    self.scrollView.maximumZoomScale=6.0; 

    self.scrollView.contentSize=CGSizeMake(1280, 960); 

    self.scrollView.delegate=self; 

} 

Check Apple Documentation

0

ich eine voll funktionsfähige Demo-Anwendung erstellt habe (ähnlich in der Natur zu Facebook Standard Fotogalerie), die das Zoomen der Bildansicht zeigt, die in einer Bildlaufansicht mit AutoLayout und Storyboards verschachtelt ist. Sehen Sie mein Projekt hier an: http://rexstjohn.com/facebook-like-ios-photo-modal-gallery-swipe-gestures/.

Es enthält auch asynchrone Foto-Laden über MKNetworkKit und Gesten-basierte Wischen durch eine Fotogalerie. Viel Spaß und ich hoffe, es spart jedem Zeit, das herauszufinden, weil es etwas nervig ist.

0

Ich habe eine Klasse zum Zoomen von UIImageViews ähnlich wie Instagram erstellt. Könnte sein, was du suchst, sonst kannst du sehen, wie ich es geschafft habe. https://github.com/twomedia/TMImageZoom