2016-04-26 10 views
1

私は本当に簡単なことをする方法を教えています。ScrollViewで押されたときの中心要素

私はScrollViewにいくつかのボタンがあります。 これは、スクロールビューですべてのボタンを作成する方法です。

var buttonList = [UIButton]() 

func createButton() { 
    let imageArray = fillImageArray() 
    var lastButtonWidth: CGFloat = 0 


    for index in 0..<6 { 
     let frame1 = CGRect(x: ((self.view.frame.size.width/2) - 27.5) + CGFloat(index * 70), y: 0, width: 55, height: 55) 
     let button = UIButton(frame: frame1) 
     button.setImage(imageArray[index], forState: .Normal) 
     button.tag = index 
     button.addTarget(parentViewController, action: #selector(ViewController.buttonClicked(_:)), forControlEvents: .TouchUpInside) 
     self.scrollView.addSubview(button) 
     lastButtonWidth = frame1.origin.x 
     buttonList.append(button) 
    } 
    self.scrollView.contentSize = CGSizeMake(lastButtonWidth + 55, 0) 
} 

私のボタンの1つを押して、中央に配置し、他のボタンを正しく配置したいときに入力します。

例:私は5に押すと enter image description here

私はこの結果をしたい:

enter image description here

ボタン5が中央に移動されます。

+0

あなたのスクロールビューのorigin.xを移動したいですか?どうして?それはあなたのスクロールビューをビューコントローラの側から動かします。 –

+0

私はあなたがこの質問からあなたが欲しいものを理解することができないので、より高いレベルの透明度を作成するためにあなたの質問を編集することをお勧めします。 –

+0

例を追加すると、より明示的になることが期待されます – Makaille

答えて

2

ここでは、スクロール表示方法scrollView.scrollRectToVisible(CGRect, animated: Bool)を使用することをお勧めします。これにより、スクロールビューが移動し、コンテンツの特定の部分が表示されます。 CGRectを作成するには

あなたはこのような何か行うことができます:私の数学は少しオフかもしれないが、本質はあなたがCGRectを作成するためにscrollViewとUIButtonのサイズを使用することである

let scrollWidth = scrollView.frame.width 
let scrollHeight = scrollView.frame.height 

let desiredXCoor = button.frame.origin.x - ((scrollWidth/2) - (button.frame.width/2)) 

let rect = CGRect(x: desiredXCoor, y: 0, width: scrollWidth, height: scrollHeight) 

scrollView.scrollRectToVisible(rect, animated: true) 

を移動するスクロールビュー。これは、ボタンがクリックされたとき、あなたはこのような実装を使用することができます意味:プロジェクトに適切に調整した場合は

func myMethod() { 
    button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 

} 

func buttonClicked(sender: UIButton){ 

    let scrollWidth = scrollView.frame.width 
    let scrollHeight = scrollView.frame.height 

    let desiredXCoor = sender.frame.origin.x - ((scrollWidth/2) - (sender.frame.width/2)) 

    let rect = CGRect(x: desiredXCoor, y: 0, width: scrollWidth, height: scrollHeight) 

    scrollView.scrollRectToVisible(rect, animated: true) 

} 

、これはあなたが概説している何をできるようにする必要があります。

2

希望すると、これが役に立ちます。

ボタンアクションの方法は以下のコードを書いてください。私はあなたがボタンを中央に配置されるように触れたので、簡単な解決策がある、あなたはボタンのcenter.x使用することができたいと

func buttonClicked(sender:UIButton) { 

     for view in self.scrollView.subviews { 

      if view.isKindOfClass(UIButton) && view.tag == sender.tag { 

       let xCenter = max(0, (view.center.x - self.scrollView.frame.width/2)) 

       self.scrollView.setContentOffset(CGPointMake(xCenter, self.scrollView.contentOffset.y), animated: true) 
       break; 
      } 
     } 
} 
0

- contentOffsetを構築するためにoffsetXとしてscrollview.width/2とoffsetx <とoffsetx + scrollview.width> scroll.contentSize.widthの2つの境界状況を考慮してください。

-1

私は自分で見つけました。

let centerScrollView = scrollView.frame.size.height * 2 

UIView.animateWithDuration(0.2, delay: 0, options: UIViewAnimationOptions.CurveLinear, animations: { 
     self.scrollView.contentOffset = CGPoint(x: sender.frame.origin.x - centerScrollView, y: sender.frame.origin.y) 
     }, completion: nil) 

と完全に中央です。皆さん。

関連する問題