【问题标题】:How to properly zoom into a picture using scroll view without image flying to a random side如何使用滚动视图正确放大图片而不使图像飞到随机一侧
【发布时间】:2019-09-02 23:34:20
【问题描述】:

我设法在UIScrollView 中将UIImageView 缩放到UIImageView,但图像离开到侧面或底部,因此我无法在放大模式下滚动整个图像。

尝试使用constraints,似乎没有效果。

import Foundation
import UIKit

class PhotoZoomController: UIViewController, UIScrollViewDelegate {

    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var scroller: UIScrollView!
    @IBOutlet weak var back: UIButton!

    weak var image: UIImage?

    override func viewDidLoad() {
        super.viewDidLoad()
        assert(imageView != nil)
        if let iv = imageView {
            iv.image = image
        }
        scroller.delegate = self
    }


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

    @IBAction func exit(_ sender: Any) {
        dismiss(animated: true)
    }


}

【问题讨论】:

    标签: ios swift xcode uiscrollview uiimageview


    【解决方案1】:

    我想通了,首先将storyboard中的imageview以0间距绑定到scrollview的4个边缘,然后为水平/垂直中间定位添加约束。

    之后包括:

    self.imageView?.clipsToBounds = true
    scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
    

    这是整个文件:

    //
    //  PhotoZoomController.swift
    //
    //
    //  Created by John Karasev on 4/04/19.
    //  Copyright © 2019 John Karasev. All rights reserved.
    //
    
    import Foundation
    import UIKit
    
    class PhotoZoomController: UIViewController, UIScrollViewDelegate {
    
        @IBOutlet weak var scroller: UIScrollView!
        @IBOutlet weak var back: UIButton!
        @IBOutlet weak var imageView: UIImageView!
    
        weak var image: UIImage?
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            assert(imageView != nil)
            if let iv = imageView {
                iv.image = image
            }
            scroller.delegate = self
            scroller.zoomScale = 1.0
            scroller.addSubview(imageView!)
            self.imageView?.clipsToBounds = true
            scroller.contentSize = imageView?.image?.size ?? scroller.contentSize
        }
    
    
        func viewForZooming(in scrollView: UIScrollView) -> UIView? {
            return imageView
        }
    
        @IBAction func exit(_ sender: Any) {
            dismiss(animated: true)
        }
    
    
    }
    

    【讨论】:

      【解决方案2】:

      请尝试添加ZoomScale

      scrollView.minimumZoomScale = 1.0 // Minimum zoom scale
      scrollView.maximumZoomScale = 10.0 // Maximum zoom scale
      scrollView.zoomScale = 1.0 //Default zoom scale
      

      希望此代码对您有用。

      【讨论】:

      • 那没有修复它。
      • 当我放大时,图像的底部无法滚动到视图中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多