iOS开发系列之常用自定义控件开发集—Android的Toast控件开发

这篇文章演示编写android系统toast控件,toast控件实用于项目中用来提示简单文字信息,实现代码如下:

头文件内容:

//
//  UIView+WHC_Toast.h
//  UIView+WHC_Toast
//
//  Created by 吴海超 on 15/3/24.
//  Copyright (c) 2015年 吴海超. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef enum{
    TOP,                 //上部
    MIDDLE,              //中间
    BOTTOM               //下部
}WHC_TOAST_POSTION;      //toast  显示的位子

typedef enum {
    WHITE_FONT,         //黑背景白字
    BLACK_FONT,         //白背景黑字
}WHC_TOAST_TYPE;        //toast 类型

@interface UIView (WHC_Toast)

- (void)toast:(NSString *)msg;

- (void)toast:(NSString *)msg postion:(WHC_TOAST_POSTION)postion;

- (void)toast:(NSString *)msg type:(WHC_TOAST_TYPE)type;

- (void)toast:(NSString *)msg postion:(WHC_TOAST_POSTION)postion type:(WHC_TOAST_TYPE)type;

- (void)toast:(NSString *)msg during:(NSTimeInterval)during;

- (void)toast:(NSString *)msg during:(NSTimeInterval)during postion:(WHC_TOAST_POSTION)postion;

- (void)toast:(NSString *)msg during:(NSTimeInterval)during postion:(WHC_TOAST_POSTION)postion type:(WHC_TOAST_TYPE)type;
@end


源文件实现:
//
//  UIView+WHC_Toast.m
//  UIView+WHC_Toast
//
//  Created by 吴海超 on 15/3/24.
//  Copyright (c) 2015年 吴海超. All rights reserved.
//

#import "UIView+WHC_Toast.h"
#define  KWHC_FONT_SIZE (14.0)     //默认字体大小
#define  KWHC_ANIMATION_TIME (0.5) //显示时动画时间
#define  KWHC_DURING (2.0)         //显示周期
@implementation UIView (WHC_Toast)

//视差效果,toast远近效果
- (CATransform3D)loadTransform3D:(CGFloat)z{

    CATransform3D scale = CATransform3DIdentity;
    scale.m34 = -1.0 / 1000.0;
    CATransform3D transform = CATransform3DMakeTranslation(0.0,0.0, z);
    return CATransform3DConcat(transform,scale);
}

/*
 显示位子默认下部,
 显示时间默认2s
 显示类型默认白色黑字
 */
- (void)toast:(NSString *)msg{
    [self toast:msg during:KWHC_DURING];
}

/*
 显示位子自定义
 显示时间默认2s
 显示类型默认白色黑字
 */
- (void)toast:(NSString *)msg postion:(WHC_TOAST_POSTION)postion{
    [self toast:msg during:KWHC_DURING postion:postion];
}

/*
 显示位子自定义
 显示时间默认2s
 显示类型默认白色黑字
 */

- (void)toast:(NSString *)msg type:(WHC_TOAST_TYPE)type{
    [self toast:msg during:KWHC_DURING postion:BOTTOM type:type];
}

/*
 显示位子自定义
 显示时间自定义
 显示类型自定义
 */

- (void)toast:(NSString *)msg postion:(WHC_TOAST_POSTION)postion type:(WHC_TOAST_TYPE)type{
    [self toast:msg during:KWHC_DURING postion:postion type:type];
}

/*
 显示位子自定义
 显示时间自定义
 显示类型自定义
 */

- (void)toast:(NSString *)msg during:(NSTimeInterval)during{
    [self toast:msg during:KWHC_DURING postion:BOTTOM];
}

- (void)toast:(NSString *)msg during:(NSTimeInterval)during postion:(WHC_TOAST_POSTION)postion{
    [selftoast:msg during:KWHC_DURINGpostion:postion type:WHITE_FONT];
}

- (void)toast:(NSString *)msg during:(NSTimeInterval)during postion:(WHC_TOAST_POSTION)postion type:(WHC_TOAST_TYPE)type{
    [selfcreateContentLabWithMessage:msg during:duringpostion:postion type:type];
}


/*
 创建主控件
 */
- (UILabel*)createContentLabWithMessage:(NSString*)msg during:(NSTimeInterval)during postion:(WHC_TOAST_POSTION)postion type:(WHC_TOAST_TYPE)type{
    self.userInteractionEnabled =NO;    //禁用主view的触摸交互
    CGSize      screenSize = [UIScreenmainScreen].bounds.size;
    CGFloat     contentLabY = 0.0;
    UIColor   * fontColor = nil;
    UIColor   * backColor = nil;

    switch (postion) {
        case TOP:
            contentLabY = 100.0;   //默认顶部位子100个像素
            break;
        case MIDDLE:
            contentLabY = screenSize.height /2.0;
            break;
        case BOTTOM:
            contentLabY = screenSize.height -100.0;    //默认离底部100个像素
        break;
        default:
            break;
    }

    switch (type) {
        case WHITE_FONT:
            fontColor = [UIColor whiteColor];
            backColor = [UIColor blackColor];
            break;
        case BLACK_FONT:
            fontColor = [UIColor blackColor];
            backColor = [UIColor colorWithRed:240 /255.0 green:240 / 255.0 blue:240 / 255.0 alpha:1.0];
        default:
            break;
    }

    CGFloat     pading = 10.0;
    // 兼容低版本
#pragma clang diagnostic push
#pragma clang diagnostic ignored"-Wdeprecated-declarations"
    CGSize      msgSize = [msg sizeWithFont:[UIFont systemFontOfSize:KWHC_FONT_SIZE]
                          constrainedToSize:CGSizeMake(MAXFLOAT, 0)];
#pragma clang diagnostic pop
    CGFloat     contentLabWidth = msgSize.width + pading * 2.0;
    NSInteger   multiple = (NSInteger)(msgSize.width / (screenSize.width - pading *2.0)) + 1;
    if(multiple > 1){
        contentLabWidth = screenSize.width - pading * 2.0;
    }
    UILabel * contentLab = [[UILabel alloc]initWithFrame:CGRectMake((screenSize.width - contentLabWidth) /2.0,contentLabY,contentLabWidth,multiple * msgSize.height + pading)];
    contentLab.numberOfLines = 0;
    contentLab.backgroundColor = backColor;
    contentLab.textColor = fontColor;
    contentLab.font = [UIFont systemFontOfSize:KWHC_FONT_SIZE];
    contentLab.textAlignment = NSTextAlignmentCenter;
    contentLab.center = CGPointMake(screenSize.width / 2.0, contentLabY);
    contentLab.text = msg;
    contentLab.layer.cornerRadius = 8.0;
    contentLab.layer.masksToBounds = YES;
    contentLab.layer.transform = [self loadTransform3D:-10000.0];
    [self addSubview:contentLab];
    [UIView animateWithDuration:KWHC_ANIMATION_TIME animations:^{
        self.layer.opacity = 0.5;
        contentLab.layer.transform = [self loadTransform3D:0.0];
    }completion:^(BOOL finished) {
        [self performSelector:@selector(clearContentLab:) withObject:contentLab afterDelay:during];
    }];
    return contentLab;
}

- (void)clearContentLab:(UILabel *)contentLab{

    [UIView animateWithDuration:KWHC_ANIMATION_TIME animations:^{
        contentLab.layer.transform = [self loadTransform3D:-10000.0];
        self.layer.opacity = 1.0;
    } completion:^(BOOL finished) {
        [contentLab removeFromSuperview];
        self.userInteractionEnabled = YES;    //恢复主view的用户交互控制
    }];
}
@end

这里写图片描述
WHC_ToastDemo下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值