我真的该如何做一件可能很容易的事情。
我的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)
}
我想按下我的一个按钮使他居中并正确定位其他按钮。
如果我按5我想要这个结果:
按钮5移动到中心。
答案 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)
它完美地居中。大家好