观察 UIPageViewController 的转换状态

Posted

技术标签:

【中文标题】观察 UIPageViewController 的转换状态【英文标题】:Observe the transition state of UIPageViewController 【发布时间】:2015-06-16 14:15:31 【问题描述】:

我想根据“在屏幕上”的多少来调整视图的视觉状态。这些视图由 UIPageViewController 管理,使用 stock .Scroll 过渡样式。

我想要的行为是让标题在屏幕上为 100% 时为 100% 不透明度,在屏幕上为 0% 时为 0% 不透明度,作为平移导航手势/动画的函数在两者之间转换.

我希望我可以插入 x 坐标或完成百分比动画,但我在任何地方都看不到属性。我知道页面视图控制器在幕后使用滚动视图,但有点担心接触到私有 API,而且我没有看到访问它的公共方法。

有什么方法可以连接到现有的交互式过渡,以便我可以向子视图控制器添加一些额外的行为,这些行为可以根据完成百分比进行缩放?

更新:

尝试实现 UIScrollViewDelegate 的 scrollViewDidScroll。没运气。我认为页面视图控制器确实会调用此委托的方法。 尝试在子视图控制器中使用 viewWillDisappear/viewDidAppear。这是功能性的,但动画不是响应式的,因为这些在用户行为的开始/结束时被称为单个事件。

【问题讨论】:

【参考方案1】:

您已经更新了有关 UIScrollViewDelegate 的问题,但是对于类似的问题,我使用 UIScrollViewDelegate 如下:

for(UIView *aView in self.pageViewController.view.subviews)
    if([aView isKindOfClass:[UIScrollView class]])
        UIScrollView* sv = (UIScrollView*)aView;
        sv.delegate = self;
    

在我的情况下,UIPageViewController 位于容器视图控制器中。这就是为什么我在我的类中添加了一个委托(PagerDelegate)来在滚动视图滚动时调用 ContainerViewController:

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    [self.pagerDelegate viewDidScroll:scrollView];

在 ContainerViewController:

#pragma mark - PagerDelegate

- (void)viewDidScroll:(UIScrollView*)scrollView 
    // calculate the transition percentage and do anything you need...

希望我理解正确并对其他人有所帮助。 (可能你已经解决了这个问题,因为在 2015 年 6 月 16 日问过)

【讨论】:

以上是关于观察 UIPageViewController 的转换状态的主要内容,如果未能解决你的问题,请参考以下文章

由于 AVPlayer 和观察者的反初始化失败导致的内存泄漏

uipageviewcontroller 中的 Swift uipageviewcontroller

如何从属于 UIPageViewController 的 UIViewController 之一更改 UIPageViewController?

UIPageViewController - 不符合协议

UIPageViewController 方向只向前

NavigationController 中的 UIPageViewController