-
效果图
弹出框.png - .h中 给定背景视图的父类控制器
@property(nonatomic,weak)BaseVC *parentVC;
.m
1.宏
#define kSelfHeight (407*ADAPTER_WIDTH)
2.分类属性
@property(nonatomic,strong)UIControl *bgControl;
@property(nonatomic,strong)UIButton *closeBtton;
3.懒加载
#pragma mark - lazy懒加载
- (UIControl *)bgControl
{
if (!_bgControl)
{
UIControl *bgControl = [[UIControl alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
[sharedAppDelegate.window addSubview:bgControl];
bgControl.backgroundColor = RGB(0, 0, 0, 0.2);
[bgControl addTarget:self action:@selector(clickBgControl:) forControlEvents:UIControlEventTouchDown];
_bgControl = bgControl;
}
return _bgControl;
}
- (UIButton *)closeBtton
{
if (!_closeBtton) {
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
[self addSubview:button];
[button setImage:[UIImage getPNGimageInBundleWithName:@"close_gray"] forState:UIControlStateNormal];;
[button addTarget:self action:@selector(clickBgControl:) forControlEvents:UIControlEventTouchDown];
button.frame = CGRectMake(self.width - 45*ADAPTER_WIDTH, 0, 45*ADAPTER_WIDTH, 43*ADAPTER_WIDTH);//10+15+20 18+15+10
button.imageEdgeInsets = UIEdgeInsetsMake(18*ADAPTER_WIDTH, 10*ADAPTER_WIDTH, 10*ADAPTER_WIDTH, 20*ADAPTER_WIDTH);
_closeBtton = button;
}
return _closeBtton;
}
5.核心代码
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self createProperty];
[self createUI];
[self startAnimation];
}
return self;
}
#pragma mark - setter方法
- (void)setParentVC:(BaseVC *)parentVC
{
_parentVC = parentVC;
[self.parentVC.view addSubview:self.bgControl];
}
#pragma mark - UI
- (void)createProperty
{
}
- (void)createUI
{
[self.bgControl addSubview:self];
self.backgroundColor = [UIColor whiteColor];
self.frame = CGRectMake(0, HEIGHT, WIDTH, kSelfHeight);
[self closeBtton];
[self addBeziPath];
}
- (void)addBeziPath
{
UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10, 0)];
CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
maskLayer.frame = self.bounds;
maskLayer.path = maskPath.CGPath;
self.layer.mask = maskLayer;
}
#pragma mark - click点击事件
- (void)clickBgControl:sender
{
[self endAnimation];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.21 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self removeAllSubviews];
[self.bgControl removeAllSubviews];
[self.bgControl removeFromSuperview];
});
}
#pragma mark - 动画
- (void)startAnimation
{
[UIView animateWithDuration:0.2 animations:^{
self.frame = CGRectMake(0, HEIGHT-kSelfHeight, WIDTH, kSelfHeight);
}];
}
- (void)endAnimation
{
[UIView animateWithDuration:0.2 animations:^{
self.frame = CGRectMake(0, HEIGHT, WIDTH, kSelfHeight);
}];
}
网友评论