在状态栏上做渐变动画效果

简介:

在状态栏上做渐变动画效果

 

效果

 

说明

1. 在状态栏上显示信息并覆盖状态栏信息需要技巧

2. 本设计支持外部消息view的定制,只需要实现规定的协议方法即可

 

源码

https://github.com/YouXianMing/StatusBarMessage



//
//  StatusMessage.h
//  StatusBarView
//
//  Created by YouXianMing on 15/7/24.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "StatusMessageProtocol.h"

@interface StatusMessage : UIView

/**
 *  显示加载的view
 *
 *  @param view     实现了StatusMessageProtocol的view
 *  @param duration 动画显示时间
 */
+ (void)showWithView:(UIView <StatusMessageProtocol> *)view duration:(NSTimeInterval)duration;

/**
 *  隐藏加载的view
 *
 *  @param duration 隐藏动画显示时间
 */
+ (void)hideWithDuration:(NSTimeInterval)duration;


///////////////////////////////////////////////////////////////////////////////////////////////////

/**
 *  设置显示以及隐藏的动画时间(不设置,默认为1s)
 *
 *  @param duration 动画时间
 */
+ (void)showAndHideDuration:(NSTimeInterval)duration;

/**
 *  显示view,然后几秒后隐藏
 *
 *  @param view    实现了StatusMessageProtocol的view
 *  @param seconds 延时几秒后隐藏
 */
+ (void)showWithView:(UIView<StatusMessageProtocol> *)view hideAfterSeconds:(NSTimeInterval)seconds;

@end


//
//  StatusMessage.m
//  StatusBarView
//
//  Created by YouXianMing on 15/7/24.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "StatusMessage.h"

#define  Status_Message  @"StatusMessage"

static UIWindow        *_statusWindow      = nil;
static NSMapTable      *_weakDictionary    = nil;
static NSTimeInterval   _animationDuration = 1.f;

@implementation StatusMessage

+ (void)initialize {
    
    if (self == [StatusMessage class]) {

        _weakDictionary = [NSMapTable strongToWeakObjectsMapTable];
        
        _statusWindow                        = [[UIWindow alloc] initWithFrame:STATUS_BAR_FRAME];
        _statusWindow.windowLevel            = UIWindowLevelStatusBar + 1;
        _statusWindow.userInteractionEnabled = NO;
        [_statusWindow makeKeyAndVisible];
    }
}

+ (void)showWithView:(UIView <StatusMessageProtocol> *)view duration:(NSTimeInterval)duration {

    [_weakDictionary setObject:view forKey:Status_Message];
    [_statusWindow addSubview:view];
    [view showWithDuration:duration];
}

+ (void)hideWithDuration:(NSTimeInterval)duration {

    UIView <StatusMessageProtocol> *tmpView = [_weakDictionary objectForKey:Status_Message];
    [tmpView hideWithDuration:duration];
}

+ (void)showAndHideDuration:(NSTimeInterval)duration {

    _animationDuration = duration;
}

+ (void)showWithView:(UIView<StatusMessageProtocol> *)view hideAfterSeconds:(NSTimeInterval)seconds {

    [_weakDictionary setObject:view forKey:Status_Message];
    [_statusWindow addSubview:view];
    [view showWithDuration:_animationDuration];
    
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        
        UIView <StatusMessageProtocol> *tmpView = [_weakDictionary objectForKey:Status_Message];
        [tmpView hideWithDuration:_animationDuration];
    });
}

@end


//
//  StatusMessageProtocol.h
//  StatusBarView
//
//  Created by YouXianMing on 15/7/24.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

/**
 *  状态栏的frame值
 */
#define  STATUS_BAR_FRAME  [[UIApplication sharedApplication] statusBarFrame]

@protocol StatusMessageProtocol <NSObject>

@required
/**
 *  显示动画
 *
 *  @param seconds 显示持续时间
 */
- (void)showWithDuration:(NSTimeInterval)seconds;

/**
 *  隐藏动画(隐藏动画的时候请移除掉自己)
 *
 *  @param seconds 隐藏持续时间
 */
- (void)hideWithDuration:(NSTimeInterval)seconds;

@end


目录
相关文章
element-plus:el-table自定义展开图标处于列的位置
element-plus:el-table自定义展开图标处于列的位置
1110 0
|
8月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
205 13
|
缓存 调度
栈和队列的区别
栈和队列的区别
617 0
|
存储 JSON Kubernetes
基于 cri-dockerd 二进制部署 kubernetest-v1.26.3 2
基于 cri-dockerd 二进制部署 kubernetest-v1.26.3
191 0
|
敏捷开发 缓存 Java
阿里云云效产品使用合集之如何配置流水线里的npm构建
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Linux Shell Go
Linux中文件操作基本指令大全
Linux中文件操作基本指令大全
|
Ubuntu 物联网 Linux
AliOS Things、Ubuntu、Linux、MacOS、Window
AliOS Things、Ubuntu、Linux、MacOS 和 Windows 都是操作系统,用于控制计算机或其他设备的硬件和软件资源。它们有以下不同点和特点: -AliOS Thing
580 2
QListWidget中添加QListWidgetItem的几种形式
QListWidget中添加QListWidgetItem的几种形式
250 0
|
弹性计算 并行计算 Linux
【玩转AIGC系列】从0快速搭建个人版“对话大模型”
本教程介绍如何在阿里云GPU云服务器上基于Alpaca大模型快速搭建个人版“对话大模型”。
【玩转AIGC系列】从0快速搭建个人版“对话大模型”