UIScrollView 通过拖动到主视图

Posted

技术标签:

【中文标题】UIScrollView 通过拖动到主视图【英文标题】:UIScrollView pass dragging to main view 【发布时间】:2014-06-09 01:18:57 【问题描述】:

我有下一个麻烦,希望你能给我建议来处理它。

我有带有垂直滚动的页面控制器。在页面视图内部,我使用了一些组件,其中之一是 UIScrollView。为了在页面之间滚动,我应该拖动除此 UIScrollView 之外的任何内容,因为 ScrollView 会捕获任何事件并阻止页面控制器获取它们。

所以我的问题是,如何将拖动事件从 UIScrollView 传递给 UIPageControllerView。

例如,当 UISCrollView 的滚动内容到达顶部时,它会通过拖动,以便页面控制器可以更改页面。反之亦然,如果您到达 UIScrollView 内容的末尾,则下一次拖动由 PageController 处理以更改页面。

感谢任何建议。 谢谢。

【问题讨论】:

【参考方案1】:

你想要的听起来很像下拉刷新技术,你可以在其中下拉页面以获取最新的推文/Facebook 帖子/柠檬派食谱/任何东西。您不希望刷新,而是希望该事件触发到新页面的转场。默认内置仅适用于 UITableView,但有很多库可以让您使用 UIScrollView。这是一个例子:

http://mt.gomiso.com/2012/03/22/yet-another-pull-to-refresh-library/

您可以将它们拆开看看或按原样使用它们,我无法准确确定您想要什么。


您还可以尝试深入研究以下 UIScrollView 方法:

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

然后看看 contentOffset 在那个时候有什么值。

现在,如果您想从 UIPageViewController 中查看滚动视图的作用,您可以在 UIPageViewController 上实现 UIScrollViewDelegate 协议并将该视图控制器设置为 UIScrollView 的委托:

https://developer.apple.com/library/ios/documentation/uikit/reference/uiscrollviewdelegate_protocol/reference/uiscrollviewdelegate.html

代码看起来有点像这样:

.h:

@interface ViewController : UIPageViewController<UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
// The rest of your properties

@end

.m:

- (void)viewDidLoad;

    // Tell the scrollView you want to be the delegate for it
    self.scrollView.delegate = self;


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

    // read self.scrollView.contentOffset and see if it has been pulled out of bounds
    // If it is, do a segue

【讨论】:

以上是关于UIScrollView 通过拖动到主视图的主要内容,如果未能解决你的问题,请参考以下文章

在 UIScrollView 中拖动 UIButtons?

自定义按钮视图:检测触摸向下/向上,快速,并回退拖动到 UIScrollView

UIScrollView 通过在框架内拖动来滚动

拖动后取消 UIScrollView 弹跳

UIScrollView 后面如何与 UIView 交互

如何保持 UIscrollview 框架固定但动态范围