放大UIImageView:View For Zooming被调用但没有任何反应

时间:2016-12-01 09:42:24

标签: ios swift uiscrollview

我在放大UIImageView时遇到问题。

要理解,我的UIViewController具有以下结构,非常简单:

我只有一组图像。屏幕一次只显示一个图像,但是为了查看其他图像,我可以向左或向右滚动。 (就像Apple的照片应用程序一样)。我想在这些图像中使用缩放功能。

这就是UIViewController的工作原理:

我有一个主UIScrollView,其中包含许多UIScrollView(每个图像一个)。基本上每个UIScrollView都有一个UIImageView。 (我没有使用UICollectionView来允许缩放:我只有许多UIScrollView包含UIImageView,以允许缩放每张图片。

它的外观如下:

enter image description here

我就这样做了:

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
}

我不明白,如果有人有想法吗?

感谢。

2 个答案:

答案 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是否为主UIScrollViewif scrollView == self.scrollView),我必须测试scrollView是否是主{{1}的 }。

像这样:

UIScrollView

现在它有效!