Swift 3水平多个UISCROLLVIEW-不同的速度



我创建了两个uiscrollviews(一个名为scrollview和一个名为scrolllevel4(

当我移动scrolllevel4时,我可以使用scrollview以相同的速度使用: -

func scrollViewDidScroll(_ scrollLevel4: UIScrollView) {
    scrollView.contentOffset.x = scrollLevel4.contentOffset.x

}

但是,如果我想以不同的速度移动scrollview,则不确定该怎么办

scrollView.contentOffset.x = scrollLevel4.contentOffset.x 

它崩溃了,甚至简单 10,相同的速度,交错的偏移,仍然崩溃

还尝试了.scrollecttovisible((方法

想法?

而无需看到错误或代码,很难确定,但是您很可能是为两个 scrollviews设置相同的代表。当您拖动scrollLevel4时,它会触发scrollView上的滚动,因此您将获得无限循环并最终崩溃。

如果您想在两个scrollviews上使用相同的委托,则需要在操作之前检查哪一个。这是一个基本的工作实现。打开一个新的单个视图项目,并在ViewController中替换代码。swift中的代码:

import UIKit
class ViewController: UIViewController, UIScrollViewDelegate {
    var imageView1: UIImageView!
    var imageView2: UIImageView!
    var scrollView1: UIScrollView!
    var scrollView2: UIScrollView!
    override func viewDidLoad() {
        super.viewDidLoad()
        imageView1 = UIImageView(image: UIImage(named: "image.jpg"))
        imageView2 = UIImageView(image: UIImage(named: "image.jpg"))
        scrollView1 = UIScrollView(frame: CGRect(origin: CGPoint.zero, size: CGSize(width: 200, height: 200)))
        scrollView1.contentSize = imageView1.bounds.size
        scrollView1.addSubview(imageView1)
        view.addSubview(scrollView1)
        scrollView2 = UIScrollView(frame: CGRect(origin: CGPoint(x: 0, y: 210), size: CGSize(width: 200, height: 200)))
        scrollView2.contentSize = imageView2.bounds.size
        scrollView2.addSubview(imageView2)
        view.addSubview(scrollView2)
        scrollView2.delegate = self
        scrollView1.delegate = self
    }
    func scrollViewDidScroll(_ scrolled: UIScrollView) {
        // both scrollViews call this when scrolled, so determine which was scrolled before adjusting
        if scrolled === scrollView1 {
            scrollView2.contentOffset.x = scrolled.contentOffset.x + 100
        } else if scrolled === scrollView2 {
            scrollView1.contentOffset.x = scrolled.contentOffset.x - 100
        }
    }
}

请注意,无论您适用于一个偏移量的任何修改,都必须将确切的逆(或根本没有(应用于另一个。否则,您将有一个无限的来回滚动在崩溃中结束的环路。

最新更新