Scrollview 只缩放到左上角

Posted

技术标签:

【中文标题】Scrollview 只缩放到左上角【英文标题】:Scrollview only zooms to upper left corner 【发布时间】:2017-06-02 00:32:19 【问题描述】:

我以编程方式创建了一个滚动视图并添加了一个图像作为它的子视图,但是当我尝试放大图像时,它只会放大到上角并且它不允许我滚动查看图像的不同部分。

这是我用来创建滚动视图的代码:

let scrollView = UIScrollView()

var image: NSData!

override func viewDidLoad() 
    super.viewDidLoad()

    scrollView.minimumZoomScale = 1.0
    scrollView.maximumZoomScale = 3.0
    scrollView.zoomScale = 1.0
    scrollView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height)
    scrollView.delegate = self
    scrollView.isPagingEnabled = false
    scrollView.contentSize = CGSize(width: self.view.frame.width, height: self.view.frame.height)

    view.addSubview(scrollView)

    scrollView.addSubview(imageView)

    imageView.image = UIImage(data: image as Data)
    imageView.contentMode = .scaleAspectFit
    imageView.isUserInteractionEnabled = true

    let longPress = UILongPressGestureRecognizer(target: self, action: #selector(share))
    longPress.minimumPressDuration = 0.5
    longPress.numberOfTapsRequired = 0
    imageView.addGestureRecognizer(longPress)

    let doubleTap = UITapGestureRecognizer(target: self, action: #selector(handleDoubleTap(recognizer:)))
    doubleTap.numberOfTapsRequired = 2
    scrollView.addGestureRecognizer(doubleTap)



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


func share(sender: UILongPressGestureRecognizer) 
    if sender.state == .ended 
        if UIImage(data: image as Data) != nil 
            let Item = UIImage(data: self.image! as Data)
            let activity = UIActivityViewController(activityItems: [Item!], applicationActivities: nil)
            activity.excludedActivityTypes = [UIActivityType.print, UIActivityType.addToReadingList, UIActivityType.openInIBooks]
            self.present(activity, animated: true, completion: nil)
        
    


func handleDoubleTap(recognizer: UITapGestureRecognizer) 
    if scrollView.zoomScale > scrollView.minimumZoomScale 
        scrollView.setZoomScale(scrollView.minimumZoomScale, animated: true)
     else 
        scrollView.setZoomScale(scrollView.maximumZoomScale, animated: true)
    

非常感谢您的任何帮助

【问题讨论】:

imageview 框架在哪里? 根据您的问题,请在***.com/questions/43624834/…查看我的回答 【参考方案1】:

当您设置滚动视图的缩放比例时,问题出在您的代码中。您没有指定它应该缩放到的位置。所以很自然地,它会缩放并停留在左上角。

您需要在handleDoubleTap(recognizer: UITapGestureRecognizer) 中获取触摸位置,计算缩放矩形,然后在滚动视图上调用scrollRectToVisible

【讨论】:

handleDoubleTap 仅用于当用户双击它会放大或缩小时。但是当我用手指放大时,它也只是放大到左上角。 您使用的是自动布局还是约束? 是的,我对滚动视图中的 imageView 使用了约束 如果你使用约束,那么它会带回左上角。不要使用约束。 感谢您对我的帮助。我还以编程方式创建了图像视图。

以上是关于Scrollview 只缩放到左上角的主要内容,如果未能解决你的问题,请参考以下文章

使用缩放在 UITableViewCell 中缩放 UIImageView

如何在 ScrollView (iPhone) 中启用缩放

嵌套的 ScrollView - 缩放后无法滚动到新照片

UITapGestureRecognizer 正在覆盖 Scrollview 上的 UIButton 操作

iOS 7 缩放不能在具有 AutoLayout 的 ScrollView 中工作,但在 iOS8/9 中工作

如何确定垂直 ScrollView 的方向?