我在放大UIImageView
时遇到问题。
要理解,我的UIViewController
具有以下结构,非常简单:
我只有一组图像。屏幕一次只显示一个图像,但是为了查看其他图像,我可以向左或向右滚动。 (就像Apple的照片应用程序一样)。我想在这些图像中使用缩放功能。
这就是UIViewController
的工作原理:
我有一个主UIScrollView
,其中包含许多UIScrollView
(每个图像一个)。基本上每个UIScrollView
都有一个UIImageView
。 (我没有使用UICollectionView
来允许缩放:我只有许多UIScrollView
包含UIImageView
,以允许缩放每张图片。
它的外观如下:
我就这样做了:
var counter : Int = 0
let scrollViewWidth:CGFloat = scrollView.frame.width
let scrollViewHeight:CGFloat = scrollView.frame.height
// Add images to scrollview
for object in myObjects {
// Configure the UIImageView
let imgView = UIImageView(image: object.image.value)
imgView.frame = CGRect(x:0, y:0, width:scrollViewWidth, height:scrollViewHeight)
imgView.contentMode = .scaleAspectFit
imgView.isUserInteractionEnabled = true
if let rotation = viewModel?.documents?[counter].rotation {
imgView.transform = CGAffineTransform(rotationAngle: rotation)
}
// Configure a UIScrollView for each UIImageView to allow both zooming and paging
let pageScrollView = UIScrollView(frame: CGRect(x:scrollViewWidth * CGFloat(counter), y:0, width:scrollViewWidth, height:scrollViewHeight))
pageScrollView.minimumZoomScale = 1.0
pageScrollView.maximumZoomScale = 2.0
pageScrollView.contentSize = imgView.bounds.size
pageScrollView.showsVerticalScrollIndicator = false
pageScrollView.showsHorizontalScrollIndicator = false
pageScrollView.addSubview(imgView)
self.scrollView.addSubview(pageScrollView)
counter += 1
}
// Set content size for the main UIScrollView
self.scrollView.contentSize = CGSize(width:self.scrollView.frame.width * CGFloat((viewModel?.documents)!.count), height:self.scrollView.frame.height)
显然我实现了viewForZooming
方法:调用该方法,该方法返回正确的UIImageView,但是当我捏缩放时没有任何反应:
/// Zoom in / out for the current UIImageView
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
// self.scrollView : main UIScrollView
if scrollView == self.scrollView {
if let childScrollView = self.scrollView.subviews[currentPageIndex] as? UIScrollView {
if let currentImageView = childScrollView.subviews[0] as? UIImageView {
return currentImageView // the UIImageView is well returned
}
}
}
return nil
}
我不明白,如果有人有想法吗?
感谢。
答案 0 :(得分:0)
将委托设置为每个pageScrollView(不适用于self.scrollView)。 在viewForZooming中,返回适当的子视图。 示例(伪代码):
public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
// self.scrollView : main UIScrollView
if <scrollView ONE_OF self.pageScrollViews> {
return self.getContentViewForPageScrollView(scrollView);
}
}
return nil
Here您可以找到布局功能最少的示例项目。
}
答案 1 :(得分:0)
解决。实际上,当我将委托设置为我的主UIScrollView
和另一个UIScrollView
时,viewForZooming
方法不知道使用了什么scrollView。而不是测试方法中使用的scrollView是否为主UIScrollView
(if scrollView == self.scrollView
),我必须测试scrollView是否是主{{1}的子 }。
像这样:
UIScrollView
现在它有效!