2017-06-01 28 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