iOS开发底部自定义分享弹框 您所在的位置:网站首页 ios底部弹窗 iOS开发底部自定义分享弹框

iOS开发底部自定义分享弹框

2023-02-22 21:44| 来源: 网络整理| 查看: 265

#import NS_ASSUME_NONNULL_BEGIN @interface SharePopView : UIView @property (nonatomic, strong) UIView *container; @property (nonatomic, strong) UIButton *cancel; - (void)show; - (void)dismiss; @end @interface ShareItem:UIView @property (nonatomic, strong) UIImageView *icon; @property (nonatomic, strong) UILabel *label; -(void)startAnimation:(NSTimeInterval)delayTime; @end NS_ASSUME_NONNULL_END 复制代码 #import "SharePopView.h" #import #define ScreenHeight [UIScreen mainScreen].bounds.size.height #define ScreenWidth [UIScreen mainScreen].bounds.size.width #define ScreenFrame [UIScreen mainScreen].bounds #define SafeAreaBottomHeight ((ScreenHeight >= 812.0) && [[UIDevice currentDevice].model isEqualToString:@"iPhone"] ? 30 : 0) #define RGBA(R, G, B, A) [UIColor colorWithRed:R/255.0 green:G/255.0 blue:B/255.0 alpha:A] #define ColorWhiteAlpha10 RGBA(255.0, 255.0, 255.0, 0.1) #define ColorWhiteAlpha60 RGBA(255.0, 255.0, 255.0, 0.6) #define ColorBlackAlpha60 RGBA(0.0, 0.0, 0.0, 0.6) #define ColorGray [UIColor grayColor] #define ColorWhite [UIColor whiteColor] #define ColorGrayLight RGBA(40.0, 40.0, 40.0, 1.0) #define MediumFont [UIFont systemFontOfSize:14.0] #define BigFont [UIFont systemFontOfSize:16.0] @implementation SharePopView - (instancetype)init { self = [super init]; if (self) { NSArray *topIconsName = @[ @"icon_profile_share_wxTimeline", @"icon_profile_share_wechat", @"icon_profile_share_qqZone", @"icon_profile_share_qq", @"icon_profile_share_weibo", @"iconHomeAllshareXitong" ]; NSArray *topTexts = @[ @"朋友圈", @"微信好友", @"QQ空间", @"QQ好友", @"微博", @"更多分享" ]; NSArray *bottomIconsName = @[ @"icon_home_allshare_report", @"icon_home_allshare_download", @"icon_home_allshare_copylink", @"icon_home_all_share_dislike" ]; NSArray *bottomTexts = @[ @"举报", @"保存至相册", @"复制链接", @"不感兴趣" ]; self.frame = ScreenFrame; [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGuesture:)]]; _container = [[UIView alloc] initWithFrame:CGRectMake(0, ScreenHeight, ScreenWidth, 280 + SafeAreaBottomHeight)]; _container.backgroundColor = ColorBlackAlpha60; [self addSubview:_container]; UIBezierPath *rounded = [UIBezierPath bezierPathWithRoundedRect:_container.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10.0f, 10.0f)]; CAShapeLayer *shape = [[CAShapeLayer alloc] init]; [shape setPath:rounded.CGPath]; _container.layer.mask = shape; UIBlurEffect *blurEffect =[UIBlurEffect effectWithStyle:UIBlurEffectStyleDark]; UIVisualEffectView *visualEffectView = [[UIVisualEffectView alloc]initWithEffect:blurEffect]; visualEffectView.frame = _container.bounds; visualEffectView.alpha = 1.0f; [_container addSubview:visualEffectView]; UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, ScreenWidth, 35)]; label.textAlignment = NSTextAlignmentCenter; label.numberOfLines = 0; label.text = @"分享到"; label.textColor = ColorGray; label.font = MediumFont; [_container addSubview:label]; CGFloat itemWidth = 68; UIScrollView *topScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 35, ScreenWidth, 90)]; topScrollView.contentSize = CGSizeMake(itemWidth * topIconsName.count, 80); topScrollView.showsHorizontalScrollIndicator = NO; topScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 30); [_container addSubview:topScrollView]; for (NSInteger i = 0; i < topIconsName.count; i++) { ShareItem *item = [[ShareItem alloc] initWithFrame:CGRectMake(20 + itemWidth*i, 0, 48, 90)]; item.icon.image = [UIImage imageNamed:topIconsName[i]]; item.label.text = topTexts[i]; item.tag = i; [item addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onShareItemTap:)]]; [item startAnimation:i*0.03f]; [topScrollView addSubview:item]; } UIView *splitLine = [[UIView alloc] initWithFrame:CGRectMake(0, 130, ScreenWidth, 0.5f)]; splitLine.backgroundColor = ColorWhiteAlpha10; [_container addSubview:splitLine]; UIScrollView *bottomScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 135, ScreenWidth, 90)]; bottomScrollView.contentSize = CGSizeMake(itemWidth * bottomIconsName.count, 80); bottomScrollView.showsHorizontalScrollIndicator = NO; bottomScrollView.contentInset = UIEdgeInsetsMake(0, 0, 0, 30); [_container addSubview:bottomScrollView]; for (NSInteger i = 0; i < bottomIconsName.count; i++) { ShareItem *item = [[ShareItem alloc] initWithFrame:CGRectMake(20 + itemWidth*i, 0, 48, 90)]; item.icon.image = [UIImage imageNamed:bottomIconsName[i]]; item.label.text = bottomTexts[i]; item.tag = i; [item addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onActionItemTap:)]]; [item startAnimation:i*0.03f]; [bottomScrollView addSubview:item]; } _cancel = [[UIButton alloc] initWithFrame:CGRectMake(0, 230, ScreenWidth, 50 + SafeAreaBottomHeight)]; [_cancel setTitleEdgeInsets:UIEdgeInsetsMake(-SafeAreaBottomHeight, 0, 0, 0)]; [_cancel setTitle:@"取消" forState:UIControlStateNormal]; [_cancel setTitleColor:ColorWhite forState:UIControlStateNormal]; _cancel.titleLabel.font = BigFont; _cancel.backgroundColor = ColorGrayLight; [_container addSubview:_cancel]; UIBezierPath *rounded2 = [UIBezierPath bezierPathWithRoundedRect:_cancel.bounds byRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight cornerRadii:CGSizeMake(10.0f, 10.0f)]; CAShapeLayer *shape2 = [[CAShapeLayer alloc] init]; [shape2 setPath:rounded2.CGPath]; _cancel.layer.mask = shape2; [_cancel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGuesture:)]]; } return self; } - (void)onShareItemTap:(UITapGestureRecognizer *)sender { switch (sender.view.tag) { case 0: break; default: break; } if(@available(iOS 10.0, *)) {//ios10及以后 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/sshiqiao/douyin-ios-objectc"] options:@{} completionHandler:nil]; }else{//ios10之前 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/sshiqiao/douyin-ios-objectc"]]; } [self dismiss]; } - (void)onActionItemTap:(UITapGestureRecognizer *)sender { switch (sender.view.tag) { case 0: break; default: break; } [self dismiss]; } - (void)handleGuesture:(UITapGestureRecognizer *)sender { CGPoint point = [sender locationInView:_container]; if(![_container.layer containsPoint:point]) { [self dismiss]; return; } point = [sender locationInView:_cancel]; if([_cancel.layer containsPoint:point]) { [self dismiss]; } } - (void)show { UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; [window addSubview:self]; [UIView animateWithDuration:0.15f delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^{ CGRect frame = self.container.frame; frame.origin.y = frame.origin.y - frame.size.height; self.container.frame = frame; }completion:^(BOOL finished) { }]; } - (void)dismiss { [UIView animateWithDuration:0.15f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ CGRect frame = self.container.frame; frame.origin.y = frame.origin.y + frame.size.height; self.container.frame = frame; }completion:^(BOOL finished) { [self removeFromSuperview]; }]; } @end @implementation ShareItem - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { _icon = [[UIImageView alloc] init]; _icon.image = [UIImage imageNamed:@"-"]; _icon.contentMode = UIViewContentModeScaleToFill; _icon.userInteractionEnabled = YES; [self addSubview:_icon]; _label = [[UILabel alloc] init]; _label.text = @"-"; _label.textColor = ColorWhiteAlpha60; _label.font = MediumFont; _label.textAlignment = NSTextAlignmentCenter; [self addSubview:_label]; } return self; } - (void)startAnimation:(NSTimeInterval)delayTime { CGRect originalFrame = self.frame; self.frame = CGRectMake(CGRectGetMinX(originalFrame), 35, originalFrame.size.width, originalFrame.size.height); [UIView animateWithDuration:0.9f delay:delayTime usingSpringWithDamping:0.5f initialSpringVelocity:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.frame = originalFrame; }completion:^(BOOL finished) { }]; } - (void)layoutSubviews { [super layoutSubviews]; [self.icon mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(48); make.centerX.equalTo(self); make.top.equalTo(self).offset(10); }]; [self.label mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self); make.top.equalTo(self.icon.mas_bottom).offset(10); }]; } @end 复制代码

MONO分享弹框

#import NS_ASSUME_NONNULL_BEGIN @interface SZShareMoreView : UIView @property (nonatomic, strong) UIView *container; - (void)show; - (void)dismiss; @end @interface SZShareItem:UIView @property (nonatomic, strong) UIImageView *icon; @property (nonatomic, strong) UILabel *label; - (void)startAnimation:(NSTimeInterval)delayTime; @end NS_ASSUME_NONNULL_END 复制代码 #import "SZShareMoreView.h" #import #define SCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define ScreenFrame [UIScreen mainScreen].bounds @implementation SZShareMoreView - (instancetype)init { self = [super init]; if (self) { self.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6f]; NSArray *topImages = @[@"btn-share-friends", @"btn-share-wechat", @"btn-share-qq"]; NSArray *topTitles = @[@"朋友圈", @"微信", @"QQ/空间"]; NSArray *bottomImages = @[@"btn-share-weibo", @"btn-share-link", @"icon-share-systerm"]; NSArray *bottomTitles = @[@"新浪微博", @"复制链接", @"更多"]; self.frame = ScreenFrame; [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleGuesture:)]]; _container = [[UIView alloc] initWithFrame:CGRectMake(0, SCREEN_HEIGHT/2, SCREEN_WIDTH, SCREEN_HEIGHT/2)]; _container.backgroundColor = [UIColor clearColor]; [self addSubview:_container]; CGFloat itemWidth = SCREEN_WIDTH/3; UIScrollView *topScrollView = [[UIScrollView alloc] init]; topScrollView.frame = CGRectMake(0, 35, SCREEN_WIDTH, itemWidth); topScrollView.contentSize = CGSizeMake(itemWidth * topImages.count, itemWidth); topScrollView.showsHorizontalScrollIndicator = NO; [_container addSubview:topScrollView]; for (NSInteger i = 0; i < topImages.count; i++) { SZShareItem *item = [[SZShareItem alloc] initWithFrame:CGRectMake(itemWidth*i, 0, itemWidth, itemWidth)]; item.icon.image = [UIImage imageNamed:topImages[i]]; item.label.text = topTitles[i]; item.tag = i; [item addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onShareItemTap:)]]; [item startAnimation:i*0.03f]; [topScrollView addSubview:item]; } UIScrollView *bottomScrollView = [[UIScrollView alloc] init]; bottomScrollView.frame = CGRectMake(0, itemWidth+35, SCREEN_WIDTH, itemWidth); bottomScrollView.contentSize = CGSizeMake(itemWidth * bottomImages.count, itemWidth); bottomScrollView.showsHorizontalScrollIndicator = NO; [_container addSubview:bottomScrollView]; for (NSInteger i = 0; i < bottomImages.count; i++) { SZShareItem *item = [[SZShareItem alloc] initWithFrame:CGRectMake(itemWidth*i, 0, itemWidth, itemWidth)]; item.icon.image = [UIImage imageNamed:bottomImages[i]]; item.label.text = bottomTitles[i]; item.tag = i; [item addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onActionItemTap:)]]; [item startAnimation:i*0.03f]; [bottomScrollView addSubview:item]; } } return self; } - (void)onShareItemTap:(UITapGestureRecognizer *)sender { [self openWebView]; NSLog(@"%@",((SZShareItem *)(sender.view)).label.text); } - (void)onActionItemTap:(UITapGestureRecognizer *)sender { [self openWebView]; } - (void)openWebView { if(@available(iOS 10.0, *)) {//ios10及以后 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/sshiqiao/douyin-ios-objectc"] options:@{} completionHandler:nil]; }else{//ios10之前 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://github.com/sshiqiao/douyin-ios-objectc"]]; } [self dismiss]; } - (void)handleGuesture:(UITapGestureRecognizer *)sender { CGPoint point = [sender locationInView:_container]; if(![_container.layer containsPoint:point]) { [self dismiss]; return; } } - (void)show { UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; [window addSubview:self]; [UIView animateWithDuration:0.15f delay:0.0f options:UIViewAnimationOptionCurveEaseOut animations:^{ CGRect frame = self.container.frame; frame.origin.y = SCREEN_HEIGHT/2; self.container.frame = frame; }completion:^(BOOL finished) { }]; } - (void)dismiss { [UIView animateWithDuration:0.15f delay:0.0f options:UIViewAnimationOptionCurveEaseIn animations:^{ CGRect frame = self.container.frame; frame.origin.y = frame.origin.y + frame.size.height; self.container.frame = frame; }completion:^(BOOL finished) { [self removeFromSuperview]; }]; } - (void)dealloc { NSLog(@"%@--dealloc",[self class]); } @end @implementation SZShareItem - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { _icon = [[UIImageView alloc] init]; _icon.image = [UIImage imageNamed:@"-"]; _icon.contentMode = UIViewContentModeScaleToFill; _icon.userInteractionEnabled = YES; [self addSubview:_icon]; _label = [[UILabel alloc] init]; _label.text = @"-"; _label.textColor = [[UIColor whiteColor] colorWithAlphaComponent:0.6f]; _label.font = [UIFont systemFontOfSize:14.0f]; _label.textAlignment = NSTextAlignmentCenter; [self addSubview:_label]; } return self; } - (void)startAnimation:(NSTimeInterval)delayTime { CGRect originalFrame = self.frame; self.frame = CGRectMake(CGRectGetMinX(originalFrame), 35, originalFrame.size.width, originalFrame.size.height); [UIView animateWithDuration:0.9f delay:delayTime usingSpringWithDamping:0.5f initialSpringVelocity:0.0f options:UIViewAnimationOptionCurveEaseInOut animations:^{ self.frame = originalFrame; }completion:^(BOOL finished) { }]; } - (void)layoutSubviews { [super layoutSubviews]; [self.icon mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(48); make.centerX.mas_equalTo(self); make.top.equalTo(self).mas_offset(10); }]; [self.label mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.mas_equalTo(self); make.top.mas_equalTo(self.icon.mas_bottom).mas_offset(10); }]; } @end 复制代码


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有