【问题标题】:Swift 3 UIScrollview not asking zoomingSwift 3 UIScrollview 不要求缩放
【发布时间】:2017-08-01 17:14:00
【问题描述】:

这让我发疯了!

我将我的UIScrollView 基于http://koreyhinton.com/blog/uiscrollview-crud.html 以使其具有程序性,因此在我的滚动视图中设置了一个容器视图。但它会平移,但不会缩放。

类 BinaryTreeViewController: UIViewController, UIScrollViewDelegate {

var scrollView: UIScrollView!
var containerView : UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    let width:CGFloat  = self.view.bounds.width
    let height:CGFloat = self.view.bounds.height

    scrollView = UIScrollView()
    scrollView.delegate = self
    scrollView.minimumZoomScale = 0.5
    scrollView.maximumZoomScale = 2.0
    scrollView.contentSize = CGSize(width: width*2, height: 2000)

    scrollView.backgroundColor = .red
    containerView = UIView()

    scrollView.addSubview(containerView)
    view.addSubview(scrollView)

    containerView.isUserInteractionEnabled = true
    scrollView.isUserInteractionEnabled = true
}

override func viewDidLayoutSubviews() {

    super.viewDidLayoutSubviews()

    scrollView.frame = view.bounds
    containerView.frame = CGRect(x: 0, y: 0, width: scrollView.contentSize.width, height: scrollView.contentSize.height)
}



override func viewWillLayoutSubviews() {
        //I create a view called "theView"
        containerView.addSubview(theView)
 }

以下函数在任何时候都不会触发

func update(zoomScale: CGFloat, offSet: CGPoint) {
    scrollView.zoomScale = zoomScale
}

func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
    return containerView
}

func scrollViewDidZoom(_ scrollView: UIScrollView) {
    NSLog("scroll")
}

【问题讨论】:

    标签: ios swift uiscrollview


    【解决方案1】:

    您真的不需要为此编写太多代码。 您可以在情节提要中设置 scrollView 所需的所有内容,并且只需要为要缩放的视图提供出口。 设置控制器,添加滚动视图,将委托属性连接到视图控制器,在 IB 中添加缩放视图作为子视图。

    在类中,使控制器符合 UIScrollViewDelegate,并使用 viewForZooming,一个滚动视图委托方法。

    class ViewController: UIViewController, UIScrollViewDelegate {
    
    @IBOutlet weak var zoomer: UIImageView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view, typically from a   nib.
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        func viewForZooming(in scrollView: UIScrollView) -> UIView? {
            return zoomer
        }
    }
    

    附:使用更新的资源进行学习,Ray Wenderlich、AppCoda 等 - 这是一个充满优质资源的大型网络,而 Swift 也在不断变化。

    【讨论】:

    • 谢谢。对于将来需要解决方案的任何人,以下方法都有效。教程的问题是,一旦我将它们应用到项目中,就会出现问题 - 例如,在这里我以编程方式对 UI 视图进行子类化,所以这很棘手。现在我发现基本 Swift 之外的文档具有挑战性。无论如何这里是代码: func viewForZooming(in scrollView: UIScrollView) -> UIView? { NSLog("滚动缩放") return containerView }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多