UINavigationController - 获取交互式弹出手势识别器进度
Posted
技术标签:
【中文标题】UINavigationController - 获取交互式弹出手势识别器进度【英文标题】:UINavigationController - get interactive pop gesture recognizer progress 【发布时间】:2017-03-07 15:04:30 【问题描述】:我有 TabBarController,它有自定义中心按钮 (UIButton)。这里的目标是在用户从其他 ViewControllers 返回到 TabBarController 时为其不透明度设置动画。
所以我想要实现的是开始动画中心按钮的不透明度从 0 到 1,这取决于用户滑动的“距离”多远。
我正在使用interactivePopGestureRecognizer
,因此检测边缘“进度”的滑动对于我的情况来说是理想的。
或者还有其他方法吗?也许检测 topViewController 可见性?
【问题讨论】:
@BangOperator 这是 UIButton 而不是 UITabBarItem。 @BangOperator UITabBarController 是根用户。它有很多孩子,都有自己的 UINavigationController。就是这样。 【参考方案1】:我刚刚通过添加自定义目标解决了这个问题
self.navigationController?.interactivePopGestureRecognizer?.addTarget(self, action: #selector(CountdownsViewController.handlePopGesture))
然后
@objc func handlePopGesture ()
viewtoanimate.alpha = self.transitionCoordinator!.percentComplete
【讨论】:
【参考方案2】:我认为你不需要滑动进度的中间值,试试这个代码:
- (void)viewWillAppear:(BOOL)animated
[super viewWillAppear:animated];
id<UIViewControllerTransitionCoordinator> t = self.transitionCoordinator;
BOOL b = [t animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context)
aCustomView.alpha = 1.f;
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context)
];
- (void)viewWillDisappear:(BOOL)animated
[super viewWillDisappear:animated];
id<UIViewControllerTransitionCoordinator> t = self.transitionCoordinator;
BOOL b = [t animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context)
aCustomView.alpha = 0.f;
completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context)
];
【讨论】:
【参考方案3】:UINavigationControllerDelegate
有这个委托方法
- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController NS_AVAILABLE_ios(7_0);
您可以在导航控制器委托上调用此方法以获取UIPercentDrivenInteractiveTransition
的实例。这个类对象有一个属性
@property (readonly) CGFloat percentComplete;
使用它来查找转换完成的百分比。
【讨论】:
不错,看起来很有希望。知道如何从委托函数中获取 UIPercentDrivenInteractiveTransition 实例吗?以上是关于UINavigationController - 获取交互式弹出手势识别器进度的主要内容,如果未能解决你的问题,请参考以下文章
带有主 UINavigationController 和详细 UINavigationController 的 UISplitViewcontroller
带有 UINavigationController 的 UITabBarController,在 hidesBottomBarWhenPushed 上隐藏 UINavigationController
在 UINavigationController 内的 UITabBarcontroller 中添加 UINavigationController?
UINavigationController 与 AppDelegate 中的 UISegmentedControl 切换 UINavigationController 的 rootviewcontr
从一个 UINavigationController 到另一个 UINavigationController (Swift iOS 9, xcode 7)