2017-04-06 128 views
1

所以我有一個視圖控制器上有一個圖像/按鈕。如果點擊它,它會在視圖控制器上激活一個模態彈出窗口,其上有相同的圖像。該圖像位於UIScrollView上方,併爲其創建了縮放功能。滾動查看縮放停止讓我滾動整個縮放圖像

我能夠成功放大圖像並滾動幾次,直到它決定停止讓我滾動和縮放整個圖像,但只有它的左上部分。

這隻發生在我將屏幕傾斜到橫向模式並再次激活彈出窗口之後。看起來圖像在彈出窗口中變大了。

約束都在故事板中完成。我不確定問題是約束還是代碼。

Modal Popup Constraints

驗證碼:方向變化時

變量

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

圖片放大

override func viewDidLoad() { 
    super.viewDidLoad() 

    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 

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

模式彈出

@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 

    }, completion: nil) 

} 

我只是把有可能相關的問題代碼。

任何幫助將不勝感激。

回答

0

我找到了解決方案。問題是animateOut函數末尾的完成塊。

相反的:

completion: nil 

它應該是:

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

還是要謝謝你給任何人把他們的時間,通過我的問題的樣子。我很高興找到了這樣一個簡單的解決方案。