遮罩層設(shè)計(jì)
首先看兩個(gè)設(shè)計(jì)
類似這種彈出層,我相信App里面或多或少都會出現(xiàn)裳朋,可能是彈出提示內(nèi)容匪蝙,也有可能是彈出多個(gè)菜單選項(xiàng)。
其實(shí)實(shí)現(xiàn)方式都一樣门烂,在一個(gè)半透明的View上添加所需要展示的內(nèi)容乳愉。
其實(shí)沒什么要說的,直接上代碼吧屯远!
@interface PGPopupView : UIView
/*
創(chuàng)建popview,子視圖由block回調(diào)實(shí)現(xiàn)自定義樣式
*/
- (id)initWithContent:(UIView * (^)(id target, SEL closeSEL))contentBlock;
/*
添加到view上并顯示
*/
- (void)showInView:(UIView *)view;
/*
關(guān)閉
*/
- (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
調(diào)用示例:
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];
這篇沒有什么多說的蔓姚,就這樣吧!?ぁ坡脐!