You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

269 lines
9.7 KiB

//
// TFShareView.m
// TFReader
//
// Created by 谢腾飞 on 2020/12/5.
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
//
#import "TFShareView.h"
#import "TFShareViewCell.h"
#import "UIView+BorderLine.h"
#import "UIView+LayoutCallback.h"
#define ZY_ItemCellHeight 100.f // 每个item的高度
@interface TFShareView () <UIGestureRecognizerDelegate, UICollectionViewDataSource, UICollectionViewDelegate>
{
UITapGestureRecognizer *tap;
}
@property (nonatomic ,strong) UIView *backView;
@property (nonatomic ,strong) UILabel *titleLabel;
@property (nonatomic ,strong) UICollectionView *mainCollectionView;
@property (nonatomic ,strong) UICollectionViewFlowLayout *mainCollectionViewFlowLayout;
@property (nonatomic ,strong) UIButton *cancelButton;
@property (nonatomic ,strong) NSMutableArray *dataSources;
@end
@implementation TFShareView
- (instancetype)init
{
if (self = [super init]) {
[self initialize];
[self createSubviews];
}
return self;
}
- (void)initialize
{
self.dataSources = [NSMutableArray array];
if (TF_WeChat_Share_Mode) {
[self.dataSources addObject:@[@"微信好友", @"login_wechat", [NSNumber numberWithInteger:TFSharingPlatformWeChat]]];
[self.dataSources addObject:@[@"朋友圈", @"share_wechat_timeline", [NSNumber numberWithInteger:TFSharingPlatformFriendCircle]]];
}
if (TF_QQ_Share_Mode) {
[self.dataSources addObject:@[@"QQ好友", @"login_qq", [NSNumber numberWithInteger:TFSharingPlatformQQ]]];
[self.dataSources addObject:@[@"QQ空间", @"share_qzone", [NSNumber numberWithInteger:TFSharingPlatformQQSpace]]];
}
self.userInteractionEnabled = YES;
self.frame = CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
self.backgroundColor = kBlackTransparentAlphaColor(0);
[kMainWindow addSubview:self];
tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hidden)];
tap.numberOfTapsRequired = 1;
tap.delegate = self;
[self addGestureRecognizer:tap];
self.mainCollectionView.scrollEnabled = YES;
if (self.dataSources.count <= 4) {
self.mainCollectionView.scrollEnabled = NO;
}
}
- (void)createSubviews
{
[self addSubview:self.backView];
WS(weakSelf)
self.titleLabel.frameBlock = ^(UIView * _Nonnull view) {
// 设置文字分割线
CALayer *splitLine = [CALayer layer];
splitLine.backgroundColor = kGrayLineColor.CGColor;
splitLine.anchorPoint = CGPointMake(0, 0);
splitLine.bounds = CGRectMake(0, 0, 160, 1);
splitLine.center = CGPointMake(weakSelf.titleLabel.centerX, weakSelf.titleLabel.centerY);
[weakSelf.backView.layer addSublayer:splitLine];
[weakSelf.backView bringSubviewToFront:view];
};
[self.backView addSubview:self.titleLabel];
[self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kHalfMargin);
make.centerX.mas_equalTo(self.backView.mas_centerX);
make.width.mas_equalTo(80);
make.height.mas_equalTo(40);
}];
[self.backView addSubview:self.mainCollectionView];
[self.mainCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(0);
make.top.mas_equalTo(self.titleLabel.mas_bottom).with.offset(kHalfMargin);
make.width.mas_equalTo(self.backView.mas_width);
make.height.mas_equalTo(ZY_ItemCellHeight);
}];
[self.backView addSubview:self.cancelButton];
[self.backView bringSubviewToFront:self.cancelButton];
[self.cancelButton mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(0);
make.top.mas_equalTo(self.mainCollectionView.mas_bottom);
make.width.mas_equalTo(self.backView.mas_width);
make.height.mas_equalTo(PUB_TABBAR_HEIGHT - kHalfMargin);
}];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self.cancelButton addBorderLineWithBorderWidth:kCellLineHeight borderColor:kGrayLineColor cornerRadius:0 borderType:UIBorderSideTypeTop];
});
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
return self.dataSources.count;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
TFShareViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"TFShareViewCell" forIndexPath:indexPath];
cell.sourceArray = [self.dataSources objectOrNilAtIndex:indexPath.row];
return cell;
}
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
NSArray *t_arr = [self.dataSources objectOrNilAtIndex:indexPath.row];
TFSharingPlatform platform = (TFSharingPlatform)[[t_arr objectOrNilAtIndex:2] integerValue];
!self.clickHandler ?: self.clickHandler(platform);
[self hidden];
}
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
if (self.dataSources.count <= 4) {
return CGSizeMake((SCREEN_WIDTH - 2 * kHalfMargin) / self.dataSources.count, ZY_ItemCellHeight);
}
return CGSizeMake(SCREEN_WIDTH / 4.7, ZY_ItemCellHeight);
}
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
if (self.dataSources.count <= 4) {
return UIEdgeInsetsMake(0, kHalfMargin, 0, kHalfMargin);
}
return UIEdgeInsetsMake(0, 0, 0, 0);
}
- (void)show
{
if (self.dataSources.count == 0) {
return;
}
WS(weakSelf)
[UIView animateWithDuration:kAnimatedDurationFast animations:^{
weakSelf.backgroundColor = kBlackTransparentAlphaColor(0.5);
weakSelf.backView.frame = CGRectMake(0, SCREEN_HEIGHT - (kHalfMargin + 40 + kHalfMargin + ZY_ItemCellHeight + PUB_TABBAR_HEIGHT - kHalfMargin), SCREEN_WIDTH, kHalfMargin + 40 + kHalfMargin + ZY_ItemCellHeight + PUB_TABBAR_HEIGHT - kHalfMargin);
}];
}
- (void)hidden
{
WS(weakSelf)
[UIView animateWithDuration:kAnimatedDurationFast animations:^{
weakSelf.backgroundColor = kBlackTransparentAlphaColor(0);
weakSelf.backView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, 40 + ZY_ItemCellHeight + PUB_TABBAR_HEIGHT);
} completion:^(BOOL finished) {
[weakSelf removeFromKeyWindow];
}];
}
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
if ([touch.view isEqual:self]) {
return YES;
} else {
return NO;
}
}
- (void)removeFromKeyWindow
{
if (self.superview) {
[self removeFromSuperview];
}
}
- (UIView *)backView
{
if (!_backView) {
_backView = [[UIView alloc] init];
_backView.userInteractionEnabled = YES;
_backView.frame = CGRectMake(0, SCREEN_HEIGHT, SCREEN_WIDTH, kHalfMargin + 40 + kHalfMargin + ZY_ItemCellHeight + PUB_TABBAR_HEIGHT - kHalfMargin);
_backView.backgroundColor = [UIColor whiteColor];
[_backView addRoundingCornersWithRoundingCorners:UIRectCornerTopLeft | UIRectCornerTopRight];
_backView.clipsToBounds = YES;
}
return _backView;
}
- (UILabel *)titleLabel
{
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.backgroundColor = [UIColor whiteColor];
_titleLabel.textColor = kGrayTextColor;
_titleLabel.text = TFLocalizedString(@"分享至");
_titleLabel.textAlignment = NSTextAlignmentCenter;
_titleLabel.font = kMainFont;
}
return _titleLabel;
}
- (UIButton *)cancelButton
{
if (!_cancelButton) {
_cancelButton = [[UIButton alloc] init];
_cancelButton.backgroundColor = [UIColor whiteColor];
[_cancelButton setTitleEdgeInsets:UIEdgeInsetsMake(0, 0, PUB_TABBAR_OFFSET / 2, 0)];
[_cancelButton setTitle:TFLocalizedString(@"取消") forState:UIControlStateNormal];
[_cancelButton setTitleColor:kGrayTextColor forState:UIControlStateNormal];
[_cancelButton.titleLabel setFont:kMainFont];
[_cancelButton addTarget:self action:@selector(hidden) forControlEvents:UIControlEventTouchUpInside];
}
return _cancelButton;
}
- (UICollectionView *)mainCollectionView
{
if (!_mainCollectionView) {
_mainCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:self.mainCollectionViewFlowLayout];
_mainCollectionView.userInteractionEnabled = YES;
_mainCollectionView.backgroundColor = [UIColor clearColor];
_mainCollectionView.showsVerticalScrollIndicator = NO;
_mainCollectionView.showsHorizontalScrollIndicator = NO;
_mainCollectionView.alwaysBounceHorizontal = YES;
_mainCollectionView.delegate = self;
_mainCollectionView.dataSource = self;
if (@available(iOS 11.0, *)) {
_mainCollectionView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
}
[_mainCollectionView registerClass:[TFShareViewCell class] forCellWithReuseIdentifier:@"TFShareViewCell"];
}
return _mainCollectionView;
}
- (UICollectionViewFlowLayout *)mainCollectionViewFlowLayout
{
if (!_mainCollectionViewFlowLayout) {
_mainCollectionViewFlowLayout = [[UICollectionViewFlowLayout alloc] init];
_mainCollectionViewFlowLayout.minimumInteritemSpacing = 0;
_mainCollectionViewFlowLayout.minimumLineSpacing = 0;
_mainCollectionViewFlowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
}
return _mainCollectionViewFlowLayout;
}
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
@end