从零开始设计搭建ios App框架(九)
2016-09-25 本文已影响152人
潇水渔翁
遮罩层设计
首先看两个设计
E0C3E5AE-A5DC-482B-8F20-7F88011CA259.png F023E267-158F-41DA-B087-535A533877C5.png类似这种弹出层,我相信App里面或多或少都会出现,可能是弹出提示内容,也有可能是弹出多个菜单选项。
其实实现方式都一样,在一个半透明的View上添加所需要展示的内容。
其实没什么要说的,直接上代码吧!
@interface PGPopupView : UIView
/*
创建popview,子视图由block回调实现自定义样式
*/
- (id)initWithContent:(UIView * (^)(id target, SEL closeSEL))contentBlock;
/*
添加到view上并显示
*/
- (void)showInView:(UIView *)view;
/*
关闭
*/
- (void)closeView;
@end
PGPopupView.m
@interface PGPopupView ()<UIGestureRecognizerDelegate>
@property(nonatomic, strong)UIView *contentView;
@property(nonatomic, assign)CGFloat contentHeight;
@property(nonatomic, assign)CGFloat contentWidth;
@property(nonatomic, copy)UIView *(^mContentBlock)(id target, SEL closeSEL);
@end
@implementation PGPopupView
- (id)initWithContent:(UIView * (^ __nonnull)(id target, SEL closeSEL))contentBlock
{
if(self = [super init])
{
self.mContentBlock = contentBlock;
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREENH_HEIGHT);
self.backgroundColor = ColorFromRGBA(160, 160, 160, 0);
[self createSubViews];
[self animeData];
}
return self;
}
- (void)animeData
{
//self.userInteractionEnabled = YES;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tappedCancel)];
[self addGestureRecognizer:tapGesture];
tapGesture.delegate = self;
__weak PGPopupView *weakSelf = self;
[UIView animateWithDuration:.25 animations:^{
weakSelf.backgroundColor = UIColorFromRGBA(0x000000, 0.7);
[UIView animateWithDuration:.25 animations:^{
weakSelf.contentView.frame = CGRectMake((self.frame.size.width-self.contentWidth)/2, (self.frame.size.height-self.contentHeight)/2, self.contentWidth, self.contentHeight);
}];
} completion:^(BOOL finished) {
}];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if([touch.view isKindOfClass:[self class]])
{
return YES;
}
return NO;
}
- (void)tappedCancel
{
__weak PGPopupView *weakSelf = self;
[UIView animateWithDuration:.25 animations:^{
[weakSelf.contentView setFrame:CGRectMake(self.frame.size.width/2, self.frame.size.height/2, 0, 0)];
weakSelf.alpha = 0;
} completion:^(BOOL finished) {
if (finished)
{
[weakSelf removeFromSuperview];
}
}];
}
- (void)showInView:(UIView *)view
{
if(view==nil){
[[UIApplication sharedApplication].delegate.window.rootViewController.view addSubview:self];
}else{
[view addSubview:self];
}
}
- (void)closeView
{
[self tappedCancel];
}
/////////////////
#pragma mark -
- (void)createSubViews
{
if(!self.contentView) {
if(self.mContentBlock) {
self.contentView = self.mContentBlock(self, @selector(closeView));
self.contentHeight = self.contentView.frame.size.height;
self.contentWidth = self.contentView.frame.size.width;
self.contentView.frame = CGRectZero;
} else {
self.contentView = [[UIView alloc] initWithFrame:CGRectZero];
self.contentHeight = 0;
}
self.contentView.clipsToBounds = YES;
self.contentView.frame = CGRectMake(self.frame.size.width/2, self.frame.size.height/2, 0, 0);
[self addSubview:self.contentView];
}
}
@end
调用示例:
WEAKSELF
PGPopupView *view = [[PGPopupView alloc] initWithContent:^UIView * (id target, SEL closeSEL){
UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, weakSelf.view.frame.size.width-2*PGHeightWith1080(60), PGHeightWith1080(960))];
contentView.backgroundColor = UIColorFromRGBA(0xff00ff, 1.0);
UIButton *closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];
closeBtn.frame = CGRectMake(contentView.frame.size.width-PGHeightWith1080(120), PGHeightWith1080(60), PGHeightWith1080(90), PGHeightWith1080(90));
[closeBtn setBackgroundImage:[UIImage imageNamed:@"icon_close"] forState:UIControlStateNormal];
[closeBtn addTarget:target action:closeSEL forControlEvents:UIControlEventTouchUpInside];
[contentView addSubview:closeBtn];
//可以自定义界面
return contentView;
}];
[view showInView:nil];
这篇没有什么多说的,就这样吧!!!