2017-05-08 2 views
0

Ich habe ein modales Popup im Storyboard erstellt, so dass beim Klicken auf ein Bild ein Popup dieses Bildes angezeigt wird, das jedoch in der Größe veränderbar ist. Alles was ich will ist, dass das Popup gleich der Größe der Superview (programmatisch) ist.Wie ändere ich die Modal Popup-Größe, um sie der Superview-Größe anzupassen?

Ich werde bei Bedarf zusätzlichen Code zur Verfügung stellen.

@IBOutlet var imageView: UIView! 
@IBOutlet weak var scrollView: UIScrollView! 
@IBOutlet weak var zoomImageView: UIImageView! 
@IBOutlet weak var backgroundButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.navigationController?.setNavigationBarHidden(true, animated: false) 

    imageView.layer.cornerRadius = 10 
    imageView.layer.masksToBounds = true 

    self.scrollView.minimumZoomScale = 1.0 
    self.scrollView.maximumZoomScale = 6.0 

} 

func viewForZooming(in scrollView: UIScrollView) -> UIView? { 

    return self.zoomImageView 

} 

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { 
    if UIDevice.current.orientation.isLandscape{ 
     imageView.center = self.view.center 
     imageView.frame = view.frame 

    } else if UIDevice.current.orientation.isPortrait{ 
     imageView.center = self.view.center 
     imageView.frame = view.frame 
    } 
} 

@IBAction func showImageView(_ sender: Any) { 

    animateIn() 

} 

@IBAction func closeImageView(_ sender: Any) { 

    animateOut() 

} 

func animateIn() { 

    self.scrollView.zoomScale = 1.0 

    self.view.addSubview(imageView) 
    imageView.center = self.view.center 

    imageView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3) 
    imageView.alpha = 0 

    self.backgroundButton.alpha = 0.7 

    UIView.animate(withDuration: 0.4) { 
     self.imageView.alpha = 1 
     self.imageView.transform = CGAffineTransform.identity 
    } 

} 

func animateOut() { 

    UIView.animate(withDuration: 0.3, animations: { 
     self.imageView.transform = CGAffineTransform.init(scaleX: 1.3, y: 1.3) 
     self.imageView.alpha = 0 

     self.backgroundButton.alpha = 0 

    }) { (success:Bool) in 
     self.imageView.removeFromSuperview() 
    } 

} 

}

Jede Hilfe wäre sehr dankbar.

+0

Bitte Code angeben. Es hilft zu antworten! – dfd

+0

Eigentlich habe ich es gerade herausgefunden. Ich werde meine Antwort posten. Es war wirklich einfaches Zeug (irgendwie gemustert). –

+0

Es scheint ein kleines Problem mit der Antwort zu geben, die ich gab. Obwohl die Unteransicht beim Klicken auf das Bild korrekt skaliert wird, scheint die Drehung des Telefons mit der Größe zu verwechseln. Das nächste Mal, wenn das Bild angeklickt wird, ist es keine richtige Größe (aber kleiner). –

Antwort

0

Endlich die Antwort gefunden.

Statt:

imageView.frame = self.view.frame 

Ich hatte gerade zu verwenden:

imageView.frame = CGRect(x: 0, y: 0, width: self.view.bounds.width, height: self.view.bounds.height) 

Und im animateOut() Block I die Skala 1 Transformation geändert

self.image.transform = CGAffineTransform(scaleX: 1, y: 1) 

alles, was behebt das Problem.

Verwandte Themen