// // MHStickersView.m #import "MHStickersView.h" #import "MHStickerCell.h" //#import "StickerManager.h" //#import "StickerDataListModel.h" #import "MHSectionStickersView.h" #import "MHBeautyParams.h" #import "MHBottomView.h" #import #define kNetWorkPrefix @"https://data.facegl.com" @interface MHStickersView () @property (nonatomic, assign) NSInteger lastIndex;//记录按钮的索引,以便更新UI @property (nonatomic, strong) UIView *lineView; @property (nonatomic, strong) UIScrollView *scrollView; @property (nonatomic, strong) NSMutableArray *views; @property(nonatomic,strong)NSArray *stickersArr; @property (nonatomic, assign) NSInteger lastViewIndex;//记录View索引,取消选中贴纸 @property (nonatomic, assign) BOOL isFirstSelect; @property (nonatomic, assign) NSInteger currentViewIndex; @property (nonatomic, strong) NSMutableArray *titleBtnArr; @property (nonatomic, strong) NSMutableArray *allArr; @property (nonatomic, strong) NSMutableArray *urls; @property (nonatomic, strong) MHBottomView * bottomView; @property (nonatomic, assign) int sdkLevelTYpe;///= 0) { if ([MHSDK shareInstance].stickerArray.count == 0) { return; } NSMutableArray *currentArr = self.allArr[self.currentViewIndex]; MHSectionStickersView *currentSubView = self.views[self.currentViewIndex]; NSString *la = [[NSUserDefaults standardUserDefaults] objectForKey:@"selectedStickerIndex"]; if (la != nil && ![la isEqualToString:@""]) { NSInteger laindex = la.integerValue; if (laindex < currentArr.count) { StickerDataListModel *model = currentArr[laindex+1]; model.isSelected = NO; currentSubView.lastIndex = -1; [currentSubView.collectionView reloadData]; } }else{ [currentArr enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { StickerDataListModel *model = obj; model.isSelected = NO; if (stop) { [currentSubView.collectionView reloadData]; } }]; } } } #pragma mark - 底部按钮响应 - (void)cameraAction:(BOOL)isTakePhoto{ NSLog(@"点击了拍照"); if (isTakePhoto) { if ([self.delegate respondsToSelector:@selector(takePhoto)]) { [self.delegate takePhoto]; } }else{ if ([self.delegate respondsToSelector:@selector(clickPackUp)]) { [self.delegate clickPackUp]; } } } #pragma mark - delegate - (void)handleSelectedStickerEffect:(NSString *)stickerContent stickerModel:(nonnull StickerDataListModel *)model{ //NSLog(@"sss---%@",stickerContent); if (!IsStringWithAnyText(model.name) && !IsStringWithAnyText(model.resource) ) { if ([self.delegate respondsToSelector:@selector(handleStickerEffect: sticker:withLevel:)]) { [self.delegate handleStickerEffect:@"" sticker:nil withLevel:0]; [[NSUserDefaults standardUserDefaults] setObject:@"" forKey:kMHSticker]; } } else { if ([self.delegate respondsToSelector:@selector(handleStickerEffect: sticker:withLevel:)]) { NSDictionary * itemDic = self.stickersArr[self.currentViewIndex]; NSInteger level = [itemDic[@"id"] integerValue]; [self.delegate handleStickerEffect:stickerContent sticker:model withLevel:level]; if (isSaveSticker) { NSDictionary *info = @{@"content":stickerContent, @"kLevel":@(level)}; [[NSUserDefaults standardUserDefaults] setObject:info forKey:kMHSticker]; } } } } //当切换分类后,点击贴纸,取消上一个分类下贴纸的选中效果 - (void)reloadLastStickerSelectedStatus:(BOOL)needReset { if (!self.isFirstSelect) { self.lastViewIndex = 0; self.isFirstSelect = YES; } MHSectionStickersView *lastSubView = self.views[self.lastViewIndex]; NSMutableArray *lastArr = self.allArr[self.lastViewIndex]; NSString *la = [[NSUserDefaults standardUserDefaults] objectForKey:@"selectedStickerIndex"]; if (la != nil && ![la isEqualToString:@""]) { NSInteger laindex = la.integerValue; if (laindex < lastArr.count) { StickerDataListModel *model = lastArr[laindex]; model.isSelected = !needReset; [lastSubView.collectionView reloadData]; } } MHSectionStickersView *subView = self.views[self.currentViewIndex]; subView.lastTag = subView.tag; self.lastViewIndex = self.currentViewIndex; } #pragma mark - 取消贴纸 - (void)cancelStiker{ StickerDataListModel * model = [[StickerDataListModel alloc] init]; model.resource = @""; [self handleSelectedStickerEffect:model.name stickerModel:model]; [self clearStikerUI]; } #pragma mark - data - (void)configureStickers:(NSArray *)arr { NSMutableArray *muArr = self.allArr.firstObject; [muArr addObjectsFromArray:arr]; MHSectionStickersView *stickersView = self.views.firstObject; [stickersView configureData:arr]; } - (BOOL)stickerIsExistWithStickerName:(NSString * )stickerName{ NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"sticker"]; NSString * path1 = [path stringByAppendingPathComponent:stickerName]; if (![[NSFileManager defaultManager] fileExistsAtPath:path1]) { return NO; } return YES; } - (void)switchViewToRequestData:(NSInteger)index { NSInteger currentIndex = MIN(index, self.allArr.count); NSMutableArray *arr = self.allArr[currentIndex]; [arr removeAllObjects]; MHSectionStickersView *currentSubView = self.views[currentIndex]; NSString *url = self.urls[currentIndex]; NSDictionary * itemDic = [MHSDK shareInstance].stickerArray[index]; NSString * oldStickerVersion = [[NSUserDefaults standardUserDefaults] objectForKey:OldStickerVesion]; NSString * stickerVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"sticker_version"]; NSArray * stickerArr = [[NSUserDefaults standardUserDefaults] objectForKey:itemDic[@"name"]]; NSMutableArray * stickerMutArr = [NSMutableArray array]; StickerDataListModel *model; NSSet *set = [NSSet setWithObjects:[NSString class],[NSNumber class],[StickerDataListModel class], nil]; for (NSData * data in stickerArr) { if (data && ![data isKindOfClass:[NSString class]]) { if (@available(iOS 11.0,*)) { model = [NSKeyedUnarchiver unarchivedObjectOfClasses:set fromData:data error:nil]; }else{ model = [NSKeyedUnarchiver unarchiveObjectWithData:data]; } model.is_downloaded = [self stickerIsExistWithStickerName:model.name]?@"1":@"0"; [stickerMutArr addObject:model]; } } if ((oldStickerVersion && oldStickerVersion.length > 0) && (stickerMutArr && stickerMutArr.count > 0)&& ([oldStickerVersion isEqual:stickerVersion])) { [currentSubView configureData:stickerMutArr]; [arr addObjectsFromArray:stickerMutArr]; [self.allArr replaceObjectAtIndex:index withObject:arr]; } else { [[StickerManager sharedManager] requestStickersListWithUrl:url Success:^(NSArray * _Nonnull stickerArray) { dispatch_async(dispatch_get_main_queue(), ^{ [arr addObjectsFromArray:stickerArray]; [self.allArr replaceObjectAtIndex:index withObject:arr]; [currentSubView configureData:arr]; NSMutableArray * dataArray = [NSMutableArray arrayWithCapacity:stickerArray.count]; for (StickerDataListModel * model in stickerArray) { NSData * data = [NSKeyedArchiver archivedDataWithRootObject:model requiringSecureCoding:YES error:nil]; [dataArray addObject:data]; } [[NSUserDefaults standardUserDefaults] setObject:dataArray forKey:itemDic[@"name"]]; [[NSUserDefaults standardUserDefaults] setObject:stickerVersion forKey:OldStickerVesion]; }); } Failed:^{ }]; } if (!self.isFirstSelect) { self.lastViewIndex = 0; self.isFirstSelect = YES; self.lastIndex = 0; } MHSectionStickersView *lastSubView = self.views[self.lastViewIndex]; currentSubView.lastTag = lastSubView.tag; [self switchSelectedBtnUI:currentIndex textColor:FontColorSelected]; if (self.lastIndex != currentIndex) { [self switchSelectedBtnUI:self.lastIndex textColor:FontColorBlackNormal]; } self.lastIndex = currentIndex; self.currentViewIndex = currentIndex; } #pragma mark - scrollDelegate - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSInteger index = scrollView.contentOffset.x / window_width; [self switchViewToRequestData:index]; } #pragma mark - lazy - (UIScrollView *)scrollView { if (!_scrollView) { _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, window_width, self.frame.size.height - MHStickerSectionHeight-0.5)]; _scrollView.pagingEnabled = YES; ///修改MHUI _scrollView.backgroundColor = [UIColor clearColor]; _scrollView.bounces = NO; _scrollView.delegate = self; _scrollView.scrollsToTop = NO; _scrollView.showsHorizontalScrollIndicator = NO; } return _scrollView; } ///修改MHUI - (MHBottomView*)bottomView{ if (!_bottomView) { __weak typeof(self) weakSelf = self; CGFloat bottom = self.frame.size.height - MHBottomViewHeight; _bottomView = [[MHBottomView alloc] initWithFrame:CGRectMake(0, bottom, window_width, MHBottomViewHeight)]; _bottomView.isSticker = YES; // _bottomView.backgroundColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.5]; _bottomView.clickBtn = ^(BOOL isTakePhoto) { [weakSelf cameraAction:isTakePhoto]; }; } return _bottomView; } - (NSAttributedString *)stringAttachment:(NSString *)content textColor:(UIColor *)color { NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:YZMsg(content)]; [string addAttributes:@{NSForegroundColorAttributeName:color,NSFontAttributeName:Font_12} range:NSMakeRange(0, string.length)]; if ([content containsString:@"基础"]) { return string; } NSTextAttachment *attchment = [[NSTextAttachment alloc]init]; attchment.bounds = CGRectMake(0, 2.5,18,10);//设置frame UIImage *img = BundleImg(@"pro"); attchment.image = img;//设置需要插入的图片 NSAttributedString *attchmentString = [NSAttributedString attributedStringWithAttachment:attchment]; [string appendAttributedString:attchmentString]; return string; } - (int)sdkLevelTYpe{ return [[MHSDK shareInstance] getSDKLevel]; } @end