2017-01-11 3 views
0

Es gibt eine UIImageView übergeben als eine Eigenschaft über einen Übergang von einem anderen View-Controller, wo der Benutzer auf ein Bild gekritzelt hat. Ich konnte das Bild nicht anpassen/skalieren, um in eine UIView in der empfangenden Ansicht Controller zu passen. Egal was ich versuche, es geht über den Bildschirm.Größe einer UIImageView anpassen Bildschirm

Hier sind einige, die ich mit Null Erfolg versucht, dies in viewDidLoad()

incomingImgView?.frame = CGRect(x: 0, y: 0, width: view.bounds.width , height: view.bounds.height) 
// incomingImgView?.frame = CGRect(x: 0, y: 0, width: 100 , height: 100) 

incomingImgView?.contentMode = .scaleAspectFit 

incomingImgView?.clipsToBounds = true 

//incomingImgView?.frame = view.bounds 
viewContainer.addSubview(incomingImgView!) 


// incomingImgView?.image?.scaleImage(toSize: CGSize(width: 100, height: 100)) 
// incomingImgView?.layoutIfNeeded() 

view.layoutIfNeeded() 
+3

Warum übergeben Sie eine UIImageView zwischen zwei UIViews? Warum nicht einfach ein UIIMage übergeben und jeder UIView Größe Dinge wie Sie wollen? – dfd

+1

@CodeTree Bitte tun Sie so etwas nicht. Daten weitergeben - nicht die Schnittstelle. –

Antwort

1

Bitte versuchen:

incomingImgView?.frame = CGRect(x: 0, y: 0, width: viewContainer.bounds.width , height: viewContainer.bounds.height) 
+0

nein: | dies ist, wie es aussieht, aber nicht incomingImgView .frame = CGRect Arbeits? (X: 0, y: 0, Breite: viewContainer.bounds.width, Höhe: viewContainer.bounds.height)? incomingImgView .contentMode = .scaleAspectFit viewContainer.addSubview (! incomingImgView) view.layoutIfNeeded() –

+0

Bitte diese Zeile hinzufügen, und versuchen - viewContainer.layoutIfNeeded() – CrazyVK56

+0

bereits versucht, dass: | –

0

Sie setzen zweimal Rahmen so das erste Mal mit Rahmen ersetzt wird eingestellt versuchen incomingImgView?.frame = view.bounds so wird es den Rahmen von view.bounds und nicht incomingImgView?.frame = CGRect(x: 0, y: 0, width: view.bounds.width , height: view.bounds.height) nehmen.

Versuchen Sie den Code unten und überprüfen

incomingImgView?.frame = CGRect(x: 0, y: 0, width: 100 , height: 100) 
    incomingImgView?.contentMode = .scaleAspectFit  
    incomingImgView?.clipsToBounds = true 
    viewContainer.addSubview(incomingImgView!)  
+0

Entschuldigung! das war ein Fehler beim Einfügen des Codes, bearbeitete es, funktionierte nicht –

+0

@CodeTree Kannst du mir zeigen, wie du die imageView von segue überträgst? –

+0

wenn lassen validVC: FinalViewController = vc { wenn capturedImage = imgView { validVC.incomingImgView = capturedImage self.navigationController .pushViewController (validVC, animiert: true) lassen? } } –

0

Ich habe mit genau diesem Thema für eine Weile und kam mit dieser Lösung für die Klasse arbeiten, die ich gemacht habe, die von UIImageView erbt (beachten Sie, dass Sie kann wohl als eine Erweiterung der UIImageView legen Sie ihn einfach selbst, anstatt eine neue Klasse zu schaffen, wenn dies die einzige Sache ist, Sie ändern):

func scaleAndCenterInParent(){ 
    //Scales and centers to superview 
    if let screenSize = superview?.frame.size{ 

     let frameSize = self.frame.size 


     if frameSize.width > screenSize.width || frameSize.height > screenSize.height{ 
      //Image exceeds screen in at least one direction 
      var scale: CGFloat = 1 
      let frameRatio = (frameSize.width)/(frameSize.height) 

      if frameRatio >= 1{ 
       //landscape frame 
       scale = screenSize.width/frameSize.width 
      }else{ 
       //portrait frame 
       scale = screenSize.height/frameSize.height 
      } 

      //apply transform to self (imageview) 
      self.transform = self.transform.scaledBy(x: scale, y: scale) 



      //center 
      self.frame.origin.x = (superview!.bounds.midX - (frameSize.width*0.5)) 
      self.frame.origin.y = (superview!.bounds.midY - (frameSize.height*0.5)) 
     } 
    } 
} 

EDIT: müssen Beachten Sie, dass Sie immer noch die .scaleAspectFit Parameter festzulegen, weil das nur die Größe des Rahmens ändert . Es behält die volle Bildqualität bei.

+0

@CodeTree Es tut mir leid, das war eine persönliche Funktion, der Code wurde jetzt aktualisiert mit: self.transform = self.transform.scaledBy (x: skalieren, y: skalieren) – Simen91

+0

ja, obwohl es die Ansicht nicht kleiner macht es skaliert zu einem größeren, was sehr praktisch wäre, denke ich, wo zumindest ich spielen kann ... Ich werde versuchen, es euch wissen zu lassen. –

+0

@CodeTree Diese Funktion wird nur verkleinert, wenn die Ansicht ihre Superansicht überschreitet (sie wird nicht so skaliert, wie sie gerade ist). Wenn Sie möchten, dass es unabhängig von seiner Größe in Bezug auf seine Superansicht nach oben oder unten skaliert wird, entfernen Sie einfach die if-Anweisung, die überprüft, ob sie die Bildschirmgröße überschreitet – Simen91

0

haben Sie versucht incomingImgView.sizeToFit() Diese Methode passt die Ansicht an die richtige Größe für die übergeordnete Ansicht.

Verwandte Themen