在ScrollView中按下时的中心元素

时间:2016-04-26 12:53:23

标签: ios iphone swift uiscrollview

我真的该如何做一件可能很容易的事情。

我的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)
}

我想按下我的一个按钮使他居中并正确定位其他按钮。

示例: enter image description here

如果我按5我想要这个结果:

enter image description here

按钮5移动到中心。

4 个答案:

答案 0 :(得分:4)

现在我建议使用的是滚动视图方法scrollView.scrollRectToVisible(CGRect, animated: Bool)。这将移动滚动视图,使您的内容的某个部分可见。

要创建CGRect,您可以执行以下操作:

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)

我的数学可能有些偏差,但实质上是你使用scrollView和UIButton的大小为滚动视图创建一个CGRect来移动。这意味着当单击一个按钮时,您可以使用如下实现:

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)

}

如果适当调整到您的项目,这应该允许您执行您已概述的内容。

答案 1 :(得分:2)

希望这会对你有所帮助。

在按钮操作方法中写下面的代码。

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

答案 2 :(得分:0)

我想你想把触摸的按钮放在中心,所以有一个简单的解决方案,你可以使用按钮的center.x - scrollview.width / 2作为offsetX来构造contentOffset并采取两个边界情况考虑到:offsetx&lt; 0和offsetx + scrollview.width&gt; scroll.contentSize.width

答案 3 :(得分:-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)

它完美地居中。大家好