2017-02-27 2 views
0

Ich möchte Unteransicht zu blättern Ansicht, gibt es meinen Code zum Hinzufügen von Unteransicht zu blättern, ich bin hinzufügen Geste für Unteransichten, und ich möchte, wenn eine Unteransicht dieser Unteransicht in suchen Sichtweite. Wie kann das gemacht werden?Wenn Scroll View Subview Scroll bei Subview Position

 var startpoint = UIScreen.main.bounds.width/4 
     var with = 150 
     var height = 55 
     var space = 15 

     override func viewDidLoad() { 
       super.viewDidLoad() 

       let max = 4 
      scrollView.delegate = self 
      let bound = self.view.bounds.width/4 

      for index in 0...max { 

       catView = CategoryView.init(frame: CGRect(x: (with + space) * index + Int(startpoint) , y: 0, width: with, height: height)) 

       let label1 = UILabel(frame: CGRect(x: 0, y: 0, width: 20, height: 20)) 
       catView.backgroundColor = #colorLiteral(red: 0.6000000238, green: 0.6000000238, blue: 0.6000000238, alpha: 1) 
       label1.text = String(index) 
       label1.textColor = #colorLiteral(red: 0.4745098054, green: 0.8392156959, blue: 0.9764705896, alpha: 1) 
       label1.textAlignment = .center 
       catView.addSubview(label1) 

       catView.tag = index 

       self.allView.append(catView) 

       self.scrollView.addSubview(catView) 

    } 

      let tapGestureRecognizer = UITapGestureRecognizer(target:self, action: #selector(self.subviewTapped(recognizer:))) 
      scrollView.addGestureRecognizer(tapGestureRecognizer) 
      scrollView.isUserInteractionEnabled = true 

     self.scrollView.contentSize = CGSize(width:CGFloat(scrollView.subviews.count * 150) + CGFloat(bound) , height:self.scrollView.frame.height) 

      }  
    func subviewTapped(recognizer : UIGestureRecognizer) { 

     let tappedPoint: CGPoint = recognizer.location(in: self.scrollView!) 
     let x: CGFloat = tappedPoint.x 
     let y: CGFloat = tappedPoint.y 

     print(tappedPoint) 
     print(x) 
     print(y) 

     let index = Int(Int(x - startpoint)/with) 
     self.label.text = String(index) 
     var scrollRect = scrollView.subviews[index].frame 
     scrollRect.origin.x = self.view.center.x 
     let centerView = CGRect(x: Int(self.view.center.x), y: 0, width: 75, height: 55) 
     scrollView.scrollRectToVisible(centerView, animated: true) 
     scrollView.contentOffset = CGPoint(x: scrollRect.origin.x, y: 0) 
    } 

wie Yandex.taxi Anwendung

enter image description here

+0

Was möchten Sie tun, wenn sich 'CategoryView' in der Mitte der sichtbaren Bildlaufansicht befindet? – dmorrow

+0

ich möchte, wenn diese ansicht hinzufügen eine andere blättern ansicht oben, ich werde bildbeispiel hinzufügen. – ava

+0

@dmorrow Ich bearbeite meinen Code nun kann ich Hexenansicht in der Bildlaufansicht ausgewählt finden, aber jetzt möchte ich, wenn Sie diese Teilansicht blättern Ansicht gescrollt und ausgewählte Unteransicht in der Mitte der Ansicht suchen. – ava

Antwort

0

In Ihrem Code Beispiel setzen Sie beide

scrollView.scrollRectToVisible(centerView, animated: true) 
scrollView.contentOffset = CGPoint(x: scrollRect.origin.x, y: 0) 

Sie nur benötigen, sollten scrollRectToVisible zu nennen. Vielleicht möchten Sie aber Ihrem centerView rect einen y Wert neben 0 geben.