2010-12-06 10 views
0

Ich habe dieses Problem mit ScrollView-Zoom. Es gibt viele Artikel darüber, aber irgendwie kann ich keine richtige Erklärung, Tutorial oder Code-Schnipsel finden.iPhone: wie zoomen nur das Bild von scrollview

Ich habe Vollbild Scrollview und in einem Fullscreen-Bildansicht. Innerhalb der Bildansicht lade ich AspectFit-Bilder (sie können entweder vertikal oder horizontal sein, horizontale haben oben und unten schwarzen Raum). Wenn ich Zoom mache, zoome ich nicht nur das Bild, sondern auch die Umgebung (der Rest der Bildansicht). Wenn ich den Simulator während des Zooms rotiere, geht das Bild außerdem in die obere rechte Ecke, anstatt wie beim Start zentriert zu sein. Wenige Pixel gehen sogar aus dem Bildschirm.

Ich möchte wirklich nur Bild anstelle der gesamten Bildansicht zoomen oder zumindest das Bild zentriert die ganze Zeit, wenn gezoomt.

Jede Hilfe willkommen ..

Antwort

1

Ich löste das Problem, es ist nicht der beste Code, aber funktioniert gut für mich, ich werde es wahrscheinlich ein bisschen später reinigen. Posting hier, vielleicht wird es jemandem helfen :)

UIImage *img = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] 
            pathForResource:someImage ofType:@"jpg"]]; 
CGFloat scale; 
    if (scrollView.frame.size.width < scrollView.frame.size.height) // portrait 
     scale = scrollView.frame.size.width/img.size.width; 
    if (scrollView.frame.size.width > scrollView.frame.size.height) // landscape 
     scale = scrollView.frame.size.height/img.size.height; 

imgView.frame = CGRectMake(scrollView.frame.origin.x, scrollView.frame.origin.y, 
          img.size.width*scale, img.size.height*scale); 
imgView.center = CGPointMake(scrollView.frame.size.width/2, scrollView.frame.size.height/2); 

[imgView setImage:img]; 

[scrollView setZoomScale:scale]; 
0

Vom PhotoScroller Beispiel; fügen Sie diese layoutSubviews:

// center the image as it becomes smaller than the size of the screen 

CGSize boundsSize = self.bounds.size; 
CGRect frameToCenter = imageView.frame; 

// center horizontally 
if (frameToCenter.size.width < boundsSize.width) 
    frameToCenter.origin.x = (boundsSize.width - frameToCenter.size.width)/2; 
else 
    frameToCenter.origin.x = 0; 

// center vertically 
if (frameToCenter.size.height < boundsSize.height) 
    frameToCenter.origin.y = (boundsSize.height - frameToCenter.size.height)/2; 
else 
    frameToCenter.origin.y = 0; 

imageView.frame = frameToCenter; 

Dies wird beim Zoomen nur das Bild nicht helfen, aber es wird halten es zentriert, wenn Sie es mindestens vergrößern oder verkleinern.

+0

wo genau soll ich es sagen? :) Ich ändere nur Bilder mit imgView.image = [UIImage imageNamed: whichNext]; Ich initiiere kein Rect mit Bild. Ich ändere einfach den Inhalt von imageView. – yosh

+0

Sie würden dies in layoutSubviews setzen - es ist in Ordnung, wenn Sie den Rahmen des UIImageView beim Erstellen nicht initialisieren, nimmt er die Größe des Bildes an, mit dem Sie ihn initialisieren (wenn Sie ihm ein anderes Bild mit einer neuen Größe geben Sie sollten '[sizeToFit]' aufrufen, um die Größe zu ändern. Wie Sie oben sehen können, ändern Sie auch in diesem Fall nicht seine Größe; Sie ändern nur seinen Ursprung, damit er sich zentriert, wenn Sie herauszoomen. – Ertebolle

Verwandte Themen