小说绘上架版本
This commit is contained in:
+22
@@ -0,0 +1,22 @@
|
||||
//
|
||||
// TFNovelDetailHeaderView.h
|
||||
// TFReader
|
||||
//
|
||||
// Created by 谢腾飞 on 2020/12/19.
|
||||
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
|
||||
//
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
typedef void(^CatalogueButtonClickBlock)(void);
|
||||
|
||||
@interface TFNovelDetailHeaderView : TFBasicTableViewCell
|
||||
|
||||
@property (nonatomic ,strong) TFProductionModel *bookModel;
|
||||
@property (nonatomic ,copy) CatalogueButtonClickBlock catalogueButtonClickBlock;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+338
@@ -0,0 +1,338 @@
|
||||
//
|
||||
// TFNovelDetailHeaderView.m
|
||||
// TFReader
|
||||
//
|
||||
// Created by 谢腾飞 on 2020/12/19.
|
||||
// Copyright © 2020 xtfei_2011@126.com. All rights reserved.
|
||||
//
|
||||
|
||||
#import "TFNovelDetailHeaderView.h"
|
||||
#import "TFTagboardView.h"
|
||||
#import "UIImage+Blur.h"
|
||||
|
||||
@interface TFNovelDetailHeaderView ()
|
||||
{
|
||||
TFProductionCoverView *bookImageView;
|
||||
UILabel *bookNameLabel;
|
||||
UILabel *authorLabel;
|
||||
UILabel *introductionLabel;
|
||||
UILabel *commontNumLabel;
|
||||
UILabel *collecitonNumLabel;
|
||||
|
||||
UILabel *bookDescriptionLabel;
|
||||
UILabel *timeLabel;
|
||||
UIButton *catalogueButton;
|
||||
UILabel *catalogueDetailLabel;
|
||||
TFTagboardView *tagView;
|
||||
|
||||
}
|
||||
@property (nonatomic, strong) UIImageView __block *headBackImageView;
|
||||
|
||||
@end
|
||||
|
||||
@implementation TFNovelDetailHeaderView
|
||||
|
||||
- (void)createSubviews
|
||||
{
|
||||
[super createSubviews];
|
||||
|
||||
// 背景图
|
||||
_headBackImageView = [[UIImageView alloc] init];
|
||||
_headBackImageView.backgroundColor = [UIColor whiteColor];
|
||||
_headBackImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||||
_headBackImageView.clipsToBounds = YES;
|
||||
_headBackImageView.image = HoldImage;
|
||||
[self.contentView addSubview:_headBackImageView];
|
||||
|
||||
[_headBackImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(self.contentView.mas_left);
|
||||
make.top.mas_equalTo(self.contentView.mas_top);
|
||||
make.width.mas_equalTo(SCREEN_WIDTH);
|
||||
make.height.mas_equalTo(SCREEN_WIDTH / 2 + PUB_NAVBAR_OFFSET + kMargin);
|
||||
}];
|
||||
|
||||
// 书籍图片
|
||||
bookImageView = [[TFProductionCoverView alloc] initWithProductionType:TFProductionTypeNovel coverDirection:TFProductionCoverDirectionVertical];
|
||||
bookImageView.userInteractionEnabled = YES;
|
||||
[self.contentView addSubview:bookImageView];
|
||||
|
||||
[bookImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(kMargin);
|
||||
make.bottom.mas_equalTo(_headBackImageView.mas_bottom).with.offset(kMargin);
|
||||
make.width.mas_equalTo(BOOK_WIDTH);
|
||||
make.height.mas_equalTo(BOOK_HEIGHT);
|
||||
}];
|
||||
|
||||
// 书名
|
||||
bookNameLabel = [[UILabel alloc] init];
|
||||
bookNameLabel.textAlignment = NSTextAlignmentLeft;
|
||||
bookNameLabel.textColor = [UIColor whiteColor];
|
||||
bookNameLabel.backgroundColor = [UIColor clearColor];
|
||||
bookNameLabel.font = kBoldFont16;
|
||||
[self.contentView addSubview:bookNameLabel];
|
||||
|
||||
[bookNameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookImageView.mas_right).with.offset(kMargin);
|
||||
make.top.mas_equalTo(bookImageView.mas_top);
|
||||
make.right.mas_equalTo(self.contentView.mas_right).with.offset(- kMargin);
|
||||
make.height.mas_equalTo(kLabelHeight);
|
||||
}];
|
||||
|
||||
// 作者
|
||||
authorLabel = [[UILabel alloc] init];
|
||||
authorLabel.backgroundColor = [UIColor clearColor];
|
||||
authorLabel.textColor = [UIColor whiteColor];
|
||||
authorLabel.textAlignment = NSTextAlignmentLeft;
|
||||
authorLabel.font = kFont12;
|
||||
[self.contentView addSubview:authorLabel];
|
||||
|
||||
[authorLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookNameLabel.mas_left);
|
||||
make.top.mas_equalTo(bookNameLabel.mas_bottom).with.offset(5);
|
||||
make.width.mas_equalTo(bookNameLabel.mas_width).multipliedBy(0.5);
|
||||
make.height.mas_equalTo(17);
|
||||
}];
|
||||
|
||||
// 书籍标签
|
||||
introductionLabel = [[UILabel alloc] init];
|
||||
introductionLabel.backgroundColor = [UIColor clearColor];
|
||||
introductionLabel.textColor = [UIColor whiteColor];
|
||||
introductionLabel.textAlignment = NSTextAlignmentLeft;
|
||||
introductionLabel.font = kFont12;
|
||||
[self.contentView addSubview:introductionLabel];
|
||||
|
||||
[introductionLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookNameLabel.mas_left);
|
||||
make.top.mas_equalTo(authorLabel.mas_bottom).with.offset(5);
|
||||
make.width.mas_equalTo(bookNameLabel.mas_width).multipliedBy(0.5);
|
||||
make.height.mas_equalTo(authorLabel.mas_height);
|
||||
}];
|
||||
|
||||
// 评价数
|
||||
commontNumLabel = [[UILabel alloc] init];
|
||||
commontNumLabel.backgroundColor = [UIColor clearColor];
|
||||
commontNumLabel.textColor = [UIColor whiteColor];
|
||||
commontNumLabel.textAlignment = NSTextAlignmentLeft;
|
||||
commontNumLabel.font = kFont12;
|
||||
[self.contentView addSubview:commontNumLabel];
|
||||
|
||||
[commontNumLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookNameLabel.mas_left);
|
||||
make.top.mas_equalTo(introductionLabel.mas_bottom).with.offset(kQuarterMargin);
|
||||
make.width.mas_equalTo(bookNameLabel.mas_width).multipliedBy(0.5);
|
||||
make.height.mas_equalTo(authorLabel.mas_height);
|
||||
}];
|
||||
|
||||
collecitonNumLabel = [[UILabel alloc] init];
|
||||
collecitonNumLabel.backgroundColor = [UIColor clearColor];
|
||||
collecitonNumLabel.textColor = [UIColor whiteColor];
|
||||
collecitonNumLabel.textAlignment = NSTextAlignmentLeft;
|
||||
collecitonNumLabel.font = kFont12;
|
||||
[self.contentView addSubview:collecitonNumLabel];
|
||||
|
||||
[collecitonNumLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookNameLabel.mas_left);
|
||||
make.top.mas_equalTo(commontNumLabel.mas_bottom).with.offset(kQuarterMargin);
|
||||
make.width.mas_equalTo(bookNameLabel.mas_width).multipliedBy(0.5);
|
||||
make.height.mas_equalTo(authorLabel.mas_height);
|
||||
}];
|
||||
|
||||
// 简介
|
||||
bookDescriptionLabel = [[UILabel alloc] init];
|
||||
bookDescriptionLabel.backgroundColor = [UIColor whiteColor];
|
||||
bookDescriptionLabel.textColor = kBlackColor;
|
||||
bookDescriptionLabel.textAlignment = NSTextAlignmentLeft;
|
||||
bookDescriptionLabel.font = kMainFont;
|
||||
bookDescriptionLabel.numberOfLines = 0;
|
||||
[self.contentView addSubview:bookDescriptionLabel];
|
||||
|
||||
[bookDescriptionLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(kMargin);
|
||||
make.top.mas_equalTo(bookImageView.mas_bottom).with.offset(kHalfMargin);
|
||||
make.width.mas_equalTo(self.mas_width).with.offset(- 2 * kMargin);
|
||||
make.height.mas_equalTo(50);
|
||||
}];
|
||||
|
||||
// 目录列
|
||||
catalogueButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||
catalogueButton.backgroundColor = [UIColor clearColor];
|
||||
catalogueButton.hidden = YES;
|
||||
[catalogueButton addTarget:self action:@selector(catalogueClick) forControlEvents:UIControlEventTouchUpInside];
|
||||
[self.contentView addSubview:catalogueButton];
|
||||
|
||||
[catalogueButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(0);
|
||||
make.top.mas_equalTo(bookDescriptionLabel.mas_bottom).with.offset(kHalfMargin);
|
||||
make.width.mas_equalTo(self.contentView.mas_width);
|
||||
make.height.mas_equalTo(kLabelHeight + kHalfMargin);
|
||||
}];
|
||||
|
||||
UIImageView *catalogueIcon = [[UIImageView alloc] init];
|
||||
catalogueIcon.image = [UIImage imageNamed:@"book_directory"];
|
||||
catalogueIcon.userInteractionEnabled = YES;
|
||||
[catalogueButton addSubview:catalogueIcon];
|
||||
|
||||
[catalogueIcon mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(kMargin);
|
||||
make.centerY.mas_equalTo(catalogueButton.mas_centerY);
|
||||
make.height.mas_equalTo(kMargin);
|
||||
make.width.mas_equalTo(kMargin);
|
||||
}];
|
||||
|
||||
UILabel *catalogueTitle = [[UILabel alloc] init];
|
||||
catalogueTitle.text = TFLocalizedString(@"目录");
|
||||
catalogueTitle.font = kMainFont;
|
||||
catalogueTitle.textColor = kBlackColor;
|
||||
catalogueTitle.textAlignment = NSTextAlignmentLeft;
|
||||
[catalogueButton addSubview:catalogueTitle];
|
||||
|
||||
[catalogueTitle mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(catalogueIcon.mas_right).with.offset(5);
|
||||
make.centerY.mas_equalTo(catalogueIcon.mas_centerY);
|
||||
make.width.mas_equalTo(catalogueTitle.intrinsicContentSize.width);
|
||||
make.height.mas_equalTo(catalogueIcon.mas_height);
|
||||
}];
|
||||
|
||||
// 横线
|
||||
for (int i = 0; i < 2; i ++) {
|
||||
UIView *cellLine = [[UIView alloc] init];
|
||||
cellLine.hidden = NO;
|
||||
cellLine.backgroundColor = kGrayLineColor;
|
||||
[catalogueButton addSubview:cellLine];
|
||||
|
||||
[cellLine mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(kMargin);
|
||||
if (i == 0) {
|
||||
make.top.mas_equalTo(kCellLineHeight);
|
||||
} else {
|
||||
make.bottom.mas_equalTo(catalogueButton.mas_bottom).with.offset(- kCellLineHeight);
|
||||
}
|
||||
make.width.mas_equalTo(self.mas_width).with.offset( - kMargin);
|
||||
make.height.mas_equalTo(kCellLineHeight);
|
||||
}];
|
||||
}
|
||||
|
||||
UIImageView *connerImageView = [[UIImageView alloc] init];
|
||||
connerImageView.image = [[UIImage imageNamed:@"public_more"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
|
||||
connerImageView.userInteractionEnabled = YES;
|
||||
connerImageView.tintColor = kGrayTextColor;
|
||||
[catalogueButton addSubview:connerImageView];
|
||||
|
||||
[connerImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.mas_equalTo(catalogueButton.mas_right).with.offset(- kMargin);
|
||||
make.centerY.mas_equalTo(catalogueButton.mas_centerY);
|
||||
make.width.height.mas_equalTo(10);
|
||||
}];
|
||||
|
||||
timeLabel = [[UILabel alloc] init];
|
||||
timeLabel.textAlignment = NSTextAlignmentRight;
|
||||
timeLabel.font = kFont10;
|
||||
timeLabel.textColor = kGrayTextColor;
|
||||
[catalogueButton addSubview:timeLabel];
|
||||
|
||||
[timeLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.right.mas_equalTo(connerImageView.mas_left).with.offset(- kQuarterMargin);
|
||||
make.top.mas_equalTo(0);
|
||||
make.width.mas_equalTo(CGFLOAT_MIN);
|
||||
make.height.mas_equalTo(catalogueButton.mas_height);
|
||||
}];
|
||||
|
||||
catalogueDetailLabel = [[UILabel alloc] init];
|
||||
catalogueDetailLabel.backgroundColor = [UIColor clearColor];
|
||||
catalogueDetailLabel.textAlignment = NSTextAlignmentLeft;
|
||||
catalogueDetailLabel.font = kFont12;
|
||||
catalogueDetailLabel.textColor = kGrayTextColor;
|
||||
[catalogueButton addSubview:catalogueDetailLabel];
|
||||
|
||||
[catalogueDetailLabel mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(catalogueTitle.mas_right).offset(kQuarterMargin);
|
||||
make.top.mas_equalTo(0);
|
||||
make.right.mas_equalTo(timeLabel.mas_left).with.offset(- kQuarterMargin);
|
||||
make.height.mas_equalTo(catalogueButton.mas_height);
|
||||
}];
|
||||
|
||||
// 标签
|
||||
tagView = [[TFTagboardView alloc] init];
|
||||
tagView.textAlignment = TFTagboardTextAlignmentLeft;
|
||||
tagView.borderStyle = TFTagboardBorderStyleFill;
|
||||
tagView.layoutStyle = TFTagboardLayoutStyleScroll;
|
||||
[self.contentView addSubview:tagView];
|
||||
|
||||
[tagView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(kMargin);
|
||||
make.top.mas_equalTo(catalogueButton.mas_bottom).with.offset(kHalfMargin);
|
||||
make.width.mas_equalTo(self.contentView.mas_width).with.offset(- 2 * kMargin);
|
||||
make.height.mas_equalTo(20);
|
||||
make.bottom.mas_equalTo(self.contentView.mas_bottom).with.offset(- kHalfMargin).priorityLow();
|
||||
}];
|
||||
|
||||
}
|
||||
|
||||
- (void)catalogueClick
|
||||
{
|
||||
if (self.catalogueButtonClickBlock) {
|
||||
self.catalogueButtonClickBlock();
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setBookModel:(TFProductionModel *)bookModel
|
||||
{
|
||||
if (bookModel && (_bookModel != bookModel)) {
|
||||
_bookModel = bookModel;
|
||||
|
||||
WS(weakSelf)
|
||||
[[YYWebImageManager sharedManager] requestImageWithURL:[NSURL URLWithString:bookModel.cover?:@""] options:YYWebImageOptionSetImageWithFadeAnimation progress:nil transform:nil completion:^(UIImage * _Nullable image, NSURL * _Nonnull url, YYWebImageFromType from, YYWebImageStage stage, NSError * _Nullable error) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
weakSelf.headBackImageView.image = [image imgWithLightAlpha:0.4 radius:3 colorSaturationFactor:1.8];
|
||||
});
|
||||
}];
|
||||
|
||||
bookImageView.coverImageUrl = bookModel.cover;
|
||||
|
||||
bookNameLabel.text = [TFUtilsHelper formatStringWithObject:bookModel.name?:@""];
|
||||
|
||||
authorLabel.text = [TFUtilsHelper formatStringWithObject:bookModel.author?:@""];
|
||||
|
||||
[introductionLabel mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||
make.left.mas_equalTo(bookNameLabel.mas_left);
|
||||
make.top.mas_equalTo(authorLabel.mas_bottom).with.offset(5);
|
||||
make.width.mas_equalTo(bookNameLabel.mas_width);
|
||||
make.height.mas_equalTo(authorLabel.mas_height);
|
||||
}];
|
||||
|
||||
commontNumLabel.text = [TFUtilsHelper formatStringWithObject:bookModel.hot_num?:@""];
|
||||
|
||||
collecitonNumLabel.text = [TFUtilsHelper formatStringWithObject:bookModel.total_favors?:@""];
|
||||
|
||||
// 截取简介
|
||||
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:bookModel.production_descirption?:@""];
|
||||
attributedString.lineSpacing = 5;
|
||||
attributedString.font = kFont(13);
|
||||
attributedString.color = kBlackColor;
|
||||
|
||||
NSAttributedString *separatedString = [TFViewHelper getSubContentWithOriginalContent:attributedString labelWidth:(SCREEN_WIDTH - 2 * (kMargin + kHalfMargin)) labelMaxLine:4];
|
||||
bookDescriptionLabel.attributedText = separatedString;
|
||||
if (separatedString.length == 0) {
|
||||
[bookDescriptionLabel mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo(0.0);
|
||||
}];
|
||||
} else {
|
||||
[bookDescriptionLabel mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.height.mas_equalTo([TFViewHelper boundsWithFont:kFont(13) attributedText:separatedString needWidth:(SCREEN_WIDTH - 2 * (kMargin + kHalfMargin)) lineSpacing:6] + kHalfMargin);
|
||||
}];
|
||||
}
|
||||
|
||||
tagView.tagboardArray = bookModel.tag;
|
||||
|
||||
timeLabel.text = bookModel.last_chapter_time?:@"";
|
||||
[timeLabel mas_updateConstraints:^(MASConstraintMaker *make) {
|
||||
make.width.mas_equalTo([TFViewHelper getDynamicWidthWithLabel:timeLabel]);
|
||||
}];
|
||||
|
||||
catalogueDetailLabel.text = bookModel.last_chapter?:@"";
|
||||
|
||||
catalogueButton.hidden = NO;
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user