文档章节

iOS简易版的 仿popviewcontroller 功能

冰泪_
 冰泪_
发布于 2016/05/23 13:33
字数 442
阅读 409
收藏 0

//ZFYPopView.h

#import <UIKit/UIKit.h>

@interface ZFYPopView : UIView

 

typedef void(^dismissWithOperation)();

 

@property (nonatomic, strong) dismissWithOperation dismissOperation;
@property (nonatomic, strong) UIView *backView;
//初始化方法
//传入参数:模型数组,弹出原点,宽度,高度(每个cell的高度)
- (instancetype)initWithOrigin:(CGPoint)origin
                         width:(CGFloat)width
                        height:(CGFloat)height;

//弹出
- (void)pop;
//消失
- (void)dismiss;

 

@end

 

 

 

//ZFYPopView.m

#import "ZFYPopView.h"

#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
#define CellLineEdgeInsets UIEdgeInsetsMake(0, 10, 0, 10)
#define LeftToView 10.f
#define TopToView 10.f

@interface ZFYPopView ()

@property (nonatomic, assign) CGPoint origin;
@property (nonatomic, assign) CGFloat height;
@property (nonatomic, assign) CGFloat width;

 

@end

 

 

 

@implementation ZFYPopView

- (instancetype)initWithOrigin:(CGPoint)origin
                         width:(CGFloat)width
                        height:(CGFloat)height
{
    
    if (self = [super initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)]) {
        //背景色为clearColor
        
        self.backgroundColor = [UIColor clearColor];
        self.origin = origin;
        self.height = height;
        self.width  = width;
        
        self.backView = [[UIView alloc] initWithFrame:CGRectMake(origin.x, origin.y, width, height)];
        _backView.backgroundColor = [UIColor grayColor];
        _backView.layer.masksToBounds = YES;
        _backView.layer.cornerRadius = 10.0f;
        

        
        [self addSubview:self.backView];
        
        
    }
    return self;
}

 

//画出三角
- (void)drawRect:(CGRect)rect {
    //拿到当前视图准备好的画板
    CGContextRef context = UIGraphicsGetCurrentContext();
    //利用path进行绘制三角形
    CGContextBeginPath(context);//标记
    //这里设置箭头出现的位置
    
    //三角行三个点
    
    CGFloat startX = self.origin.x;
    CGFloat startY = self.origin.y+20;
    //第一个点
    CGContextMoveToPoint(context, startX, startY);//设置起点
    
    //下一个点
    CGContextAddLineToPoint(context, startX - 10, startY +10);
    
    //第三个点
    CGContextAddLineToPoint(context, startX, startY+20);
    
    
    CGContextClosePath(context);//路径结束标志,不写默认封闭
    
    [self.backView.backgroundColor setFill]; //设置填充色
    
    
    [self.backView.backgroundColor setStroke];
    
    CGContextDrawPath(context, kCGPathFillStroke);//绘制路径path
    
    
}

- (void)pop {
    UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
    [keyWindow addSubview:self];
    //动画效果弹出
    self.alpha = 0;
    CGRect frame = self.backView.frame;
    self.backView.frame = CGRectMake(self.origin.x, self.origin.y, 0, 0);
    [UIView animateWithDuration:0.2 animations:^{
        self.alpha = 1;
        self.backView.frame = frame;
 
        
    }];
}

- (void)dismiss {
    //动画效果淡出
    [UIView animateWithDuration:0.2 animations:^{
        self.alpha = 0;
        self.backView.frame = CGRectMake(self.origin.x, self.origin.y, 0, 0);
    } completion:^(BOOL finished) {
        if (finished) {
            [self removeFromSuperview];
            if (self.dismissOperation) {
                self.dismissOperation();
            }
        }
    }];
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    UITouch *touch = [touches anyObject];
    if (![touch.view isEqual:self.backView]) {
        [self dismiss];
    }
}


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end

 

//调用方式

- (void)click:(UIButton *)sender {
    CGFloat x = sender.frame.origin.x+sender.frame.size.width+15;
    CGFloat y = sender.frame.origin.y;
    
    _popView = [[ZBPopView alloc]initWithOrigin:CGPointMake(x, y) width:kScreenWidth/4 height:kScreenHeight/5];
    

    _popView.dismissOperation = ^() {
        _popView = nil;
    };
    
    [_popView pop];
}

 

© 著作权归作者所有

共有 人打赏支持
冰泪_
粉丝 15
博文 81
码字总数 52550
作品 0
青浦
程序员
iOS精美过度动画、视频会议、朋友圈、联系人检索、自定义聊天界面等源码

iOS精选源码 iOS 精美过度动画源码(http://www.code4app.com/thread-14827-1-1.html) iOS简易聊天页面以及容联云IM自定义聊天页面的实现思路(http://www.code4app.com/thread-30348-1-1.htm...

sunnyaigd
07/11
0
0
iOS股票K线图、校园助手、适配iPhone X、版本检测等源码

iOS精选源码 快速创建menuItem控件 YHPhotoBrowser 优化的网络图片浏览 cocoaAsynSocket demo (包含客户端和服务端) SwipeMenuViewController现在支持iPhoneX和Swift4。 仿微信的提醒对话框 ...

sunnyaigd
2017/10/31
0
0
iOS新特性框架、仿微信图片浏览、视频监控、爱心动画、文字适配等源码

iOS精选源码 iOS一个看电影、电视剧集合 HDCinema(http://www.code4app.com/thread-29425-1-1.html) 一个非常简易的新特性集成框架NewFeatures(http://www.code4app.com/thread-29433-1-1.ht......

sunnyaigd
05/02
0
0
iOS高仿QQ录音、智能语音诗歌、高仿微信图片浏览源码

iOS精选源码 好看实用的日期时间选择器--CCTimePicker 高仿QQ录音功能 QQ侧滑抽屉效果 MMActionSheet介绍(自定义的类似于微信的UIActionSheet弹出框组件) 智能语音查询诗歌 仿课程表表格效果...

sunnyaigd
2017/10/25
0
0
四款最佳的 RSS 阅读器推荐

前言 RSS 的全称是 Really Simple Syndication,“简易信息聚合”。它把新闻、博客等的标题、摘要和内容按一定要求整理推送,用户通过 RSS 阅读器订阅查看。 我们可以把 RSS 看作是一种信息订...

己立
09/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之声明合并(一)

转发 TypeScript基础入门之声明合并(一) 声明合并 介绍 TypeScript中的一些独特概念描述了类型级别的JavaScript对象的形状。 TypeScript特别独特的一个例子是"声明合并"的概念。 在使用现有J...

durban
28分钟前
1
0
Mysql-db

aptitude install default-libmysqlclient-dev pip install mysql-python

dragon_tech
32分钟前
1
0
函数装饰器

def debug(func): def wrapper(*args, **kwargs): # 多个参数# def wrapper(something): # 指定一样的参数 print("[DEBUG]: enter {}()".format(func.__name__)) ......

colin_86
34分钟前
1
0
Notification-状态栏上的通知

当程序并不是出在运行状态的时候,可以调用Notification来显示通知。 1、创建 Notification的创建主要涉及到三个类:NotificationManager,Notification和PendingIntent NotificationManager主...

西米小娅
37分钟前
1
0
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c

spring boot启动报错: Description: Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured. Reason: Failed to determin......

wenzhizhon
39分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部