ios - 放大 UIImageView : View For Zooming is called but nothing happened

标签 ios swift uiscrollview

我在放大 UIImageView 时遇到问题。

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

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

这就是我的 UIViewController 的工作方式:

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

这是它的样子:

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
}

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

谢谢。

最佳答案

将委托(delegate)设置为每个 pageScrollView(不适用于 self.scrollView)。 在 viewForZooming 中,返回适当的 subview 。 示例(伪代码):

public func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    // self.scrollView : main UIScrollView
    if <scrollView ONE_OF self.pageScrollViews> {
        return self.getContentViewForPageScrollView(scrollView);
    }
}
return nil

Here您可以找到具有最少布局功能的示例项目。

关于ios - 放大 UIImageView : View For Zooming is called but nothing happened,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907140/

相关文章:

ios - 在 WatchKit 应用中播放视频

swift - 如何在 TableView 中动态切换 UISwitch?

ios - ScrollView 不会滚动 AHHH

ios - 从 IBAction 调用外部分配的闭包问题

ios - 在图像上运行 CIFilter 会在上方和下方产生不需要的偏移

iphone - 如何在 UINavigationController 中的所有 View 前面显示一个 UIButton?

swift - 无法将数组成员向下转换为协议(protocol)类型

Swift 枚举,从关联的枚举中获取原始值

iphone - ScrollView 子 uiscrollviews uiimageview viewForZoomingInScrollView

iphone - UIScrollView:如何一次滚动一页