zoukankan      html  css  js  c++  java
  • 渐变显示渐变消失的BackgroundView

    渐变显示渐变消失的BackgroundView

    效果如下:

    源码:

    BackgroundView.h 与 BackgroundView.m

    //
    //  BackgroundView.h
    //  TestHUD
    //
    //  Created by YouXianMing on 14-9-30.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    
    @interface BackgroundView : UIView
    
    @property (nonatomic, assign) NSTimeInterval  startDuration; // 动画开始时持续时间
    @property (nonatomic, assign) NSTimeInterval  endDuration;   // 动画结束时持续时间
    
    - (instancetype)initInView:(UIView *)view;
    
    // 开始附加到view中
    - (void)addToView;
    
    // 将自己从view中移除掉
    - (void)removeSelf;
    
    @end
    //
    //  BackgroundView.m
    //  TestHUD
    //
    //  Created by YouXianMing on 14-9-30.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "BackgroundView.h"
    
    #ifdef DEBUG
    #define BackgroundView_DLog(fmt, ...) NSLog((@"BackgroundView.m:%s:%d" fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
    #else
    #define BackgroundView_DLog(...)
    #endif
    
    @interface BackgroundView ()
    
    @property (nonatomic, weak) UIView   *inView;
    
    @end
    
    @implementation BackgroundView
    
    - (instancetype)initInView:(UIView *)view
    {
        self = [super initWithFrame:view.bounds];
        if (self) {
            _inView              = view;
            self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.5f];
            self.alpha           = 0;
        }
        return self;
    }
    
    - (void)addToView
    {
        // 添加到view中
        [_inView addSubview:self];
        
        // 开始执行动画
        NSTimeInterval duration = 0.2;
        if (_startDuration > 0) {
            duration = _startDuration;
        }
        [UIView animateWithDuration:duration animations:^{
            self.alpha = 1.f;
        }];
    }
    
    - (void)removeSelf
    {
        // 开始执行动画
        NSTimeInterval duration = 0.2;
        if (_endDuration > 0) {
            duration = _endDuration;
        }
        [UIView animateWithDuration:duration animations:^{
            self.alpha = 0.f;
        } completion:^(BOOL finished) {
            [self removeFromSuperview];
        }];
    }
    
    - (void)dealloc
    {
        BackgroundView_DLog(@" 安全释放");
    }
    
    @end

    category文件:

    //
    //  UIView+BackgroundView.h
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import <UIKit/UIKit.h>
    #import "BackgroundView.h"
    
    typedef void (^ConfigBackgroundViewBlock)(BackgroundView *configView);
    
    @interface UIView (BackgroundView)
    
    - (void)showBackgroundViewAndConfig:(ConfigBackgroundViewBlock)block;
    - (void)removeBackgroundView;
    
    @end
    //
    //  UIView+BackgroundView.m
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "UIView+BackgroundView.h"
    
    #define TAG_DATA  0x3d2894
    
    @implementation UIView (BackgroundView)
    
    - (void)showBackgroundViewAndConfig:(ConfigBackgroundViewBlock)block
    {
        if (self == nil) {
            return;
        }
        
        BackgroundView *backView = [[BackgroundView alloc] initInView:self];
        backView.tag = TAG_DATA;
        block(backView);
        
        [backView addToView];
    }
    
    - (void)removeBackgroundView
    {
        BackgroundView *backView = (BackgroundView *)[self viewWithTag:TAG_DATA];
        if (backView) {
            [backView removeSelf];
        }
    }
    
    @end

    使用的源码:

    //
    //  ViewController.m
    //  BackgroundView
    //
    //  Created by YouXianMing on 14-10-3.
    //  Copyright (c) 2014年 YouXianMing. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "UIView+BackgroundView.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 添加手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self
                                                                              action:@selector(tapEvent:)];
        [self.view addGestureRecognizer:tap];
        
        UILabel *label      = [[UILabel alloc] initWithFrame:self.view.bounds];
        label.text          = @"YouXianMing";
        label.textAlignment = NSTextAlignmentCenter;
        label.font          = [UIFont fontWithName:@"HelveticaNeue-Thin" size:40.f];
        label.textColor     = [UIColor redColor];
        [self.view addSubview:label];
    }
    
    - (void)tapEvent:(UITapGestureRecognizer *)tap
    {
        // 显示
        [self.view showBackgroundViewAndConfig:^(BackgroundView *configView) {
            configView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
            configView.startDuration = 0.4f;
            configView.endDuration   = 0.4f;
        }];
     
        // 延迟3s执行
        [self performSelector:@selector(affterDelay)
                   withObject:nil
                   afterDelay:3.f];
    }
    
    - (void)affterDelay
    {
        // 隐藏
        [self.view removeBackgroundView];
    }
    
    @end

    以下是需要注意的地方:

  • 相关阅读:
    职工工资管理系统 c++课程设计
    我的Python自学之路四,字符串的学习
    我的Python自学之路三:元组及字典学习总结
    我的Python自学之路二:列表学习
    我的Python自学之路一:Python学习路线
    vue项目里在微信浏览器调用微信分享及支付一些页面数据的坑
    vue 三种传值方法
    vue里swiper的一些坑
    js 数据导出为txt文件
    js 小数计算为啥和想象中不一样!
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4004710.html
Copyright © 2011-2022 走看看