观察 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?