UIPageViewController转换'不平衡调用开始/结束外观转换' [英] UIPageViewController transition 'Unbalanced calls to begin/end appearance transitions for '
问题描述
当我浏览 UIPageViewController
比其转换动画更快时,我得到'对< MyDataViewController> <的开始/结束外观转换的非平衡调用
'并且直到我尝试翻页时才会显示横向中的两个视图之一。
任何人都有想法解决此错误?
按照以下步骤解决:
1-声明一个标志,表示动画已完成与否:
BOOL pageAnimationFinished;
2-在viewDidLoad中将此标志设置为true:
pageAnimationFinished = YES;
3-禁用pageViewController的tapGesture并将'self'指定给panGestureRecognizer委托:
'pre>
为(UIGestureRecognizer * gesRecog在self.pageViewController.gestureRecognizers)
{
如果([gesRecog isKindOfClass:[UITapGestureRecognizer类] ])
gesRecog.enabled = NO;
else if([gesRecog isKindOfClass:[UIPanGestureRecognizer class]])
gesRecog.delegate = self;
}
4-通过以下手势识别器委托方法允许/禁止panGestureRecognizer:
- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
如果([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer类]&安培;及([gestureRecognizer.view isEqual:方法self.view] || [gestureRecognizer.view isEqual:方法self.pageViewController.view]))
{
UIPanGestureRecognizer *庞热=(UIPanGestureRecognizer * )gestureRecognizer;
if(!pageAnimationFinished ||(currentPage< minimumPage&& [panGes velocityInView:self.view] .x< 0)||(currentPage> maximumPage&& [panGes velocityInView:self。查看] .x> 0))
返回NO;
pageAnimationFinished = NO;
}
返回YES;
}
5-添加以下pageViewController委托方法:
'pre>
- (无效)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)完成previousViewControllers:(NSArray的*)previousViewControllers transitionCompleted:(BOOL)完成了
{
pageAnimationFinished = YES;
}
When I navigate through UIPageViewController
faster than its transition animation I am getting 'Unbalanced calls to begin/end appearance transitions for <MyDataViewController>
' and one of the two views in landscape isn't shown until I try to turn the page.
Anybody has an idea to solve this bug?
Solved following these steps:
1- Declare a flag to indicate that the animation has finished or not:
BOOL pageAnimationFinished;
2- Set this flag to true in viewDidLoad:
pageAnimationFinished = YES;
3- Disable tapGesture for the pageViewController and assign 'self' to panGestureRecognizer delegate:
for (UIGestureRecognizer * gesRecog in self.pageViewController.gestureRecognizers)
{
if ([gesRecog isKindOfClass:[UITapGestureRecognizer class]])
gesRecog.enabled = NO;
else if ([gesRecog isKindOfClass:[UIPanGestureRecognizer class]])
gesRecog.delegate = self;
}
4- Allow/Disallow panGestureRecognizer through the following gesture recognizer delegate method:
-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
{
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && ([gestureRecognizer.view isEqual:self.view] || [gestureRecognizer.view isEqual:self.pageViewController.view]))
{
UIPanGestureRecognizer * panGes = (UIPanGestureRecognizer *)gestureRecognizer;
if(!pageAnimationFinished || (currentPage < minimumPage && [panGes velocityInView:self.view].x < 0) || (currentPage > maximumPage && [panGes velocityInView:self.view].x > 0))
return NO;
pageAnimationFinished = NO;
}
return YES;
}
5- Add the following pageViewController delegate method:
- (void)pageViewController:(UIPageViewController *)pageViewController didFinishAnimating:(BOOL)finished previousViewControllers:(NSArray *)previousViewControllers transitionCompleted:(BOOL)completed
{
pageAnimationFinished = YES;
}
这篇关于UIPageViewController转换'不平衡调用开始/结束外观转换'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!