云豹短視頻app源碼中,標簽選擇功能的實現
發布來源:云豹科技 發布人:云豹科技 Date:2021-05-26 10:05:53
在國內任意短視頻app中,都能夠看到“貼標簽功能”,云豹短視頻app源碼作為緊跟行業潮流的成品商業源碼,自然也有該功能的實現,在云豹短視頻app源碼中,標簽選擇功能的實現要求是這樣的——
短視頻app源碼標簽選擇功能的實現要求:
1、 所有標簽顯示在下方,被選擇的標簽出現在上方,且在下方顯示“被選中狀態”,被選中的標簽再次點擊可取消,同時底部取消選中狀態。
2、 標簽的寬度自適應,顯示不全自行判斷折行展示
3、 若顯示標簽過多,超出上下邊界,則支持滑動展現
實現效果圖如下:
通過短視頻源碼進行功能實現:
-(CGSize)intrinsicContentSize { if (!self.tags.count) { return CGSizeZero; } NSArray *subviews = self.subviews; UIView *previousView = nil; CGFloat topPadding = self.padding.top; CGFloat bottomPadding = self.padding.bottom; CGFloat leftPadding = self.padding.left; CGFloat rightPadding = self.padding.right; CGFloat itemSpacing = self.interitemSpacing; CGFloat lineSpacing = self.lineSpacing; CGFloat currentX = leftPadding; CGFloat intrinsicHeight = topPadding; CGFloat intrinsicWidth = leftPadding; if (!self.singleLine && self.preferredMaxLayoutWidth > 0) { NSInteger lineCount = 0; for (UIView *view in subviews) { CGSize size = view.intrinsicContentSize; // 寬度和高度通過參數的0或者非0來進行賦值 CGFloat width = self.isIntrinsicWidth?self.regularWidth:size.width; CGFloat height = self.isIntrinsicHeight?self.regularHeight:size.height; if (previousView) { // CGFloat width = size.width; currentX += itemSpacing; if (currentX + width + rightPadding <= self.preferredMaxLayoutWidth) { currentX += width; } else { lineCount ++; currentX = leftPadding + width; intrinsicHeight += height; } } else { lineCount ++; intrinsicHeight += height; currentX += width; } previousView = view; intrinsicWidth = MAX(intrinsicWidth, currentX + rightPadding); } intrinsicHeight += bottomPadding + lineSpacing * (lineCount - 1); } else { for (UIView *view in subviews) { CGSize size = view.intrinsicContentSize; intrinsicWidth += self.isIntrinsicWidth?self.regularWidth:size.width; } intrinsicWidth += itemSpacing * (subviews.count - 1) + rightPadding; intrinsicHeight += ((UIView *)subviews.firstObject).intrinsicContentSize.height + bottomPadding; } return CGSizeMake(intrinsicWidth, intrinsicHeight); } - (void)layoutSubviews { if (!self.singleLine) { self.preferredMaxLayoutWidth = self.frame.size.width; } [super layoutSubviews]; [self layoutTags]; } #pragma mark - Custom accessors - (NSMutableArray *)tags { if(!_tags) { _tags = [NSMutableArray array]; } return _tags; } - (void)setPreferredMaxLayoutWidth: (CGFloat)preferredMaxLayoutWidth { if (preferredMaxLayoutWidth != _preferredMaxLayoutWidth) { _preferredMaxLayoutWidth = preferredMaxLayoutWidth; _didSetup = NO; [self invalidateIntrinsicContentSize]; } } #pragma mark - Private - (void)layoutTags { if (self.didSetup || !self.tags.count) { return; } NSArray *subviews = self.subviews; UIView *previousView = nil; CGFloat topPadding = self.padding.top; CGFloat leftPadding = self.padding.left; CGFloat rightPadding = self.padding.right; CGFloat itemSpacing = self.interitemSpacing; CGFloat lineSpacing = self.lineSpacing; CGFloat currentX = leftPadding; if (!self.singleLine && self.preferredMaxLayoutWidth > 0) { for (UIView *view in subviews) { CGSize size = view.intrinsicContentSize; CGFloat width1 = self.isIntrinsicWidth?self.regularWidth:size.width; CGFloat height1 = self.isIntrinsicHeight?self.regularHeight:size.height; if (previousView) { // CGFloat width = size.width; currentX += itemSpacing; if (currentX + width1 + rightPadding <= self.preferredMaxLayoutWidth) { view.frame = CGRectMake(currentX, CGRectGetMinY(previousView.frame), width1, height1); currentX += width1; } else { CGFloat width = MIN(width1, self.preferredMaxLayoutWidth - leftPadding - rightPadding); view.frame = CGRectMake(leftPadding, CGRectGetMaxY(previousView.frame) + lineSpacing, width, height1); currentX = leftPadding + width; } } else { CGFloat width = MIN(width1, self.preferredMaxLayoutWidth - leftPadding - rightPadding); view.frame = CGRectMake(leftPadding, topPadding, width, height1); currentX += width; } previousView = view; } } else { for (UIView *view in subviews) { CGSize size = view.intrinsicContentSize; view.frame = CGRectMake(currentX, topPadding, self.isIntrinsicWidth?self.regularWidth:size.width, self.isIntrinsicHeight?self.regularHeight:size.height); currentX += self.isIntrinsicWidth?self.regularWidth:size.width; previousView = view; } } self.didSetup = YES;
由此,短視頻app源碼中標簽選擇功能的實現教程到此結束,更多相關教程請關注云豹科技,如需購買短視頻app源碼,歡迎聯系云豹科技,云豹科技不斷更新短視頻app源碼,更新日志官網可查。
聲明:以上內容為云豹科技作者本人原創,未經作者本人同意,禁止轉載,否則將追究相關法律責任www.radissonsedona.com
最近更新
熱門標簽