zoukankan      html  css  js  c++  java
  • 上拉、下拉UITableView,交互式 模态弹出(自定义弹出动画)

    部分代码 InteractiveTransition 类继承NSObject:

    - (instancetype)initWithPresentingController:(UITableViewController *)presentingVc presentedController:(UIViewController *)presentedVc {
        self = [super init];
        if (self) {
            self.vc = presentedVc;
            self.vc.transitioningDelegate =self;
            self.presentingVc = presentingVc;
        }
        return self;
    }
    
    - (void)new_scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        self.interactiveTransition = [[UIPercentDrivenInteractiveTransition alloc]init];
        [self.presentingVc presentViewController:self.vc animated:YES completion:nil];
    }
    
    - (void)new_scrollViewDidScroll:(UIScrollView *)scrollView {
        
        CGFloat offsetY = fabs(scrollView.contentOffset.y);
        
        CGFloat screenH = [UIScreen mainScreen].bounds.size.height / 3.0;
        progress = offsetY / screenH;
        progress = progress-0.3;
        if (progress > 0) {
            [self.interactiveTransition updateInteractiveTransition:progress];
        }
        
    }
    - (void)new_scrollViewWillEndDragging {
        if (progress < 0.4) {
            [self.interactiveTransition cancelInteractiveTransition];
        }else {
            [self.interactiveTransition finishInteractiveTransition];
        }
        self.interactiveTransition = nil;
    }
    
    - (nullable id <UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source {
        
        return self.animation;
    }
    
    - (id<UIViewControllerInteractiveTransitioning>)interactionControllerForPresentation:(id<UIViewControllerAnimatedTransitioning>)animator {
        
        return self.interactiveTransition;
    }

    PresentAnimation 类继承NSObject 实现 UIViewControllerAnimatedTransitioning协议

    - (NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext {
        return 1.0;
    }
    
    - (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
        
        UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
        UIView *containerView = [transitionContext containerView];
        [containerView addSubview:toView];
        
        toView.frame = CGRectMake(50, containerView.bounds.size.height, containerView.bounds.size.width - 100, containerView.bounds.size.height - 300);
        
        [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
            toView.frame = containerView.bounds;
        }completion:^(BOOL finished) {
            [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
        }];
        
    }

    控制器:

    - (InteractiveTransition *)interactive {
        if (!_interactive) {
            _interactive = [[InteractiveTransition alloc]initWithPresentingController:self presentedController:[[TwoViewController alloc]init]];
        }
        return _interactive;
    }
    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
        
        [self.interactive new_scrollViewWillBeginDragging:scrollView];
    }
    
    
    - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
        
        [self.interactive new_scrollViewWillEndDragging];
    }
    - (void)scrollViewDidScroll:(UIScrollView *)scrollView {
        
        [self.interactive new_scrollViewDidScroll:scrollView];
    }

    完整代码:http://pan.baidu.com/s/1i3Uewip

  • 相关阅读:
    Maven配置阿里云镜像
    docker启动报错 error creating overlay mount
    docker 运行jenkins容器
    centos7 安装docker
    Create PropertyManager Page Example (VB.NET)
    Solidworks api帮助代码报错 “特性说明符不是一个完整的语句。请使用行继续符将该特性应用于下列语句。“的解决办法!
    Solidworks API中在一个拉伸的矩形的前后面建立两个基准面的代码示例
    用vb.net运行一个应用程序,以solidworks为例
    solidworks二次开发中直接录出来的VB代码拿到自己建的项目里出现“未设置对象变量或with块变量”解决办法!
    visual studio xamarin 离线安装文件以及 android 模拟器
  • 原文地址:https://www.cnblogs.com/CyanStone/p/5116946.html
Copyright © 2011-2022 走看看