2017-06-01 5 views
1

Ich habe zwei UIScrollViews erstellt (One genannt Scrollview und eine namens scrollLevel4)Swift 3 Horizontale Multiple UIScrollView - Verschiedene Geschwindigkeiten

wenn ich scrollLevel4 bewegen, kann ich Scrollview mit der gleichen Geschwindigkeit zu bewegen, mit: -

func scrollViewDidScroll(_ scrollLevel4: UIScrollView) { 

    scrollView.contentOffset.x = scrollLevel4.contentOffset.x 


} 

jedoch Wenn ich Scroll in einem anderen Tempo bewegen will, nicht sicher, was zu tun ist, wenn ich etwas zu Ende der Zeile hinzu:

scrollView.contentOffset.x = scrollLevel4.contentOffset.x 

stürzt, e ven einfaches + 10, gleiches Tempo versetzt gestaffelt, noch abstürzt

auch versucht .scrollRectToVisible() -Methode

Gedanken?

Antwort

2

Ohne den Fehler oder Ihren Code zu sehen, ist es schwer zu sagen, aber höchstwahrscheinlich setzen Sie den gleichen Delegaten für beide scrollViews. Wenn Sie scrollLevel4 ziehen, wird ein Scroll auf scrollView ausgelöst, so dass Sie eine Endlosschleife und schließlich einen Absturz erhalten.

Wenn Sie den gleichen Delegaten für beide scrollViews verwenden möchten, müssen Sie prüfen, welche übergeben wurde, bevor Sie mit ihnen arbeiten. Hier ist eine grundlegende Arbeitsimplementierung. Öffnen Sie ein neues Einzelansicht Projekt und ersetzen Sie den Code in ViewController.swift mit:

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 
     } 
    } 

} 

Beachten Sie, dass, was auch immer Änderungen, die Sie auf den Offset eines anwenden, können Sie die exakte Umkehrung gelten haben (oder nichts) auf die andere. Andernfalls haben Sie eine endlose Schleife von Hin- und Her-Scrollen, was zu einem Absturz führt.

+0

@peter mein Held, danke Sir für die Antwort, sortiert – user2596590

Verwandte Themen