UINavigationController - 获取交互式pop手势识别器进度

时间:2017-03-07 15:04:31

标签: ios swift uinavigationcontroller uitabbarcontroller

我有TabBarController,它有自定义中心按钮(UIButton)。这里的目标是在用户从其他ViewControllers返回到TabBarController时为其不透明度设置动画。

所以我想要实现的是开始将中心按钮的不透明度从0设置为1,具体取决于" far"用户已刷过。 我正在使用interactivePopGestureRecognizer,因此请检测边缘滑动"进度"对我来说是理想的。

或者还有其他方法吗?也许检测topViewController的可见性?

3 个答案:

答案 0 :(得分:2)

我刚刚通过添加自定义目标

解决了这个问题
@objc func handlePopGesture ()
{
    viewtoanimate.alpha = self.transitionCoordinator!.percentComplete
}

然后

alpha

答案 1 :(得分:0)

UINavigationControllerDelegate有此委托方法

- (nullable id <UIViewControllerInteractiveTransitioning>)navigationController:(UINavigationController *)navigationController
                          interactionControllerForAnimationController:(id <UIViewControllerAnimatedTransitioning>) animationController NS_AVAILABLE_IOS(7_0);

您可以在导航控制器委托上调用此方法以获取UIPercentDrivenInteractiveTransition的实例。该类对象具有属性

@property (readonly) CGFloat percentComplete;

使用它来查找完成转换的百分比。

答案 2 :(得分:0)

我认为您不需要滑动进度的中间值,请尝试以下代码:

- (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) {

    }];
}