首页 > 解决方案 > Swift :- 如何在 Swift 中的 UIScrollview 内向 UIImageview 添加偏移量?

问题描述

在我的 iOS 应用程序中,我有一个滚动视图,其中包含用于滚动和缩放图像的图像视图。我无法做的是使用预定义的偏移量和缩放值启动图像视图。现在,在启动时,会显示原始图像,我可以放大/缩小和滚动,但我想用默认值的偏移量放大/缩小。

在设置时scrollview.zoomScale,我无法完全滚动图像。下面的代码: -

        let scroller = UIScrollView()
        scroller.translatesAutoresizingMaskIntoConstraints = false
        scroller.minimumZoomScale = 1
        scroller.maximumZoomScale = 5
        return scroller
    }()
    let imageView: UIImageView = {
        let iv = UIImageView()
        iv.contentMode = .scaleAspectFit
        iv.translatesAutoresizingMaskIntoConstraints = false
        return iv
    }()

标签: iosswift

解决方案


第一步:

scrollView = UIScrollView(frame: view.bounds)
view.addSubview(scrollView)

imageView.center = view.center
scrollView.addSubview(imageView)


scrollView.minimumZoomScale = 1.0
scrollView.maximumZoomScale = 2.0
scrollView.delegate = self

第二步:实现 UIScrollViewDelegate 方法

func viewForZooming(in scrollView: UIScrollView) -> UIView? {
    return imageView
}

最后:

private func setImagePosition(_ image: UIImage) {
    imageView.image = image
    let size = imageSize(WithScreen: image)

    imageView.frame = CGRect(x: 0, y: 0, width: size.width, height: size.height)
    scrollView?.contentSize = size

    if let scrollView = scrollView, size.height < scrollView.bounds.size.height {
        let offsetY = (scrollView.bounds.size.height - size.height) * 0.5
        scrollView.contentInset = UIEdgeInsets(top: offsetY, left: 0, bottom: offsetY, right: 0)
    }
}

private func imageSize(WithScreen image: UIImage) -> CGSize {
    var size = UIScreen.main.bounds.size
    size.height = image.size.height * size.width / image.size.width
    return size
}


推荐阅读