Commit e9a7176d by ludi

完成背包模块,准备做直播间背包

parent 44736c69
Showing with 1032 additions and 67 deletions
......@@ -35,4 +35,9 @@
/// 下载权重
@property (nonatomic, assign) NSInteger weight;
/// 音效资源文件
@property (nonatomic, copy) NSString *audioresource;
///座驾等级(1:经典、2:豪华、3:名贵、4:限量、5:定制)
@property (nonatomic, assign) NSInteger carGrade;
@end
......@@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface FUSBackpackRequestTypeModel : FUSBaseModel<FUSNetworkCacheProtocol>
@property (nonatomic, copy) NSString *dataMd5;
@property (nonatomic, strong) NSMutableArray<FUSBackpackTypeModel *> *dataList;
@property (nonatomic, strong) NSArray<FUSBackpackTypeModel *> *dataList;
@end
......
......@@ -141,9 +141,7 @@ import RxSwift
guard let dataDict = dataDict else { return }
let model = FUSBackpackRequestTypeModel.fus_model(withDict: dataDict)
if let dataList = dataDict as? [FUSBackpackTypeModel] {
self?.backpackTypeList.accept(dataList)
}
self?.backpackTypeList.accept(model.dataList)
} failure: {[weak self] msg, code in
if from == .server {
self?.fus_requestBackpackTypeList(from: .local)
......
......@@ -23,4 +23,6 @@
corner:(CGFloat)corner
completed:(void(^)(UIImage *image))completed;
- (UIImage *)fus_tintImageWithColor:(UIColor *)color;
@end
......@@ -63,5 +63,23 @@
});
}
- (UIImage *)fus_tintImageWithColor:(UIColor *)color {
CGSize size = self.size;
UIGraphicsBeginImageContextWithOptions(size, NO, self.scale);
CGContextRef context = UIGraphicsGetCurrentContext();
[self drawAtPoint:CGPointZero blendMode:kCGBlendModeNormal alpha:1.0];
CGContextSetFillColorWithColor(context, color.CGColor);
CGContextSetBlendMode(context, kCGBlendModeSourceIn);
CGContextSetAlpha(context, 1.0);
CGRect rect = CGRectMake(CGPointZero.x, CGPointZero.y, self.size.width, self.size.height);
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
UIImage *tintedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return tintedImage ?: [UIImage new];
}
@end
......@@ -9,11 +9,11 @@
#import <UIKit/UIKit.h>
#import "FUSButton.h"
typedef enum {
typedef NS_ENUM(NSUInteger, BackFunction) {
popViewController,
popToRootViewController,
dismissViewController,
}BackFunction;
};
typedef NS_ENUM(NSUInteger, FUSNavigationBackBtnStyle) {
FUSNavigationBackBtnStyleBlack,
......
......@@ -7,12 +7,12 @@
<key>FUSChatCenterBundle.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>75</integer>
<integer>72</integer>
</dict>
<key>FUSChatCenterModule.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>74</integer>
<integer>76</integer>
</dict>
</dict>
</dict>
......
......@@ -7,12 +7,12 @@
<key>FUSShowRoomBundle.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>72</integer>
<integer>74</integer>
</dict>
<key>FUSShowRoomModule.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>76</integer>
<integer>75</integer>
</dict>
</dict>
</dict>
......
......@@ -33,6 +33,11 @@
00A9C8F42D11323600637B84 /* FUSBackpackGiftModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 00A9C8F12D11323600637B84 /* FUSBackpackGiftModel.h */; };
00A9C8F72D11515600637B84 /* FUSBackpackMotorModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 00A9C8F62D11515600637B84 /* FUSBackpackMotorModel.m */; };
00A9C8F82D11515600637B84 /* FUSBackpackMotorModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 00A9C8F52D11515600637B84 /* FUSBackpackMotorModel.h */; };
00B7785F2D12CECD003D7F56 /* FUSBackpackPropsCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B7785E2D12CECD003D7F56 /* FUSBackpackPropsCell.swift */; };
00B778612D12D972003D7F56 /* FUSBackpackGiftView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778602D12D972003D7F56 /* FUSBackpackGiftView.swift */; };
00B778632D12DA11003D7F56 /* FUSBackpackGiftCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778622D12DA11003D7F56 /* FUSBackpackGiftCell.swift */; };
00B778652D12DB89003D7F56 /* FUSBackpackMotorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778642D12DB89003D7F56 /* FUSBackpackMotorView.swift */; };
00B778672D12DC21003D7F56 /* FUSBackpackMotorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */; };
9E8D0BED6061C8C88FBF8686 /* Pods_FUSUserCenterModule.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BED3EAC4EA2F921CB5B2FEE8 /* Pods_FUSUserCenterModule.framework */; };
BE189A2D2C7323FE0008418B /* FSRDynamicImModel.h in Headers */ = {isa = PBXBuildFile; fileRef = BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */; };
BE189A2E2C7323FE0008418B /* FSRDynamicImModel.m in Sources */ = {isa = PBXBuildFile; fileRef = BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */; };
......@@ -899,6 +904,11 @@
00A9C8F22D11323600637B84 /* FUSBackpackGiftModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSBackpackGiftModel.m; sourceTree = "<group>"; };
00A9C8F52D11515600637B84 /* FUSBackpackMotorModel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FUSBackpackMotorModel.h; sourceTree = "<group>"; };
00A9C8F62D11515600637B84 /* FUSBackpackMotorModel.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FUSBackpackMotorModel.m; sourceTree = "<group>"; };
00B7785E2D12CECD003D7F56 /* FUSBackpackPropsCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackPropsCell.swift; sourceTree = "<group>"; };
00B778602D12D972003D7F56 /* FUSBackpackGiftView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackGiftView.swift; sourceTree = "<group>"; };
00B778622D12DA11003D7F56 /* FUSBackpackGiftCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackGiftCell.swift; sourceTree = "<group>"; };
00B778642D12DB89003D7F56 /* FUSBackpackMotorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackMotorView.swift; sourceTree = "<group>"; };
00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FUSBackpackMotorCell.swift; sourceTree = "<group>"; };
29DC17A1A1D4B29CA3BB6003 /* Pods-FUSUserCenterModule.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FUSUserCenterModule.debug.xcconfig"; path = "Target Support Files/Pods-FUSUserCenterModule/Pods-FUSUserCenterModule.debug.xcconfig"; sourceTree = "<group>"; };
BE1899A72C7323FE0008418B /* FSRDynamicImModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSRDynamicImModel.h; sourceTree = "<group>"; };
BE1899A82C7323FE0008418B /* FSRDynamicImModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSRDynamicImModel.m; sourceTree = "<group>"; };
......@@ -1810,6 +1820,11 @@
008AC5102D127EBA00FECA7B /* FUSBackpackPropsUseAlert.swift */,
008AC5122D12BC0300FECA7B /* FUSBackpackPropsActivatedAlert.swift */,
008AC5172D12CAAC00FECA7B /* FUSBackpackPropsView.swift */,
00B7785E2D12CECD003D7F56 /* FUSBackpackPropsCell.swift */,
00B778602D12D972003D7F56 /* FUSBackpackGiftView.swift */,
00B778622D12DA11003D7F56 /* FUSBackpackGiftCell.swift */,
00B778642D12DB89003D7F56 /* FUSBackpackMotorView.swift */,
00B778662D12DC21003D7F56 /* FUSBackpackMotorCell.swift */,
);
path = Backpack;
sourceTree = "<group>";
......@@ -4224,6 +4239,7 @@
BE78CB572C538D7E00F38855 /* FUSReportViewController.m in Sources */,
BE78CB832C538D7E00F38855 /* FUSMediaRecordPreviewView.m in Sources */,
BE78CBB32C538D7E00F38855 /* FUSMyZoneTableView.m in Sources */,
00B778672D12DC21003D7F56 /* FUSBackpackMotorCell.swift in Sources */,
BEDEDC3E2C66075400B4B0B0 /* FUSCheckInListModel.m in Sources */,
BE78CC942C538D8000F38855 /* FUSNewsFeedLikeDetailCell.m in Sources */,
BE78CBEE2C538D7F00F38855 /* FUSSelectDateView.m in Sources */,
......@@ -4251,10 +4267,12 @@
BE78CB292C538D7E00F38855 /* FUSUpdateModel.m in Sources */,
BE78CCAA2C538D8000F38855 /* FUSNewsFeedUnreadCell.m in Sources */,
BE78CCCD2C538D8000F38855 /* TZImageManager.m in Sources */,
00B778632D12DA11003D7F56 /* FUSBackpackGiftCell.swift in Sources */,
BED65B602C5C913800668116 /* FUSBoardModel.m in Sources */,
BE3B8CAC2C64D9D300976681 /* FUSVideoAndAudioChooseAlertView.m in Sources */,
BE78CB212C538D7E00F38855 /* FUSStartPageViewController.m in Sources */,
BE189A6C2C7323FE0008418B /* FSRLanguageMineTableViewCell.m in Sources */,
00B7785F2D12CECD003D7F56 /* FUSBackpackPropsCell.swift in Sources */,
BE189AA42C7323FE0008418B /* FSRSettingdictVerifyView.m in Sources */,
BE2A4B8F2CF86544008B4796 /* FUSAccountSettingViewController.m in Sources */,
BED65B482C5B990400668116 /* FUSMyView.m in Sources */,
......@@ -4354,6 +4372,7 @@
008AC5182D12CAAC00FECA7B /* FUSBackpackPropsView.swift in Sources */,
BE78CCEC2C538D8000F38855 /* FUSImagePickerViewController.m in Sources */,
BE78CC512C538D7F00F38855 /* FUSNewsFeedMessageDBHelper.m in Sources */,
00B778652D12DB89003D7F56 /* FUSBackpackMotorView.swift in Sources */,
BE78CB6C2C538D7E00F38855 /* FUSMyZoneCellManager.m in Sources */,
BE78CC9E2C538D8000F38855 /* FUSNewsFeedReplyInputView.m in Sources */,
BE78CCB72C538D8000F38855 /* FUSSearchViewController.swift in Sources */,
......@@ -4429,6 +4448,7 @@
BE78CC102C538D7F00F38855 /* FUSBlackListModel.m in Sources */,
BE78CBD92C538D7F00F38855 /* FUSTaskCenterProcessTableViewCell.m in Sources */,
BE78CBAB2C538D7E00F38855 /* FUSMyZoneBottomView.m in Sources */,
00B778612D12D972003D7F56 /* FUSBackpackGiftView.swift in Sources */,
BE78CBD02C538D7F00F38855 /* FUSTaskCenterHeaderTableViewCell.m in Sources */,
BE78CCAC2C538D8000F38855 /* FUSNewsFeedUnreadHeaderView.m in Sources */,
BE78CCCB2C538D8000F38855 /* TZImageCropManager.m in Sources */,
......
......@@ -5,8 +5,7 @@
#import "FUSNewsFeedMessageViewController.h"
#import "FUSLoginPhoneViewController.h"
#import "FUSMotoringWareHouseViewController.h"
#import <FUSUserCenterModule/FUSUserCenterModule-Swift.h>
@implementation FSRMissiondictFollowVoiceView
......@@ -91,7 +90,7 @@
- (void)fsr_onTapLogoimageviewGestureAction:(UITapGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateEnded) {
FUSMotoringWareHouseViewController *vc = [[FUSMotoringWareHouseViewController alloc] init];
FUSBackpackViewController *vc = [[FUSBackpackViewController alloc] init];
[[UIViewController fus_topViewController].navigationController pushViewController:vc animated:YES];
}
......
......@@ -4,7 +4,7 @@
#import "FSRLanguageMineViewController.h"
#import "FUSMotoringWareHouseViewController.h"
#import <FUSUserCenterModule/FUSUserCenterModule-Swift.h>
#import "FUSThirdUserInfoViewController.h"
......@@ -76,7 +76,7 @@
- (void)fsr_onTapBackgroundimageviewGestureAction:(UITapGestureRecognizer *)sender{
if (sender.state == UIGestureRecognizerStateEnded) {
FUSMotoringWareHouseViewController *vc = [[FUSMotoringWareHouseViewController alloc] init];
FUSBackpackViewController *vc = [[FUSBackpackViewController alloc] init];
[[UIViewController fus_topViewController].navigationController pushViewController:vc animated:YES];
}
......
......@@ -20,7 +20,7 @@
#import "FUSFocuseViewController.h"
#import "FUSFollowViewController.h"
#import "FUSZoneSendJewelRankController.h"
#import "FUSMotoringWareHouseViewController.h"
#import <FUSUserCenterModule/FUSUserCenterModule-Swift.h>
#import "FUSBoundAgentInfoView.h"
#import "FUSZoneCanSendNewsFeedTipView.h"
......@@ -575,7 +575,7 @@ typedef NS_ENUM(NSInteger, FUSMySettingItemType){
switch (self.zoneModel.vehicleMall) {
case FUSZoneMotoJumpPageTypeDefalut: {
FUSMotoringWareHouseViewController *motorVC = [[FUSMotoringWareHouseViewController alloc] init];
FUSBackpackViewController *motorVC = [[FUSBackpackViewController alloc] init];
[self.parentController.navigationController pushViewController:motorVC animated:YES];
break;
}
......
......@@ -9,18 +9,19 @@ import UIKit
import RxSwift
import RxCocoa
class FUSBackpackViewController: FUSBaseViewController {
@objcMembers public class FUSBackpackViewController: FUSBaseViewController {
private let disposeBag = DisposeBag()
public var defaultSegmentIndex = 0
let viewModel:FUSBackpackViewModel
let segmentView = FUSSegmentControlView(frame: .init(x: 0, y: 0, width: UIView.fus_screenW(), height: 50))
let lineImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_line_img"))
let lineImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_line_img")?.fus_tintImage(with: .init(hex: "#F1F0F0")))
let scrollView = FUSLeftPopScrollView(frame: .init(x: 0, y: 50, width: UIView.fus_screenW(), height: UIView.fus_screenH() - UIView.fus_StatusBarAndNavgationBarHeight() - 50))
let shopBtn = UIButton(type: .custom)
private var isScrolling = false
private var isFirstLoad = true
// MARK: Init
public init() {
......@@ -49,24 +50,29 @@ class FUSBackpackViewController: FUSBaseViewController {
public override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.viewModel.fus_requestAllDatas()
if isFirstLoad == false {
self.viewModel.fus_requestAllDatas()
self.isFirstLoad = false
}
}
func makeUI() {
self.fus_enableNavigationBack(withPop: .popViewController, withAnimated: true)
self.title = .fus_versionLocalString("我的背包")
self.fus_setupSegmentView()
self.fus_setupScrollView()
self.shopBtn.setImage(FUSUserCenterBunble.imageNamed("backpack_store_icon"), for: .normal)
self.shopBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
self.shopBtn.rx.tap.subscribe(onNext: { [weak self] _ in
let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl
let webVC = FUSWKWebViewController()
webVC.webUrlString = storeUrl
webVC.hidesBottomBarWhenPushed = true
self?.navigationController?.pushViewController(webVC, animated: true)
}).disposed(by: disposeBag)
// ludy:他们说还没有商城,有再打开
// self.shopBtn.setImage(FUSUserCenterBunble.imageNamed("backpack_store_icon"), for: .normal)
// self.shopBtn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
// self.shopBtn.rx.tap.subscribe(onNext: { [weak self] _ in
// let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl
// let webVC = FUSWKWebViewController()
// webVC.webUrlString = storeUrl
// webVC.hidesBottomBarWhenPushed = true
// self?.navigationController?.pushViewController(webVC, animated: true)
// }).disposed(by: disposeBag)
}
func fus_setupSegmentView() {
......@@ -203,17 +209,17 @@ class FUSBackpackViewController: FUSBaseViewController {
func fus_setupPropsCollection(_ frame:CGRect) {
let propsView = FFBackpackPropsView(frame: frame)
let propsView = FUSBackpackPropsView(frame: frame)
self.viewModel.propsList
.bind(to: propsView.propsList)
.disposed(by: disposeBag)
propsView.viewModel = self.viewModel
propsView.emptyStr = .localString("暂无道具")
propsView.emptyStr = .fus_versionLocalString("暂无道具")
self.scrollView.addSubview(propsView)
}
func fus_setupGiftCollection(_ frame:CGRect) {
let giftView = FFBackpackGiftView(frame: frame)
let giftView = FUSBackpackGiftView(frame: frame)
self.viewModel.giftList
.bind(to: giftView.giftList)
.disposed(by: disposeBag)
......@@ -221,7 +227,7 @@ class FUSBackpackViewController: FUSBaseViewController {
}
func fus_setupMotorCollection(_ frame:CGRect) {
let motorView = FFBackpackMotorView(frame: frame)
let motorView = FUSBackpackMotorView(frame: frame)
self.viewModel.motorList
.bind(to: motorView.motorList)
.disposed(by: disposeBag)
......@@ -231,12 +237,12 @@ class FUSBackpackViewController: FUSBaseViewController {
func fus_setupEdgeCollection(_ frame:CGRect) {
let edgeView = FFBackpackPropsView(frame: frame)
let edgeView = FUSBackpackPropsView(frame: frame)
self.viewModel.edgeList
.bind(to: edgeView.propsList)
.disposed(by: disposeBag)
self.scrollView.addSubview(edgeView)
edgeView.emptyStr = .localString("暂无周边")
edgeView.emptyStr = .fus_versionLocalString("暂无周边")
}
///保存当前时间戳
......@@ -258,7 +264,7 @@ class FUSBackpackViewController: FUSBaseViewController {
extension FUSBackpackViewController: FUSSegmentControlViewDelegate {
func fus_segmentControl(_ segmentView: FUSSegmentControlView!, didSelectSegmentControlItemIndex index: Int, itemText text: String!) {
public func fus_segmentControl(_ segmentView: FUSSegmentControlView!, didSelectSegmentControlItemIndex index: Int, itemText text: String!) {
var frame = self.scrollView.frame
frame.origin.x = self.scrollView.width * CGFloat(index)
self.scrollView.scrollRectToVisible(frame, animated: false)
......
......@@ -5,6 +5,7 @@
// Created by Xiang Liu on 16/12/21.
// Copyright © 2024年 FusiClub. All rights reserved.
//
// 此页废弃,连同所有次级页面
#import "FUSBaseViewController.h"
#import "FUSZoneMotoringModel.h"
......
......@@ -16,7 +16,7 @@
#import "FUSMyZoneLiveTimeCell.h"
#import "FUSMyZoneVideoCreditCell.h"
#import "FUSMyZoneMotoringCell.h"
#import "FUSMotoringWareHouseViewController.h"
#import <FUSUserCenterModule/FUSUserCenterModule-Swift.h>
#import "FUSMyZoneSignTagAddressCell.h"
// 控制器
......@@ -255,7 +255,7 @@ typedef NS_ENUM(NSUInteger, FUSMyZoneSectionType) {
if (_delegate && [_delegate respondsToSelector:@selector(fus_cellManager:pushToController:)]) {
switch (self.zoneModel.vehicleMall) {
case FUSZoneMotoJumpPageTypeDefalut: {
FUSMotoringWareHouseViewController *motorVC = [[FUSMotoringWareHouseViewController alloc] init];
FUSBackpackViewController *motorVC = [[FUSBackpackViewController alloc] init];
[_delegate fus_cellManager:self pushToController:motorVC];
break;
}
......
//
// FUSBackpackGiftCell.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/12/18.
//
import UIKit
class FUSBackpackGiftCell: UICollectionViewCell {
static func cellIdentifer() -> String {
return NSStringFromClass(FUSBackpackGiftCell.self)
}
let bgImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_item_bg_img"))
let timeImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_time_icon"))
let timeLabel = UILabel(frame: .zero)
let tagImageView = UIImageView(frame: .zero)
let iconImageView = UIImageView(frame: .zero)
let nameLabel = UILabel(frame: .zero)
let numLabel = UILabel(frame: .zero)
var model:FUSBackpackGiftModel?
override init(frame: CGRect) {
super.init(frame: frame)
self.contentView.layer.cornerRadius = 8;
self.contentView.layer.masksToBounds = true
self.addSubview(self.bgImageView)
self.bgImageView.snp.makeConstraints { make in
make.top.left.equalToSuperview().offset(-1)
make.bottom.right.equalToSuperview().offset(1)
}
self.iconImageView.contentMode = .scaleAspectFit
self.contentView.addSubview(self.iconImageView)
self.iconImageView.snp.makeConstraints { make in
make.width.equalToSuperview().multipliedBy(0.55)
make.centerX.equalToSuperview()
make.centerY.equalToSuperview().offset(-5)
}
self.contentView.addSubview(self.timeImageView)
self.timeLabel.font = .fus_themeMediumFont(8)
self.timeLabel.textColor = .fus_textColorMedium()
self.contentView.addSubview(self.timeLabel)
self.timeImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(4)
make.top.equalToSuperview().offset(5)
make.width.height.equalTo(8)
}
self.timeLabel.snp.makeConstraints { make in
make.centerY.equalTo(self.timeImageView.snp.centerY)
make.left.equalTo(self.timeImageView.snp.right).offset(3)
}
self.contentView.addSubview(self.tagImageView)
self.tagImageView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-5)
make.top.equalToSuperview().offset(5)
make.width.equalTo(24.5)
make.height.equalTo(11.5)
}
self.nameLabel.font = .fus_themeBoldFont(8)
self.nameLabel.numberOfLines = 2
self.nameLabel.textAlignment = .center
self.nameLabel.textColor = .init(white: 1, alpha: 0.7)
self.contentView.addSubview(self.nameLabel)
self.nameLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(2)
make.right.equalToSuperview().offset(-2)
make.bottom.equalToSuperview().offset(-14)
}
self.numLabel.font = .fus_themeMediumFont(8)
self.numLabel.textAlignment = .center
self.numLabel.textColor = .fus_textColorMedium()
self.contentView.addSubview(self.numLabel)
self.numLabel.snp.makeConstraints { make in
make.left.equalTo(self.nameLabel.snp.left)
make.right.equalTo(self.nameLabel.snp.right)
make.top.equalTo(self.nameLabel.snp.bottom).offset(-1)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func fus_setupWithModel(_ model:FUSBackpackGiftModel) {
self.model = model
let min = model.lastExpir / 60
let hour = min / 60
let day = hour / 24
var time = ""
var timeStr = ""
var timeColor = UIColor.init(hex: "#7F7F80")
if day > 0 {
time = String(day)
timeStr = "\(time) \(String.fus_versionLocalString("天"))"
timeColor = .init(hex: "#7F7F80")
} else if hour > 0 {
time = String(hour)
timeStr = "\(time) \(String.fus_versionLocalString("小时Unit"))"
timeColor = .init(hex: "#e84f4c")
} else {
time = String(min)
timeStr = "\(time) \(String.fus_versionLocalString("分钟Unit"))"
timeColor = .init(hex: "#e84f4c")
}
let timeAttr = NSMutableAttributedString(string: timeStr, attributes: [.font:UIFont.fus_themeMediumFont(8) ?? .systemFont(ofSize: 8),.foregroundColor:UIColor.init(hex: "#7F7F80") ?? .gray])
if let range = timeStr.range(of: time) {
timeAttr.addAttribute(.foregroundColor, value: timeColor ?? .gray, range: NSRange(range, in: timeStr))
}
self.timeLabel.attributedText = timeAttr
if isValidString(model.subimg) {
self.tagImageView.isHidden = false
self.tagImageView.setWebImageWithSubURLString(model.subimg, placeholder: .init()) {[weak self] image, url, fromType, stage, error in
if error == nil {
guard let self = self else { return }
if let size = image?.size {
let width = 11.5 / size.height * size.width
self.tagImageView.snp.remakeConstraints({ make in
make.right.equalToSuperview().offset(-5)
make.centerY.equalTo(self.timeImageView.snp.centerY)
make.width.equalTo(width)
make.height.equalTo(11.5)
})
}
}
}
} else {
self.tagImageView.isHidden = true
}
self.iconImageView.setWebImageWithSubURLString(model.resource)
self.nameLabel.text = model.name
self.numLabel.text = "x \(model.total)"
}
func fus_setSelected(_ isSelected:Bool) {
if isSelected {
self.contentView.layer.borderColor = UIColor.fus_theme().cgColor
self.contentView.layer.borderWidth = 1
} else {
self.contentView.layer.borderWidth = 0
}
}
}
//
// FUSBackpackGiftView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/12/18.
//
import UIKit
import RxSwift
import RxCocoa
class FUSBackpackGiftView: FUSBaseView {
let giftList = BehaviorRelay<[FUSBackpackGiftModel]>(value: [])
let selectedGift = BehaviorRelay<Int>(value: 0)
let topTipLabel = UILabel(frame: .zero)
var collectionView:UICollectionView? = nil
let bottomView = UIView(frame: .zero)
let descLabel = UILabel(frame: .zero)
private let emptyView = FUSEmptyView(frame: .zero)
override init(frame: CGRect) {
super.init(frame: frame)
self.addSubview(self.topTipLabel)
self.topTipLabel.text = .fus_versionLocalString("背包礼物只能在直播间内送出")
self.topTipLabel.textColor = .fus_textColorMedium()
self.topTipLabel.font = .fus_themeFont(10)
self.topTipLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(17)
make.top.equalToSuperview()
make.height.equalTo(30)
}
self.bottomView.backgroundColor = .init(white: 1, alpha: 0.04)
self.addSubview(self.bottomView)
self.bottomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(70)
}
self.bottomView.backgroundColor = .init(hex: "#F1F0F0")
self.bottomView.addSubview(self.descLabel)
self.descLabel.textColor = .fus_textColorMedium()
self.descLabel.font = .fus_themeFont(12)
self.descLabel.numberOfLines = 3
self.descLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(16)
make.right.equalToSuperview().offset(-16)
}
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumInteritemSpacing = 5
layout.minimumLineSpacing = 5
layout.sectionInset = UIEdgeInsets(top: 0, left: 11, bottom: 11, right: 11)
let screenWidth = UIView.fus_screenW()
let itemWidthCount = CGFloat(4)
let leftRightInset = layout.sectionInset.left + layout.sectionInset.right
let itemWidthPadding = layout.minimumInteritemSpacing * (itemWidthCount - 1)
let itemWidth = Int((screenWidth - itemWidthPadding - leftRightInset) / itemWidthCount)
layout.itemSize = CGSize(width: itemWidth, height: itemWidth)
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor.clear
collectionView.showsHorizontalScrollIndicator = false
collectionView.register(FUSBackpackGiftCell.self, forCellWithReuseIdentifier: FUSBackpackGiftCell.cellIdentifer())
self.collectionView = collectionView
self.addSubview(collectionView)
collectionView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(self.topTipLabel.snp.bottom)
make.bottom.equalTo(self.bottomView.snp.top)
}
self.makeEmptyView()
self.fus_bindViewModel()
}
private func makeEmptyView() {
emptyView.isHidden = true
self.addSubview(emptyView)
emptyView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.height.equalTo(300)
make.centerY.equalToSuperview().offset(-20)
}
// var buttonTittle = ""
// if FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreShowSwitch == 1 {
// buttonTittle = .fus_versionLocalString("去%@商城").replacingOccurrences(of: "%@", with: FUSConfig.sharedInstanced().appConfigs.appName)
// self.emptyView.clickEmptyBtnAction = {
//
// let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl
// let webVC = FUSWKWebViewController()
// webVC.webUrlString = storeUrl
// webVC.hidesBottomBarWhenPushed = true
// UIViewController.fus_top()?.navigationController?.pushViewController(webVC, animated: true)
// }
// }
self.emptyView.fus_setEmptyViewIcon(.fus_emptyImg(), title: .fus_versionLocalString("暂无背包礼物"), buttonTittle: nil)
}
func fus_bindViewModel() {
guard let collectionView = collectionView else { return }
self.giftList.distinctUntilChanged().map{ $0.count == 0 }
.subscribe(onNext: {[weak self] isEmpty in
if isEmpty {
self?.emptyView.isHidden = false
self?.bottomView.isHidden = true
} else {
self?.emptyView.isHidden = true
self?.bottomView.isHidden = false
self?.selectedGift.accept(0)
}
}).disposed(by: disposeBag)
self.giftList.bind(to: collectionView.rx.items(cellIdentifier: FUSBackpackGiftCell.cellIdentifer(), cellType: FUSBackpackGiftCell.self)) { [weak self] index, model, cell in
cell.fus_setupWithModel(model)
cell.fus_setSelected(index == self?.selectedGift.value)
} .disposed(by: disposeBag)
collectionView.rx.itemSelected.subscribe(onNext: { [weak self] indexPath in
self?.selectedGift.accept(indexPath.row)
}).disposed(by: disposeBag)
self.selectedGift.subscribe(onNext: { [weak self] selectedindex in
self?.collectionView?.reloadData()
if (self?.giftList.value.count ?? 0) > selectedindex {
if let model = self?.giftList.value[selectedindex] {
self?.descLabel.attributedText = model.fus_giftDescAttr()
}
}
}).disposed(by: disposeBag)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//
// FUSBackpackMotorCell.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/12/18.
//
import UIKit
class FUSBackpackMotorCell: UICollectionViewCell {
static func cellIdentifer() -> String {
return NSStringFromClass(FUSBackpackMotorCell.self)
}
let bgImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_motor_bg_img"))
let lightImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_motor_light"))
let bottomLightImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_motor_bottom_light"))
let wearImageView = UIImageView(image: .fus_secretIcon())
let timeLabel = UILabel(frame: .zero)
let timeUnitLabel = UILabel(frame: .zero)
let tagImageView = YYAnimatedImageView(frame: .zero)
let iconImageView = YYAnimatedImageView(frame: .zero)
let audioImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_motor_audio_icon"))
let effectImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_motor_effect_icon"))
let activeStateLabel = UILabel(frame: .zero)
let audioImageViewWidth = 12.0
override init(frame: CGRect) {
super.init(frame: frame)
self.contentView.layer.cornerRadius = 5;
// self.contentView.layer.masksToBounds = true
self.contentView.addSubview(self.bgImageView)
self.bgImageView.snp.makeConstraints { make in
make.top.bottom.left.right.equalToSuperview()
}
self.contentView.addSubview(self.lightImageView)
self.lightImageView.snp.makeConstraints { make in
make.top.bottom.left.right.equalToSuperview()
}
self.contentView.addSubview(self.bottomLightImageView)
self.iconImageView.contentMode = .scaleAspectFit
self.contentView.addSubview(self.iconImageView)
self.iconImageView.snp.makeConstraints { make in
make.width.width.equalToSuperview().multipliedBy(0.6)
make.centerX.equalToSuperview()
make.centerY.equalToSuperview()
}
self.bottomLightImageView.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.bottom.equalToSuperview().offset(-18)
make.width.equalTo(self.iconImageView.snp.width)
make.height.equalTo( self.bottomLightImageView.snp.width).multipliedBy(42.5 / 150.5)
}
self.contentView.addSubview(self.audioImageView)
self.audioImageView.snp.makeConstraints { make in
make.bottom.equalToSuperview().offset(-9)
make.left.equalToSuperview().offset(9)
make.width.height.equalTo(audioImageViewWidth)
}
self.contentView.addSubview(self.effectImageView)
self.effectImageView.snp.makeConstraints { make in
make.centerY.equalTo(self.audioImageView.snp.centerY)
make.left.equalTo(self.audioImageView.snp.right).offset(5)
make.width.height.equalTo(audioImageViewWidth)
}
self.timeUnitLabel.font = .fus_themeMediumFont(8)
self.timeUnitLabel.textColor = .fus_theme()
self.contentView.addSubview(self.timeUnitLabel)
self.timeUnitLabel.snp.makeConstraints { make in
make.centerY.equalTo(self.audioImageView.snp.centerY)
make.right.equalToSuperview().offset(-7.5)
}
self.timeLabel.font = .init(name: "YZB-NUMBER", size: 12)
self.timeLabel.textColor = .fus_theme()
self.contentView.addSubview(self.timeLabel)
self.timeLabel.snp.makeConstraints { make in
make.lastBaseline.equalTo(self.timeUnitLabel.snp.lastBaseline)
make.right.equalTo(self.timeUnitLabel.snp.left)
}
self.tagImageView.contentMode = .scaleAspectFit
self.contentView.addSubview(self.tagImageView)
self.tagImageView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.top.equalTo(-7)
make.height.equalTo(20)
}
self.contentView.addSubview(self.wearImageView)
self.wearImageView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-8)
make.top.equalToSuperview().offset(8)
make.width.height.equalTo(18)
}
self.activeStateLabel.font = .fus_themeFont(9)
self.activeStateLabel.textColor = .init(white: 1, alpha: 0.4)
self.contentView.addSubview(self.activeStateLabel)
self.activeStateLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(8)
make.right.equalToSuperview().offset(-7)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func fus_setupWithModel(_ model:FUSBackpackMotorModel, isSelected:Bool) {
let min = model.expiretime / 60
let hour = min / 60
let day = hour / 24
var time = ""
var timeUnit = ""
var timeColor = UIColor.fus_theme()
if day > 0 {
time = String(day)
timeUnit = .fus_versionLocalString("天")
} else if hour > 0 {
time = String(hour)
timeUnit = .fus_versionLocalString("小时Unit")
} else {
time = String(min)
timeUnit = .fus_versionLocalString("分钟")
}
if day > 3 {
timeColor = UIColor.fus_theme()
} else {
timeColor = .init(hex: "#F24D1A")
}
self.timeUnitLabel.text = timeUnit
self.timeLabel.text = time
self.timeLabel.textColor = timeColor
if isValidString(model.tag) {
self.tagImageView.isHidden = false
self.tagImageView.autoPlayAnimatedImage = true
self.tagImageView.setWebImageWithSubURLString(model.tag, placeholder: .init()) {[weak self] image, url, fromType, stage, error in
if error == nil {
guard let self = self else { return }
if let image = image {
let width = 30.0 / image.size.height * image.size.width
self.tagImageView.snp.remakeConstraints({ make in
make.top.equalTo(-7)
make.left.equalToSuperview()
make.height.equalTo(30)
make.width.equalTo(width)
})
}
}
}
} else {
self.tagImageView.isHidden = true
}
//座驾动图
self.iconImageView.setWebImageWithSubURLString(model.resource)
// FUSGiftDataCenter里面的才是真的,FUSCacheDataShare里面那个没什么卵用
if let motor = FUSGiftDataCenter.shared().motorGiftDict[String(model.mid)] as? FUSMotorDataModel {
if let audioresource = motor.audioresource{
self.audioImageView.isHidden = false
}else {
self.audioImageView.isHidden = true
}
if isValidString(motor.darkRes) {
self.effectImageView.isHidden = false
if self.audioImageView.isHidden == false {
self.effectImageView.snp.remakeConstraints { make in
make.centerY.equalTo(self.audioImageView.snp.centerY)
make.left.equalTo(self.audioImageView.snp.right).offset(5)
make.width.height.equalTo(audioImageViewWidth)
}
} else {
self.effectImageView.snp.remakeConstraints { make in
make.top.left.bottom.right.equalTo(self.audioImageView)
}
}
} else {
self.effectImageView.isHidden = true
}
}
self.wearImageView.isHidden = !model.status
self.activeStateLabel.isHidden = model.status
self.activeStateLabel.text = model.state == true ? String.fus_versionLocalString("已激活") : String.fus_versionLocalString("未激活")
self.lightImageView.isHidden = !isSelected
self.bottomLightImageView.isHidden = !isSelected
if isValidString(model.background) {
self.bgImageView.setWebImageWithSubURLString(model.background)
} else {
self.bgImageView.image = FUSUserCenterBunble.imageNamed("backpack_motor_bg_img")
}
}
}
//
// FUSBackpackMotorView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/12/18.
//
import UIKit
import RxSwift
import RxCocoa
class FUSBackpackMotorView: FUSBaseView {
let motorList = BehaviorRelay<[FUSBackpackMotorModel]>(value: [])
var viewModel:FUSBackpackViewModel?
let selectedMotor = BehaviorRelay<Int>(value: 0)
var collectionView:UICollectionView? = nil
let bottomView = UIView(frame: .zero)
let motorNameLabel = UILabel(frame: .zero)
let statusLabel = UILabel(frame: .zero)
let descLabel = UILabel(frame: .zero)
let useBtn = FUSStyleButton(type: .custom)
private let emptyView = FUSEmptyView(frame: .zero)
override init(frame: CGRect) {
super.init(frame: frame)
self.bottomView.backgroundColor = .init(white: 1, alpha: 0.04)
self.addSubview(self.bottomView)
self.bottomView.snp.makeConstraints { make in
make.bottom.left.right.equalToSuperview()
make.height.equalTo(70)
}
self.useBtn.setTitle(.fus_versionLocalString("装配"), for: .normal)
self.useBtn.titleLabel?.font = .fus_themeMediumFont(15)
self.useBtn.style = .blue
self.useBtn.rx.tap.subscribe(onNext: { [weak self] _ in
let selectedIndex = self?.selectedMotor.value ?? 0
if selectedIndex < 0 || (self?.motorList.value.count ?? 0) <= selectedIndex { return }
if let model = self?.motorList.value[selectedIndex] {
self?.viewModel?.fus_selectedMotor(model)
}
}).disposed(by: disposeBag)
self.bottomView.addSubview(self.useBtn)
self.useBtn.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-23)
make.width.equalTo(80)
make.height.equalTo(38)
}
self.bottomView.backgroundColor = .init(hex: "#F1F0F0")
self.bottomView.addSubview(self.statusLabel)
self.statusLabel.textColor = .fus_textColorMedium()
self.statusLabel.font = .fus_themeFont(11)
self.statusLabel.snp.makeConstraints { make in
make.centerY.equalTo(self.useBtn.snp.centerY)
make.left.equalToSuperview().offset(25)
make.right.equalTo(self.useBtn.snp.left).offset(8)
}
self.bottomView.addSubview(self.motorNameLabel)
self.motorNameLabel.textColor = .fus_textColorRich()
self.motorNameLabel.font = .fus_themeFont(14)
self.motorNameLabel.snp.makeConstraints { make in
make.bottom.equalTo(self.statusLabel.snp.top).offset(-2)
make.left.equalTo(self.statusLabel.snp.left)
make.right.equalTo(self.statusLabel.snp.right)
}
self.bottomView.addSubview(self.descLabel)
self.descLabel.textColor = .fus_textColorMedium()
self.descLabel.font = .fus_themeFont(11)
self.descLabel.snp.makeConstraints { make in
make.top.equalTo(self.statusLabel.snp.bottom).offset(2)
make.left.equalTo(self.statusLabel.snp.left)
make.right.equalTo(self.statusLabel.snp.right)
}
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
layout.minimumInteritemSpacing = 4.5
layout.minimumLineSpacing = 5
layout.sectionInset = UIEdgeInsets(top: 13, left: 13, bottom: 13, right: 13)
let screenWidth = UIView.fus_screenW()
let itemWidthCount = CGFloat(2)
let leftRightInset = layout.sectionInset.left + layout.sectionInset.right
let itemWidthPadding = layout.minimumInteritemSpacing * (itemWidthCount - 1)
let itemWidth = Int((screenWidth - itemWidthPadding - leftRightInset) / itemWidthCount)
layout.itemSize = CGSize(width: itemWidth, height: itemWidth)
let collectionView = UICollectionView(frame: frame, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor.clear
collectionView.showsHorizontalScrollIndicator = false
collectionView.register(FUSBackpackMotorCell.self, forCellWithReuseIdentifier: FUSBackpackMotorCell.cellIdentifer())
self.collectionView = collectionView
self.addSubview(collectionView)
collectionView.snp.makeConstraints { make in
make.top.left.right.equalToSuperview()
make.bottom.equalTo(self.bottomView.snp.top)
}
self.makeEmptyView()
self.fus_bindViewModel()
}
private func makeEmptyView() {
emptyView.isHidden = true
self.addSubview(emptyView)
emptyView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.height.equalTo(300)
make.centerY.equalToSuperview().offset(-20)
}
// var buttonTittle = ""
// if FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreShowSwitch == 1 {
// buttonTittle = .fus_versionLocalString("去%@商城").replacingOccurrences(of: "%@", with: FUSConfig.sharedInstanced().appConfigs.appName)
// self.emptyView.clickEmptyBtnAction = {
//
// let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl
// let webVC = FUSWKWebViewController()
// webVC.webUrlString = storeUrl
// webVC.hidesBottomBarWhenPushed = true
// UIViewController.fus_top()?.navigationController?.pushViewController(webVC, animated: true)
// }
// }
self.emptyView.fus_setEmptyViewIcon(.fus_emptyImg(), title: .fus_versionLocalString("暂无座驾"), buttonTittle: nil)
}
func fus_bindViewModel() {
guard let collectionView = collectionView else { return }
self.motorList.map{ $0.count == 0 }
.subscribe(onNext: {[weak self] isEmpty in
if isEmpty {
self?.emptyView.isHidden = false
self?.bottomView.isHidden = true
} else {
self?.emptyView.isHidden = true
self?.bottomView.isHidden = false
// if let currentSelected = self?.selectedMotor.value {
// /// 刷新一下当前选中
// self?.selectedMotor.accept(currentSelected)
// }
/// 列表改变了之后选择回归0
self?.selectedMotor.accept(0)
}
}).disposed(by: disposeBag)
self.motorList.bind(to: collectionView.rx.items(cellIdentifier: FUSBackpackMotorCell.cellIdentifer(), cellType: FUSBackpackMotorCell.self)) { [weak self] index, model, cell in
cell.fus_setupWithModel(model, isSelected: index == self?.selectedMotor.value)
} .disposed(by: disposeBag)
collectionView.rx.itemSelected.subscribe(onNext: { [weak self] indexPath in
self?.selectedMotor.accept(indexPath.row)
}).disposed(by: disposeBag)
self.selectedMotor.subscribe(onNext: { [weak self] selectedindex in
self?.collectionView?.reloadData()
if (self?.motorList.value.count ?? 0) > selectedindex {
if let model = self?.motorList.value[selectedindex] {
self?.motorNameLabel.text = model.name
if model.state == true {
self?.statusLabel.text = .fus_versionLocalString("已激活")
self?.descLabel.text = "\(String.fus_versionLocalString("有效期至")) \(model.expireFullTime)"
} else {
self?.statusLabel.text = .fus_versionLocalString("未激活")
self?.descLabel.text = "\(String.fus_versionLocalString("有效期:"))\(model.fus_expiretimeStr())\(model.fus_expiretimeUnit())"
}
if model.status == true {
self?.useBtn.setTitle(.fus_versionLocalString("已装配"), for: .normal)
self?.useBtn.isEnabled = false
} else {
self?.useBtn.setTitle(.fus_versionLocalString("装配"), for: .normal)
self?.useBtn.isEnabled = true
}
}
}
}).disposed(by: disposeBag)
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
//
// FUSBackpackPropsCell.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/12/18.
//
import UIKit
class FUSBackpackPropsCell: UICollectionViewCell {
static func cellIdentifer() -> String {
return NSStringFromClass(FUSBackpackPropsCell.self)
}
let bgImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_item_bg_img"))
let timeImageView = UIImageView(image: FUSUserCenterBunble.imageNamed("backpack_time_icon"))
let timeLabel = UILabel(frame: .zero)
let tagImageView = UIImageView(frame: .zero)
let iconImageView = UIImageView(frame: .zero)
let nameLabel = UILabel(frame: .zero)
let numLabel = UILabel(frame: .zero)
override init(frame: CGRect) {
super.init(frame: frame)
self.contentView.layer.cornerRadius = 8;
self.contentView.layer.masksToBounds = true
self.addSubview(self.bgImageView)
self.bgImageView.snp.makeConstraints { make in
make.top.left.equalToSuperview().offset(-1)
make.bottom.right.equalToSuperview().offset(1)
}
self.iconImageView.contentMode = .scaleAspectFit
self.contentView.addSubview(self.iconImageView)
self.iconImageView.snp.makeConstraints { make in
make.width.equalToSuperview().multipliedBy(0.55)
make.centerX.equalToSuperview()
make.centerY.equalToSuperview().offset(-5)
}
self.contentView.addSubview(self.timeImageView)
self.timeLabel.font = .fus_themeMediumFont(8)
self.timeLabel.textColor = .fus_textColorMedium()
self.contentView.addSubview(self.timeLabel)
self.timeImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(4)
make.top.equalToSuperview().offset(5)
make.width.height.equalTo(8)
}
self.timeLabel.snp.makeConstraints { make in
make.centerY.equalTo(self.timeImageView.snp.centerY)
make.left.equalTo(self.timeImageView.snp.right).offset(3)
}
self.contentView.addSubview(self.tagImageView)
self.tagImageView.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-5)
make.top.equalToSuperview().offset(5)
make.width.equalTo(28.5)
make.height.equalTo(13)
}
self.nameLabel.font = .fus_themeBoldFont(8)
self.nameLabel.numberOfLines = 2
self.nameLabel.textAlignment = .center
self.nameLabel.textColor = .fus_textColorRich()
self.contentView.addSubview(self.nameLabel)
self.nameLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(2)
make.right.equalToSuperview().offset(-2)
make.bottom.equalToSuperview().offset(-14)
}
self.numLabel.font = .fus_themeMediumFont(8)
self.numLabel.textAlignment = .center
self.numLabel.textColor = .fus_textColorMedium()
self.contentView.addSubview(self.numLabel)
self.numLabel.snp.makeConstraints { make in
make.left.equalTo(self.nameLabel.snp.left)
make.right.equalTo(self.nameLabel.snp.right)
make.top.equalTo(self.nameLabel.snp.bottom).offset(-1)
}
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func ff_setupWithModel(_ model:FUSBackpackPropsModel) {
let min = model.lastExpir / 60
let hour = min / 60
let day = hour / 24
var time = ""
var timeStr = ""
var timeColor = UIColor.init(hex: "#7F7F80")
if day > 0 {
time = String(day)
timeStr = "\(time) \(String.fus_versionLocalString("天"))"
timeColor = .init(hex: "#7F7F80")
} else if hour > 0 {
time = String(hour)
timeStr = "\(time) \(String.fus_versionLocalString("小时Unit"))"
timeColor = .init(hex: "#e84f4c")
} else {
time = String(min)
timeStr = "\(time) \(String.fus_versionLocalString("分钟Unit"))"
timeColor = .init(hex: "#e84f4c")
}
let timeAttr = NSMutableAttributedString(string: timeStr, attributes: [.font:UIFont.fus_themeMediumFont(8) ?? .systemFont(ofSize: 8),.foregroundColor:UIColor.init(hex: "#7F7F80") ?? .gray])
if let range = timeStr.range(of: time) {
timeAttr.addAttribute(.foregroundColor, value: timeColor ?? .gray, range: NSRange(range, in: timeStr))
}
self.timeLabel.attributedText = timeAttr
if isValidString(model.tag) {
self.tagImageView.isHidden = false
self.tagImageView.setWebImageWithSubURLString(model.tag, placeholder: .init()) {[weak self] image, url, fromType, stage, error in
if error == nil {
if let size = image?.size {
let width = 13 / size.height * size.width
self?.tagImageView.snp.remakeConstraints({ make in
make.right.equalToSuperview().offset(-5)
make.top.equalToSuperview().offset(5)
make.width.equalTo(width)
make.height.equalTo(13)
})
}
}
}
} else {
self.tagImageView.isHidden = true
}
self.iconImageView.setWebImageWithSubURLString(model.resource)
self.nameLabel.text = model.name
self.numLabel.text = "x \(model.total)"
}
func ff_setSelected(_ isSelected:Bool) {
if isSelected {
self.contentView.layer.borderColor = UIColor.fus_theme().cgColor
self.contentView.layer.borderWidth = 1
} else {
self.contentView.layer.borderWidth = 0
}
}
}
......@@ -11,7 +11,7 @@ import RxCocoa
class FUSBackpackPropsView: FUSBaseView {
let propsList = BehaviorRelay<[FUSBackpackPropsModel]>(value: [])
public let propsList = BehaviorRelay<[FUSBackpackPropsModel]>(value: [])
var viewModel:FUSBackpackViewModel?
let selectedProps = BehaviorRelay<Int>(value: 0)
var collectionView:UICollectionView? = nil
......@@ -23,24 +23,22 @@ class FUSBackpackPropsView: FUSBaseView {
/// 无数据的文案
var emptyStr:String = .fus_versionLocalString("暂无道具") {
didSet {
var buttonTittle = ""
if FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreShowSwitch == 1 {
buttonTittle = .fus_versionLocalString("去%@商城").replacingOccurrences(of: "%@", with: FUSConfig.sharedInstanced().appConfigs.appName)
self.emptyView.clickEmptyBtnAction = {
if let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl {
let webVC = FUSWKWebViewController()
webVC.webUrlString = storeUrl
webVC.hidesBottomBarWhenPushed = true
UIViewController.fus_top()?.navigationController?.pushViewController(webVC, animated: true)
}
}
}
self.emptyView.fus_setEmptyViewIcon(.emptyIcon, title: emptyStr, buttonTittle: buttonTittle)
// var buttonTittle = ""
// if FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreShowSwitch == 1 {
// buttonTittle = .fus_versionLocalString("去%@商城").replacingOccurrences(of: "%@", with: FUSConfig.sharedInstanced().appConfigs.appName)
// self.emptyView.clickEmptyBtnAction = {
// let storeUrl = FUSCacheDataShare.shareStore().settingInitDataModel.platformStoreBuyUrl
// let webVC = FUSWKWebViewController()
// webVC.webUrlString = storeUrl
// webVC.hidesBottomBarWhenPushed = true
// UIViewController.fus_top()?.navigationController?.pushViewController(webVC, animated: true)
// }
// }
self.emptyView.fus_setEmptyViewIcon(UIImage.fus_emptyImg(), title: emptyStr, buttonTittle: nil)
}
}
private let emptyView = FFEmptyView(frame: .zero)
private let emptyView = FUSEmptyView(frame: .zero)
override init(frame: CGRect) {
super.init(frame: frame)
......@@ -53,15 +51,15 @@ class FUSBackpackPropsView: FUSBaseView {
make.height.equalTo(70)
}
self.useBtn.setTitle(.localString("使用"), for: .normal)
self.useBtn.titleLabel?.font = .ff_defaultMedium(15)
self.useBtn.style = .gradientLeftToRight
self.useBtn.setTitle(.fus_versionLocalString("使用"), for: .normal)
self.useBtn.titleLabel?.font = .fus_themeMediumFont(15)
self.useBtn.style = .blue
self.useBtn.rx.tap.subscribe(onNext: { [weak self] _ in
guard let self = self else { return }
let selectedIndex = self.selectedProps.value
if selectedIndex < 0 || self.propsList.value.count <= selectedIndex { return }
let model = self.propsList.value[selectedIndex]
self.viewModel?.ff_selectedUseProps(model)
self.viewModel?.fus_selectedUseProps(model)
}).disposed(by: disposeBag)
self.bottomView.addSubview(self.useBtn)
......@@ -73,9 +71,10 @@ class FUSBackpackPropsView: FUSBaseView {
make.height.equalTo(38)
}
self.bottomView.backgroundColor = .init(hex: "#F1F0F0")
self.bottomView.addSubview(self.descTitleLabel)
self.descTitleLabel.textColor = .white
self.descTitleLabel.font = .ff_default(14)
self.descTitleLabel.textColor = .fus_textColorRich()
self.descTitleLabel.font = .fus_themeFont(14)
self.descTitleLabel.snp.makeConstraints { make in
make.bottom.equalTo(self.useBtn.snp.centerY).offset(-2)
......@@ -84,8 +83,8 @@ class FUSBackpackPropsView: FUSBaseView {
}
self.bottomView.addSubview(self.descSubTitleLabel)
self.descSubTitleLabel.textColor = .hexColor("#727272")
self.descSubTitleLabel.font = .ff_default(11)
self.descSubTitleLabel.textColor = .fus_textColorLight2()
self.descSubTitleLabel.font = .fus_themeFont(11)
self.descSubTitleLabel.numberOfLines = 2
self.descSubTitleLabel.snp.makeConstraints { make in
......@@ -100,7 +99,7 @@ class FUSBackpackPropsView: FUSBaseView {
layout.minimumInteritemSpacing = 5
layout.minimumLineSpacing = 5
layout.sectionInset = UIEdgeInsets(top: 11, left: 11, bottom: 11, right: 11)
let screenWidth = YAScreen.width
let screenWidth = UIView.fus_screenW()
let itemWidthCount = CGFloat(4)
let leftRightInset = layout.sectionInset.left + layout.sectionInset.right
let itemWidthPadding = layout.minimumInteritemSpacing * (itemWidthCount - 1)
......@@ -111,7 +110,7 @@ class FUSBackpackPropsView: FUSBaseView {
collectionView.backgroundColor = UIColor.clear
collectionView.showsHorizontalScrollIndicator = false
collectionView.register(FFBackpackPropsCell.self, forCellWithReuseIdentifier: FFBackpackPropsCell.cellIdentifer())
collectionView.register(FUSBackpackPropsCell.self, forCellWithReuseIdentifier: FUSBackpackPropsCell.cellIdentifer())
self.collectionView = collectionView
self.addSubview(collectionView)
......@@ -152,7 +151,7 @@ class FUSBackpackPropsView: FUSBaseView {
}
}).disposed(by: disposeBag)
self.propsList.bind(to: collectionView.rx.items(cellIdentifier: FFBackpackPropsCell.cellIdentifer(), cellType: FFBackpackPropsCell.self)) { [weak self] index, model, cell in
self.propsList.bind(to: collectionView.rx.items(cellIdentifier: FUSBackpackPropsCell.cellIdentifer(), cellType: FUSBackpackPropsCell.self)) { [weak self] index, model, cell in
cell.ff_setupWithModel(model)
cell.ff_setSelected(index == self?.selectedProps.value)
} .disposed(by: disposeBag)
......
......@@ -29,7 +29,6 @@
#import "FUSNewsFeedDetailViewController.h"
#import "FUSNewsFeedListViewController.h"
#import "FUSMyZoneViewController.h"
#import "FUSMotoringWareHouseViewController.h"
#import "FUSZoneTaskCenterViewController.h"
#import "FUSSettingViewController.h"
#import "FUSPhoneAuthViewController.h"
......@@ -173,7 +172,7 @@
- (void)fus_enterMotorWareVC {
FUSMotoringWareHouseViewController *motorVC = [[FUSMotoringWareHouseViewController alloc] init];
FUSBackpackViewController *motorVC = [[FUSBackpackViewController alloc] init];
[[UIViewController fus_topViewController].navigationController pushViewController:motorVC animated:YES];
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment