我希望在页面滚动过程中从uipageviewcontroller接收更新。我想知道%中的transitionProgress。(当用户移动手指以转到另一个页面时,该值应更新)。我感兴趣的是从一页到另一页的动画进度,而不是总页数的进度。
到目前为止,我发现的是:
percentComplete; = CGFloat percentComplete = self.pageViewController.transitionCoordinator
发布于 2014-03-23 23:14:53
最后,我找到了一个解决方案,尽管这可能不是最好的方法:
我首先在滚动视图上添加一个观察者,如下所示:
// Get Notified at update of scrollview progress
NSArray *views = self.pageViewController.view.subviews;
UIScrollView* sW = [views objectAtIndex:0];
[sW addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:NULL];
当观察者被调用时:
NSArray *views = self.pageViewController.view.subviews;
UIScrollView* sW = [views objectAtIndex:0];
CGPoint point = sW.contentOffset;
float percentComplete;
//iPhone 5
if([ [ UIScreen mainScreen ] bounds ].size.height == 568){
percentComplete = fabs(point.x - 568)/568;
} else{
//iphone 4
percentComplete = fabs(point.x - 480)/480;
}
NSLog(@"percentComplete: %f", percentComplete);
我很高兴我找到了这个:-)
发布于 2016-05-22 07:11:59
在SWIFT中复制粘贴;)非常适合我
extension UIPageViewController: UIScrollViewDelegate {
public override func viewDidLoad() {
super.viewDidLoad()
for subview in view.subviews {
if let scrollView = subview as? UIScrollView {
scrollView.delegate = self
}
}
}
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
let point = scrollView.contentOffset
var percentComplete: CGFloat
percentComplete = abs(point.x - view.frame.size.width)/view.frame.size.width
print("percentComplete: ",percentComplete)
}
}
发布于 2014-05-06 05:58:14
由于我认为滚动的功能将永远存在,但内部实现可能会更改为滚动视图以外的其他功能,因此我找到了下面的解决方案(我没有对此进行过太多测试,但仍然如此)
NSUInteger offset = 0;
UIViewController * firstVisibleViewController;
while([(firstVisibleViewController = [self viewControllerForPage:offset]).view superview] == nil) {
++offset;
}
CGRect rect = [[firstVisibleViewController.view superview] convertRect:firstVisibleViewController.view.frame fromView:self.view];
CGFloat absolutePosition = rect.origin.x / self.view.frame.size.width;
absolutePosition += (CGFloat)offset;
(self在这里是UIPageViewController
,[-viewControllerForPage:]
是返回给定页面上的视图控制器的方法)
如果absolutePosition
为0.0f,则显示第一个视图控制器,如果等于1.0f,则显示第二个视图控制器,依此类推。这可以在CADisplayLink
中与委托方法和/或UIPanGestureRecognizer
一起重复调用,以有效地了解UIPageViewController
的当前进度的状态。
编辑:使其适用于任意数量的视图控制器
https://stackoverflow.com/questions/22577929
复制相似问题