2017-06-01 20 views
1

我已经创建了两个UIScrollViews(一位叫滚动视图和一个名为scrollLevel4)斯威夫特3卧式多的UIScrollView - 不同速度

当我移动scrollLevel4,我可以滚动视图使用相同的速度移动: -

func scrollViewDidScroll(_ scrollLevel4: UIScrollView) { 

    scrollView.contentOffset.x = scrollLevel4.contentOffset.x 


} 

但是如果我想在不同的步调滚动视图,不知道该怎么办,每当我添加任何一行的末尾:

scrollView.contentOffset.x = scrollLevel4.contentOffset.x 

崩溃,E VEN一个简单的+ 10,同样的速度,交错偏移,仍然崩溃

还试图.scrollRectToVisible()方法

思考?

回答

2

没有看到错误或你的代码很难说肯定,但最有可能的是你设置的两个 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 
     } 
    } 

} 

注意,无论修改应用,以抵消一个的,你必须应用完全相反的(或者什么都没有)到其他。否则,你会有一个无限循环的来回滚动,在一次碰撞中结束。

+0

@ peter my hero,thank you sir for replying,sorted – user2596590