如何滚动到 UIScrollview 中的 UIButton 位置

Posted

技术标签:

【中文标题】如何滚动到 UIScrollview 中的 UIButton 位置【英文标题】:How to scroll to a UIButton location in the UIScrollview 【发布时间】:2014-10-23 18:34:00 【问题描述】:

我在UIScrollView 中有UIButton, 我想第一次滚动到这个UIButton在页面中心的位置。

我知道使用scrollView.setContentOffset(CGPointMake(X, Y), animated: true)

但我不知道如何将UIButton 的位置转换为 X、Y

感谢您的帮助:)

【问题讨论】:

【参考方案1】:

根据 UIButton 在滚动视图中的位置创建一个 CGPoint 变量:

 var buttonLocation = CGPointMake(button.bounds.origin.x, button.bounds.origin.y)

然后将其赋值给 contentOffset:

scrollView.setContentOffset(buttonLocation, animated: true)

【讨论】:

谢谢,但它不起作用,button.bounds.origin.x 总是 0 :( 如果您希望UIButton 的位置在其superview 中,则应该是button.frame...,而不是button.bounds... 你是对的,但我需要将 button.frame.origin.x 转换为 OFFSET,我不知道如何工作:( 我的错!有时我会被赶上并忘记校对。迈克是对的。关于您的偏移问题,您可以将函数设置为根据按钮的位置移动并提供填充:CGPointMake(button.frame.origin.x + 10, button.frame.origin.y + 10, animated: true )。这就是你要找的吗? 我想你不明白我的问题:(【参考方案2】:
// find the distance of the button from the center of the view
let deltaX = button.center.x - self.view.center.x
let deltaY = button.center.y - self.view.center.y

// change scrollView content offset based on the distance the button is from the center
scrollView.setContentOffset(CGPointMake(deltaX, deltaY), animated: true)

【讨论】:

滚动视图是否有足够的内容大小使按钮可以滚动到视图的中心?例如,如果滚动视图内容大小与视图大小相同,则不会发生滚动。同样,如果按钮位于滚动视图的顶部,则滚动视图无法向下滚动更多以使按钮居中,因为没有更多内容。【参考方案3】:

当您控制按钮并将其拖到文件中然后将其放入文件中时,使按钮成为一个动作

scrollView.scrollRectToVisible(CGRectMake(x, y, w, h), animated: true)

示例:

@IBAction func home(sender: AnyObject) 
    scrollView.scrollRectToVisible(CGRectMake(x, y, w, h), animated: true)
    

【讨论】:

以上是关于如何滚动到 UIScrollview 中的 UIButton 位置的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 内的 UIWebView 并滚动到 Web 视图中的选定字段

分页 UIScrollView 内的 UIScrollView

滚动 UIScrollView 时如何缩放

使用 UIScrollView 在多个图像之间水平滚动

如何区分 UIScrollView 中的平移和滚动

如何加快 UIScrollView 中的滚动速度? [关闭]