#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
复制代码
|