it-swarm.com.de

Prise To Zoom Effekt auf UIImageView in scrollView?

Ich verwende das Storyboard (iOS 6.0), um einen Foto-Galerie-Viewer für meine App zu erstellen. So wird mein imageViewController im Storyboard eingerichtet:

enter image description here

Ich habe sichergestellt, dass userInteraction und mehrere Berührungen sowohl für imageView als auch für scrollView aktiviert werden. Was ich tun möchte, ist, auf Prise möchte ich in die Bildansicht (maximaler Maßstab 3) hinein zoomen und schwenken können. Dies ist das, was ich momentan 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 beschäftigen sich online mit der programmgesteuerten Erstellung und Erstellung der Ansichten, aber je weniger Code desto besser (in meinen Augen). Was ist der beste Weg, um dies mit Storyboard zu erreichen? Danke im Voraus!!!


AKTUALISIERTE:

Hier ist mein vollständiger .m-Dateicode:

- (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
15
KingPolygon

Ich denke eine bessere Lösung in der 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;

}

Apple-Dokumentation prüfen

33
Vineesh TP

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

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

Stellen Sie in der Dokumentation sicher, dass Sie Folgendes implementiert haben:

Die UIScrollView-Klasse kann über einen Delegaten verfügen, der das UIScrollViewDelegate-Protokoll übernehmen muss. Damit das Zoomen und Schwenken funktioniert, muss der Delegat sowohl viewForZoomingInScrollView: als auch scrollViewDidEndZooming: withView: atScale:; Außerdem müssen der maximale Zoomfaktor (MaximumZoomScale) und der minimale Zoomfaktor (MinimumZoomScale) unterschiedlich sein. 

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


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

Die scrollViewDidEndZooming-Methode kann vorerst leer bleiben. Wenn Sie dies bereits getan haben oder es immer noch nicht funktioniert, geben Sie bitte mehr Code an. Dann ist es einfacher, genauer zu helfen.

2
ceekay

Sie müssen tun, was Wadi oben vorgeschlagen hat, aber auch setMinimumZoomScale so einstellen, dass es sich von setMaximumZoomScale unterscheidet. Beide sind standardmäßig 1.0f. 

Danach sollte die UIImageView quetschbar sein

1
Nate

Ich habe eine Klasse für das Zoomen von UIImageViews erstellt, die ähnlich wie Instagram ist. Vielleicht ist es das, wonach Sie suchen, sonst können Sie sehen, wie ich es erreicht habe. https://github.com/twomedia/TMImageZoom

0
Thomas Maw

Hier empfiehlt Apple, das zu tun, was Sie tun möchten. Ich habe den von Apple bereitgestellten Code verwendet und es hat wie ein Zauber funktioniert! Wenn Sie die Speicherverwaltung optimieren möchten, können Sie iCarousel (von Nicklockwood) verwenden, die über eine Cache-Verwaltung für ungenutzte Dealloc-Ansichten verfügen!

0
lucaslt89

Ich habe eine voll funktionsfähige Demoanwendung (ähnlich der Standard-Fotogalerie von Facebook) erstellt, in der gezeigt wird, wie die Bildansicht mit AutoLayout und Storyboards verschachtelt wird. Sehen Sie sich mein Projekt hier an: http://rexstjohn.com/facebook-like-ios-photo-modal-gallery-swipe-gestures/ .

Es umfasst auch das asynchrone Laden von Fotos über MKNetworkKit und das Gesten durch Gesten durch eine Fotogalerie. Viel Spaß und ich hoffe, es spart jedem Zeit, dies herauszufinden, weil es etwas nervig ist.

0
Delete