iOS自定义一些提示控件

代码如下:

.h中的代码:

//
//  HKUIToolsView.h
//  HKUIToolsDemo
//
//  Created by isHakan on 2017/7/28.
//  Copyright ? 2017年 liuhuakun. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface HKUIToolsView : UIView

/*移除加载类型的view
 */
- (void)removeLoadViewFromSuperView;

/*
 *@msg 输入的需要提示文字
 *@typeNum 选择控件类型 /// 0代表中间方形文字提示框 1等待加载view 2底部条形文字提示框
 **/
- (instancetype)initWithFrame:(CGRect)frame withMsg:(NSString *)msg andType:(NSInteger)typeNum;

@end

.m中的代码:

//
//  HKUIToolsView.m
//  HKUIToolsDemo
//
//  Created by isHakan on 2017/7/28.
//  Copyright ? 2017年 liuhuakun. All rights reserved.
//

#import "HKUIToolsView.h"

@interface HKUIToolsView ()
{
    NSTimer *_loadViewTimeoutTimer;
}
@end
@implementation HKUIToolsView

- (instancetype)initWithFrame:(CGRect)frame withMsg:(NSString *)msg andType:(NSInteger)typeNum
{
    self = [super initWithFrame:frame];
    if (self)
    {
        UIView *mainScreenBgView = [[UIView alloc] initWithFrame:frame];
        mainScreenBgView.alpha = 0.3;
        mainScreenBgView.backgroundColor = [UIColor blackColor];
        [self addSubview:mainScreenBgView];

        [self createView:frame andMsg:msg andType:typeNum];
    }
    return self;
}
//加载中和中间提示msg
- (void)createView:(CGRect)frame andMsg:(NSString *)msg andType:(NSInteger)typeNum
{
    CGFloat w,h,x,y;

    if (typeNum==0 || typeNum==1)
    {
         w = frame.size.width/3.0;
         h = w;
         x = (frame.size.width-w)/2.0;
         y = (frame.size.height-h)/2.0;
    }
    else
    {
        w = frame.size.width*0.6;
        h = 60.0;
        x = (frame.size.width-w)/2.0;
        y = frame.size.height-h-32.0;
    }

    UIView *centerMsgView = [[UIView alloc] initWithFrame:CGRectMake(x, y, w, h)];
    centerMsgView.backgroundColor = [UIColor blackColor];
    centerMsgView.layer.masksToBounds = YES;
    centerMsgView.layer.cornerRadius = 8.0;
    [self addSubview:centerMsgView];

    if (typeNum==0 || typeNum==2)
    {
        CGFloat label_x,label_y,label_w,label_h;
        label_x = label_y = 8;
        label_w = w-16;
        label_h = h-16;

        UILabel *msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(label_x, label_y, label_w, label_h)];
        msgLabel.backgroundColor = centerMsgView.backgroundColor;
        msgLabel.textColor = [UIColor whiteColor];
        msgLabel.font = [UIFont systemFontOfSize:14];
        msgLabel.text = msg;
        msgLabel.numberOfLines = 0;
        msgLabel.textAlignment = NSTextAlignmentCenter;
        [centerMsgView addSubview:msgLabel];

        [UIView animateWithDuration:2.5 animations:^{
            self.alpha = 0;
            [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(removeSlef:) userInfo:nil repeats:NO];
        }];

    }
    else//加载view
    {
        CGFloat actIndView_w = w-32;
        CGFloat actIndView_h = h-32;
        CGFloat actIndView_x = 16;
        CGFloat actIndView_y = 0;
        UIActivityIndicatorView *activityIndicatorView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
        activityIndicatorView.frame = CGRectMake(actIndView_x, actIndView_y, actIndView_w, actIndView_h);
        activityIndicatorView.backgroundColor = [UIColor blackColor];
        activityIndicatorView.tag = 111;
        [activityIndicatorView startAnimating];
        [centerMsgView addSubview:activityIndicatorView];

        CGFloat acIndLabel_w,acIndLabel_h,acIndLabel_x,acIndLabel_y;

        acIndLabel_x = actIndView_x;
        acIndLabel_y = actIndView_h*2/3.0;
        acIndLabel_w = actIndView_w;
        acIndLabel_h = actIndView_h/3.0;
        UILabel *msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(acIndLabel_x, acIndLabel_y, acIndLabel_w, acIndLabel_h)];
        msgLabel.backgroundColor = [UIColor blackColor];
        msgLabel.textColor = [UIColor whiteColor];
        msgLabel.textAlignment = NSTextAlignmentCenter;
        msgLabel.text = msg;
        msgLabel.font = [UIFont systemFontOfSize:14.0];
        [centerMsgView addSubview:msgLabel];

        _loadViewTimeoutTimer = [NSTimer scheduledTimerWithTimeInterval:8
                                                                 target:self
                                                               selector:@selector(removeLoadViewFromSuperView) userInfo:nil
                                                                repeats:NO];
    }

}
- (void)removeSlef:(NSTimer *)timer
{
    [timer invalidate];
    [self removeFromSuperview];
}

//加载超时隐藏
- (void)removeLoadViewFromSuperView
{
    if ([_loadViewTimeoutTimer isValid])
    {
        [_loadViewTimeoutTimer invalidate];
    }

    [UIView animateWithDuration:1.5 animations:^{
        self.alpha = 0;
        [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(removeLoadView:) userInfo:nil repeats:NO];
    }];
}

- (void)removeLoadView:(NSTimer *)timer
{
    [timer invalidate];
    UIActivityIndicatorView *indicatorView = [self viewWithTag:111];
    [indicatorView stopAnimating];
    [self removeFromSuperview];
}

@end

在需要调用对应控件的界面处,

//
//  ViewController.m
//  HKUIToolsDemo
//
//  Created by isHakan on 2017/7/28.
//  Copyright ? 2017年 liuhuakun. All rights reserved.
//

#import "ViewController.h"

#import "HKUIToolsView.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

}

- (IBAction)centerPointViewShowBtnClick:(UIButton *)sender
{
    [self showToolMsg:@"中心提示信息显示!" viewTag:sender.tag];
}

- (IBAction)loadViewShow:(UIButton *)sender
{
    [self showToolMsg:@"加载中..." viewTag:sender.tag];
}

- (IBAction)bottomPointViewShow:(UIButton *)sender
{
    [self showToolMsg:@"底部提示信息提示!" viewTag:sender.tag];
}

- (void)showToolMsg:(NSString *)msg viewTag:(NSInteger)viewTag
{
    HKUIToolsView *toolsView = [[HKUIToolsView alloc] initWithFrame:[UIScreen mainScreen].bounds withMsg:msg andType:viewTag];
    toolsView.tag = 222;
    [[UIApplication sharedApplication].keyWindow addSubview:toolsView];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
时间: 2024-11-13 08:50:48

iOS自定义一些提示控件的相关文章

iOS—自定义瀑布流控件

一.简单说明 使用数据刷新框架: 该框架提供了两种刷新的方法,一个是使用block回调(存在循环引用问题,_ _weak),一个是使用调用. 问题:在进行下拉刷新之前,应该要清空之前的所有数据(在刷新数据这个方法中). 移除正在显示的cell: (1)把字典中的所有的值,都从屏幕上移除 (2)清除字典中的所有元素 (3)清除cell的frame,每个位置的cell的frame都要重新计算 (4)清除可复用的缓存池. 该部分的代码如下: 1 // 2 // YYWaterflowView.m 3

IOS 自定义UITableViewCell 子控件无法接受到事件

该问题浪费了3个小时的时间 一 问题描述 自定义UITableViewCell,Cell 中有两个UIImageView 子控件,自控都需要实现双击,让图片全局展示. 二 错误代码 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    BZEffectImgViewCell *cell = [BZEffectImgViewCell ce

iOS项目开发实战——自定义圆形进度提示控件

iOS中默认的进度条是水平方向的进度条,这往往不能满足我们的需求.但是我们可以自定义类似的圆形的进度提示控件,主要使用iOS中的绘图机制来实现.这里我们要实现一个通过按钮点击然后圆形进度提示不断增加的效果. (1)新建一个Cocoa Touch Class,注意要继承自UIView.这个是绘制图形的类,绘制一个圆形的背景和扇形的进度.具体实现如下: import UIKit class ProgressControl: UIView { override init(frame: CGRect)

iOS开发UI篇—自定义瀑布流控件(基本实现)

iOS开发UI篇—自定义瀑布流控件(基本实现) 一.基本实现 说明:在View加载的时候,刷新数据. 1.实现代码 YYViewController.m文件 1 // 2 // YYViewController.m 3 // 06-瀑布流 4 // 5 // Created by apple on 14-7-28. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import "YYViewControll

iOS开发UI篇—自定义瀑布流控件(蘑菇街实现)

iOS开发UI篇—自定义瀑布流控件(蘑菇街瀑布流) 一.简单说明 关于瀑布流 1.是使用UIScrollView实现的 2.刷新数据(reloadData)方法里面做哪些事情 3.layoutSubviews方法里面做哪些事情 4.模仿UItableView进行设计 完善: 瀑布流控件第一次显示到屏幕上的时候自动的向数据源索要数据,而不需要手动调用.这需要监听View的显示,View的显示有一个方法,叫做willMoveToSuperview:在该方法中直接刷新一次数据即可. 二.把自定义的瀑布

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作)

iOS开发UI篇—自定义瀑布流控件(蘑菇街数据刷新操作) 一.简单说明 使用数据刷新框架: 该框架提供了两种刷新的方法,一个是使用block回调(存在循环引用问题,_ _weak),一个是使用调用. 问题:在进行下拉刷新之前,应该要清空之前的所有数据(在刷新数据这个方法中). 移除正在显示的cell: (1)把字典中的所有的值,都从屏幕上移除 (2)清除字典中的所有元素 (3)清除cell的frame,每个位置的cell的frame都要重新计算 (4)清除可复用的缓存池. 该部分的代码如下: 1

iOS开发UI篇—自定义瀑布流控件(接口设计)

iOS开发UI篇—自定义瀑布流控件(接口设计) 一.简单说明 1.关于瀑布流 电商应用要展示商品信息通常是通过瀑布流的方式,因为每个商品的展示图片,长度和商都都不太一样. 如果不用瀑布流的话,展示这样的格子数据,还有一种办法是使用九宫格. 但利用九宫格有一个缺点,那就是每个格子的宽高是一样的,如果一定要使用九宫格来展示,那么展示的商品图片可能会变形. 为了保证商品图片能够按照原来的宽高比进行展示,一般采用的是瀑布流的方式. 2.瀑布流的特点: 由很多的格子组成,但是每个格子的宽度和高速都是不确定

iOS开发UI篇—自定义瀑布流控件(cell的循环利用)

iOS开发UI篇—自定义瀑布流控件(cell的循环利用) 一.简单说明 当滚动的时候,向数据源要cell. 当UIScrollView滚动的时候会调用layoutSubviews在tableView中也是一样的,因此,可以用这个方法来监听scrollView的滚动,可以在在这个地方向数据源索要对应位置的cell(frame在屏幕上的cell). 示例: 当scrollView在屏幕上滚动的时候,离开屏幕的cell应该放到缓存池中去,询问即将(已经)进入到屏幕的cell,对于还没有进入到屏幕的ce

iOS8统一的系统提示控件——UIAlertController

iOS8统一的系统提示控件——UIAlertController 一.引言 相信在iOS开发中,大家对UIAlertView和UIActionSheet一定不陌生,这两个控件在UI设计中发挥了很大的作用.然而如果你用过,你会发现这两个控件的设计思路有些繁琐,通过创建设置代理来进行界面的交互,将代码逻辑分割了,并且很容易形成冗余代码.在iOS8之后,系统吸引了UIAlertController这个类,整理了UIAlertView和UIActionSheet这两个控件,在iOS中,如果你扔使用UIA