• iOS弹出View同时使背影变暗


    开发时,常常会遇到这种问题,点击按钮A,弹出视图B,同时背影变暗,点击背影视图B消失;

    GitHub上有个很好的例子::下载地址

     本文内容也截取于其,解决了上述例子中多次快速点击程序崩溃的问题。

    附上效果图

    弹出视图

    代码:

    //  AddView.h
    
    #import <UIKit/UIKit.h>
    
    @interface AddSpaceView : UIView<UIGestureRecognizerDelegate>
    {
        UIView *parentView;
    }
    @property (nonatomic, strong) UIView *parentView;
    @property (nonatomic, assign) id delegate;
    
    - (id)initWithParentView:(UIView *)_parentView;
    - (void)show;
    - (void)close;
    
    @end
    

      

    //  AddView.m
    
    #import "AddView.h"
    
    @implementation AddSpaceView
    @synthesize parentView;
    @synthesize delegate;
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code
        }
        return self;
    }
    
    - (id)initWithParentView:(UIView *)_parentView
    {
        self = [super initWithFrame:_parentView.frame];
        if (self) {
            parentView = _parentView;
            UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(oneTap)];
            tap.delegate = self;
            [self addGestureRecognizer:tap];
        }
        return self;
    }
    
    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
        if ([touch.view isKindOfClass:[UIButton class]]){
            return NO;
        }
        return YES;
    }
    
    -(void)show
    {
        self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0];
        
        [parentView addSubview:self];
        
        [UIView animateWithDuration:0.2f delay:0.0 options:UIViewAnimationOptionCurveEaseInOut
    					 animations:^{
    						 self.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.4f];
    					 }
    					 completion:NULL
         ];
    }
    
    - (void)close
    {
        [UIView animateWithDuration:0.0f delay:0.0 options:UIViewAnimationOptionTransitionNone
    					 animations:^{
    						 self.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f];
    					 }
    					 completion:^(BOOL finished) {
    //                         for (UIView *v in [self subviews]) {
    //                             [v removeFromSuperview];
    //                         }
                             [self removeFromSuperview];
    					 }
    	 ];
    }
    
    - (void)oneTap
    {
        [delegate closeAddSpaceView:self];
    }
    
    - (void)closeAddSpaceView: (AddSpaceView *)addSpaceView
    {
        [self close];
    }
    
    /*
    // Only override drawRect: if you perform custom drawing.
    // An empty implementation adversely affects performance during animation.
    - (void)drawRect:(CGRect)rect
    {
        // Drawing code
    }
    */
    
    @end
    

      用法:

    点击按钮时:

    - (IBAction)showAddMenu:(id)sender
    {
        self.popupView.layer.cornerRadius = 12;
        self.popupView.layer.rasterizationScale = [[UIScreen mainScreen] scale];
        UIWindow *window = [UIApplication sharedApplication].keyWindow;
        addSpaceView = [[AddSpaceView alloc] initWithParentView:window.rootViewController.view];
        self.popupView.center = addSpaceView.center;
        [addSpaceView setDelegate:self];
        [addSpaceView addSubview:self.popupView];
        [addSpaceView show];
    }
    

      

  • 相关阅读:
    算法提高 11-2删除重复元素
    Codeforces 402 D Upgrading Array
    Codeforces 351B Jeff and Furik
    湖南多校对抗赛(2015.03.28) I Inversion Sequence
    湖南多校对抗赛(2015.03.28) H SG Value
    湖南多校对抗赛(2015.03.28) G Good subsequence
    湖南多校对抗赛(2015.03.28) E Longest Increasing Subsequence Again
    湖南多校对抗赛(2015.03.28) B Design road
    湖南多校对抗赛(2015.03.28) A Rectangle
    Codeforces 515D Drazil and Tiles
  • 原文地址:https://www.cnblogs.com/kw-ios/p/3552167.html
Copyright © 2020-2023  润新知