2017-04-06 7 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() 

感謝。このような簡単な解決策が見つかったのはうれしいです。

関連する問題