uiscrollview 水平拉动以根据拖动的距离选择对象

Posted

技术标签:

【中文标题】uiscrollview 水平拉动以根据拖动的距离选择对象【英文标题】:uiscrollview pull horizontal to select object base on how far you drag 【发布时间】:2013-08-20 06:23:08 【问题描述】:

我有一个 uiscrollview,我放了 4 个 uiviews 来做一个选项。我为 uiview1 放标签 1,为 uiview2 放标签 2,对于 uiview 3,我放标签 3,uiview4 我放标签 4。

之后我隐藏了 4 个 uiview,因此每次下拉屏幕时,4 个 uiview 都会根据用户拉动的距离显示。

谁能举例说明当你在 ios iphone 中拉屏幕时如何显示选择了哪个 uiview?

【问题讨论】:

【参考方案1】:

您可以使用滚动视图的 contentOffset 来查找用户拉动滚动视图的距离。

使用滚动查看委托方法:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

通过检查视图的框架和 scrollView contentOffset,您可以确定哪个视图可见(即 uiview1、uiview2、..)。

编辑:

你的逻辑应该是这样的:

if(uiview1.frame.origin.y - scrollView.contentOffset.y > uiview1.frame.origin.y + uiview1.frame.size.height)

    //your logic for selection of uiview1
else if.......

将此条件从最后一个视图应用到第一个视图。

【讨论】:

你能举个例子吗? 嗨@OMK,当我停止拉动并且(uiview1,uiview2 ...)内容将显示在屏幕上的某个位置时,您能否提供更多示例。我是ios新手,对编码不熟悉。 在拉/拖滚动视图后,要标记为选中的可见 uiview。对吗? 是的,就像 if(scrollView.contentOffset.y == -60) selectedLabel.text = uiview1。嗯,我不知道确切的脚本。 我已经给出了一些示例逻辑,请尝试并告诉我。【参考方案2】:

供您参考,您可以从此处查看页面控件的示例实现。 http://developer.apple.com/library/ios/#samplecode/PageControl/

对于您想要的实现,令您惊讶的是,滚动视图的宽度实际上小于 320(或 480)。要设置的魔法属性是:

scrollView.clipsToBounds = 否 此实现的唯一问题是,如果触摸超出了滚动视图的范围,则滚动视图不会获得任何触摸事件。这可以通过将其父 hitTest 事件传递给 scrollView 来解决。

只是为了链接到更好的解释:UIScrollView 水平分页,如 Mobile Safari 选项卡

与我推荐的略有不同,但做同样的事情。

编辑:

我有一个名为 LXPagingViews 的小项目,它可以执行上述操作,希望以开箱即用的方式(请给我一个拉取请求或问题反馈):https://github.com/lxcid/LXPagingViews

【讨论】:

你为什么要抄袭?答案和开源插件类来自@lxcid,而不是你。 ***.com/questions/5618780/…

以上是关于uiscrollview 水平拉动以根据拖动的距离选择对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用刷新控件限制拉动距离?

如何在 UIScrollView 中实现可拖动的 UIView 子类?

如果自动布局打开,防止 UIScrollView 水平滚动

拖动后取消 UIScrollView 弹跳

将两个 UIScrollView 连接在一起

使用 UIScrollView 分页拉动刷新