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

简介:

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

 

效果

 

说明

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


目录
相关文章
|
8月前
QT中 QPlainTextEdit自适应高度的问题(防止出现滚动条)
在QT开发过程中,经常使用到QPlainTextEdit来填入大量的文字,一般我们都会设置QPlainText的固定高度或者默认高度,但是随着文字的增多,就会自动出现滚动条,有时候我们可能需要QPlainText的高度随着自动适应文字的高度(即是说不需要出现滚动条)
553 0
|
4月前
|
前端开发 JavaScript
鼠标移动淡入淡出Canvas小球效果_特炫
本文通过HTML和JavaScript代码示例展示了如何实现鼠标移动时在Canvas上生成彩色小球并具有淡入淡出效果的动画,涉及Canvas的尺寸调整、小球对象的创建、颜色随机化、透明度变化和动画循环渲染等技术点。
50 1
鼠标移动淡入淡出Canvas小球效果_特炫
Qt之滑动条和进度条(QSlider、QProgressBar)
Qt之滑动条和进度条(QSlider、QProgressBar)
2050 1
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
解决Toolbar 和状态栏重叠,并且设置Toolbar 的颜色渐变效果
|
Android开发
圆角悬浮窗
牙叔教程 简单易懂
228 0
|
Android开发
Android 自定义控件之SlidingMenuVertical顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
顶部悬浮(垂直折叠抽屉,有滑动渐变回调,可自行添加渐变动画)
2087 0
|
图形学
控件渐变色的实现
控件渐变色的实现(一)—— CAGradientLayer实现控件渐变色的实现(二)—— Core Graphics实现
799 0