• 侧滑手势移除控制器,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

  • 相关阅读:
    Linux常用命令
    ServerSocketChannel和SocketChannel
    Java扫描包
    [BZOJ3874/AHOI2014]宅男计划
    [BZOJ4029/HEOI2015]定价
    [考试]20151012贪心
    [BZOJ4027/HEOI2015]兔子与樱花
    [考试]20151010
    [考试]20151009
    Test of String
  • 原文地址:https://www.cnblogs.com/daaiwusehng/p/5060893.html
Copyright © 2020-2023  润新知