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

还是要谢谢你给任何人把他们的时间,通过我的问题的样子。我很高兴找到了这样一个简单的解决方案。