滚动视图缩放停止让我滚动整个缩放图像
Scroll View zoom stops letting me scroll the whole zoomed image
所以我有一个视图控制器,上面有一个 image/button。如果单击它会在视图控制器上激活一个模式弹出窗口,上面有相同的图像。图像位于 UIScrollView 之上,我为其创建了缩放功能。
我能够成功地放大图像并滚动它几次,直到它决定停止让我滚动和缩放整个图像,但仅限于它的左上部分。
只有在我将屏幕倾斜到横向模式并再次激活弹出窗口后才会发生这种情况。弹出窗口中的图像似乎变大了 window.
约束都在故事板中完成。我不确定问题是约束还是代码。
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)
}
我只放了可能与问题相关的代码。
任何帮助将不胜感激。
我找到了解决方案。问题是 animateOut 函数末尾的完成块。
而不是:
completion: nil
应该是:
(success:Bool) in
self.imageView.removeFromSuperview()
无论如何,感谢所有花时间查看我的问题的人。很高兴找到了这么简单的解决方案。
所以我有一个视图控制器,上面有一个 image/button。如果单击它会在视图控制器上激活一个模式弹出窗口,上面有相同的图像。图像位于 UIScrollView 之上,我为其创建了缩放功能。
我能够成功地放大图像并滚动它几次,直到它决定停止让我滚动和缩放整个图像,但仅限于它的左上部分。
只有在我将屏幕倾斜到横向模式并再次激活弹出窗口后才会发生这种情况。弹出窗口中的图像似乎变大了 window.
约束都在故事板中完成。我不确定问题是约束还是代码。
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)
}
我只放了可能与问题相关的代码。
任何帮助将不胜感激。
我找到了解决方案。问题是 animateOut 函数末尾的完成块。
而不是:
completion: nil
应该是:
(success:Bool) in
self.imageView.removeFromSuperview()
无论如何,感谢所有花时间查看我的问题的人。很高兴找到了这么简单的解决方案。