zoukankan      html  css  js  c++  java
  • 侧滑手势移除控制器,pop

    继承导航控制器之后

    #import "NAVController.h"

    @interface NAVController ()

    @property (nonatomic,strong)UIPanGestureRecognizer * panRecongizer;

    @property (nonatomic, strong) NSMutableArray *images;

    @property (nonatomic, strong) UIImageView *lastVcView;

    @property (nonatomic, strong) UIView *cover;

    @end

    @implementation NAVController

    - (UIImageView *)lastVcView

    {

        if (!_lastVcView) {

            UIWindow *window = [UIApplication sharedApplication].keyWindow;

            UIImageView *lastVcView = [[UIImageView alloc] init];

            lastVcView.frame = window.bounds;

            self.lastVcView = lastVcView;

        }

        return _lastVcView;

    }

    - (UIView *)cover

    {

        if (!_cover) {

            UIWindow *window = [UIApplication sharedApplication].keyWindow;

            UIView *cover = [[UIView alloc] init];

            cover.backgroundColor = [UIColor blackColor];

            cover.frame = window.bounds;

            cover.alpha = 0.5;

            self.cover = cover;

        }

        return _cover;

    }

    - (NSMutableArray *)images

    {

        if (!_images) {

            self.images = [[NSMutableArray alloc] init];

        }

        return _images;

    }

    - (void)viewDidLoad {

        [super viewDidLoad];

    }

    -(void)panAction:(UIPanGestureRecognizer*)panRecongizer

    {

        

        // 如果只有1个子控制器,停止拖拽

        if (self.viewControllers.count <= 1) return;

        

        // 在x方向上移动的距离

        CGFloat tx = [panRecongizer translationInView:self.view].x;

        if (tx < 0) return;

        

        if (panRecongizer.state == UIGestureRecognizerStateEnded || panRecongizer.state == UIGestureRecognizerStateCancelled) {

            // 决定pop还是还原

            CGFloat x = panRecongizer.view.frame.origin.x;

            if (x >= self.view.frame.size.width * 0.5) {

                [UIView animateWithDuration:0.25 animations:^{

                    panRecongizer.view.transform = CGAffineTransformMakeTranslation(self.view.frame.size.width, 0);

                } completion:^(BOOL finished) {

                    [self popViewControllerAnimated:NO];

                    [self.lastVcView removeFromSuperview];

                    [self.cover removeFromSuperview];

                    panRecongizer.view.transform = CGAffineTransformIdentity;

                    [self.images removeLastObject];

                }];

            } else {

                [UIView animateWithDuration:0.25 animations:^{

                    panRecongizer.view.transform = CGAffineTransformIdentity;

                }];

            }

        } else {

            // 移动view

            panRecongizer.view.transform = CGAffineTransformMakeTranslation(tx, 0);

            

            UIWindow *window = [UIApplication sharedApplication].keyWindow;

            // 添加截图到最后面

            self.lastVcView.image = self.images[self.images.count - 2];

            [window insertSubview:self.lastVcView atIndex:0];

            [window insertSubview:self.cover aboveSubview:self.lastVcView];

        }

        

    }

    -(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated

    {

        [super pushViewController:viewController animated:animated];

        

        UIPanGestureRecognizer *panRecongizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];

        

        [viewController.view addGestureRecognizer:panRecongizer];

        [self createScreenShot];

    }

    /**

     *  产生截图

     */

    - (void)createScreenShot

    {

        UIGraphicsBeginImageContextWithOptions(self.view.frame.size, YES, 0.0);

        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];

        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();

        [self.images addObject:image];

    }

    - (void)viewDidAppear:(BOOL)animated

    {

        [super viewDidAppear:animated];

        

        if (self.images.count > 0) return;

        

        [self createScreenShot];

    }

    @end

  • 相关阅读:
    数据库原理分析
    数据库常见索引解析(B树,B-树,B+树,B*树,位图索引,Hash索引)
    数据库索引、B树、B+树
    列存储索引
    比较全面的gdb调试命令
    SQLSERVER如何查看索引缺失
    VIM 实现tab标签页及分屏,切换命令
    查看指定spid的脚本当前运行情况和状态
    通过 sysprocesses 简单查询死锁及解决死锁办法
    ASP.NET Core开源地址
  • 原文地址:https://www.cnblogs.com/daaiwusehng/p/5060893.html
Copyright © 2011-2022 走看看