Commit 2fcde0af by ludi

需要添加一个pod 'SJAttributesStringMaker' #富文本Swift,这个版本还不能编译,仅仅是为了pod之前保存

parent 4ec51edf
Showing with 1206 additions and 7 deletions
//
// FUSSettingDataModel.h
// FUSCommon
//
// Created by aaa on 2024/11/23.
//
#import <FUSFoundation/FUSFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface FUSSettingDataModel : FUSBaseModel
/// 隐身状态(1:隐身功能关闭、 2:隐身功能打开)
@property (nonatomic, assign) NSInteger hideStatus;
/// 直播状态(0:未在直播、1:视频直播中、2:语音直播中)
@property (nonatomic, assign) NSInteger liveState;
/// 用户定位状态(0:开启,1:关闭)
@property (nonatomic, assign) NSInteger locatState;
/// 连麦分成比例(例如:0.00)
@property (nonatomic, assign) CGFloat micDivide;
/// 设置悬浮最小化开关(0:关闭、1:开启)
@property (nonatomic, assign) BOOL minimizeState;
/// 是否已发布过免费的视频动态(0:否、1:是)
@property (nonatomic, assign) BOOL publishNotTollVideoTotal;
/// 是否已发布过视频动态(0:否、1:是)
@property (nonatomic, assign) BOOL publishVideoTotal;
/// 可邀请分享次数
@property (nonatomic, assign) NSInteger shareTotal;
/// 签名状态(0:未填写,1:已填写)
@property (nonatomic, assign) BOOL signState;
/// IM是否直接收亲密好友消息(陌生人消息控制开关)(0:开启、1:关闭)
@property (nonatomic, assign) BOOL strangerState;
/// 虚拟漂流瓶状态(0:开启,1:关闭)
@property (nonatomic, assign) BOOL virtualState;
@end
NS_ASSUME_NONNULL_END
//
// FUSSettingDataModel.m
// FUSCommon
//
// Created by aaa on 2024/11/23.
//
#import "FUSSettingDataModel.h"
@implementation FUSSettingDataModel
@end
//
// FUSUserManagerVoiceSignModel.h
// FUSUserCenterModule
//
// Created by aaa on 2024/11/21.
//
#import <FUSFoundation/FUSFoundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface FUSUserManagerVoiceSignModel : FUSBaseModel
/// 语音签名URL
@property (nonatomic, copy) NSString *url;
/// 语音时长(秒)
@property (nonatomic, assign) CGFloat duration;
/// 语音审核状态 -1:未通过 0:待审核 1:已审核
@property (nonatomic, assign) int status;
@end
NS_ASSUME_NONNULL_END
......@@ -15,6 +15,83 @@ import UIKit
}
/// 跳转系统设置界面
@objc public static func jumpToSystemSetting() {
if let url = URL(string: UIApplication.openSettingsURLString) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(url)
}
}
}
// MARK: 相册权限
/// 简易获取当前是否已经可用
@objc public static var isAlbumEnable: Bool { albumStatus == .authorized }
/// 获取当前相册权限
@objc public static var albumStatus: PHAuthorizationStatus {
return PHPhotoLibrary.authorizationStatus()
}
/// 请求相册权限
@objc public static func getAlbumPermission(_ handler: @escaping (Bool) -> Void) {
if isAlbumEnable {
handler(isAlbumEnable)
return
}
PHPhotoLibrary.requestAuthorization { (_) in
DispatchQueue.main.async {
handler(isAlbumEnable)
}
}
}
// MARK: 相机权限
/// 简易获取相机是否已经可用
@objc public static var isCameraEnable: Bool { cameraStatus == .authorized }
/// 获取当前相机权限
@objc public static var cameraStatus: AVAuthorizationStatus {
AVCaptureDevice.authorizationStatus(for: .video)
}
/// 请求相机权限
/// - Parameter handler:
@objc public static func getCameraPermission(_ handler: @escaping (Bool) -> Void) {
if isCameraEnable {
handler(isCameraEnable)
return
}
AVCaptureDevice.requestAccess(for: .video) { (_) in
DispatchQueue.main.async {
handler(isCameraEnable)
}
}
}
// MARK: 麦克风权限
/// 麦克风是否可用
@objc public static var isMicEnable: Bool { micStatus == .granted }
/// 麦克风权限
@objc public static var micStatus: AVAudioSession.RecordPermission { AVAudioSession.sharedInstance().recordPermission }
/// 请求麦克风权限
/// - Parameter handler:
@objc public static func getMicPermission(_ handler: @escaping (Bool) -> Void) {
if isMicEnable {
handler(isMicEnable)
} else {
AVAudioSession.sharedInstance().requestRecordPermission { (granted) in
DispatchQueue.main.async {
handler(granted)
}
}
}
}
// MARK: 位置权限
@objc public static var isLocationEnable: Bool {
return (CLLocationManager.authorizationStatus() == .authorizedAlways) ||
(CLLocationManager.authorizationStatus() == .authorizedWhenInUse)
}
// MARK: 推送
/// 检测推送是否开启
/// - Parameter handler: 返回是否开启
......
//
// FUSBaseView.swift
// FUSCommon
//
// Created by aaa on 2024/11/22.
//
import UIKit
import RxSwift
@objcMembers open class FUSBaseView: FUSOCBaseView {
/// 垃圾袋
public let disposeBag = DisposeBag()
/// 复用垃圾袋
public var reuseDisposeBag = DisposeBag()
}
//
// FUSOCBaseView.h
// FUSCommon
//
// Created by aaa on 2024/11/22.
//
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface FUSOCBaseView : UIView
- (void)makeUI;
- (void)bindViewModel;
@end
NS_ASSUME_NONNULL_END
//
// FUSOCBaseView.m
// FUSCommon
//
// Created by aaa on 2024/11/22.
//
#import "FUSOCBaseView.h"
@implementation FUSOCBaseView
- (instancetype)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[self makeUI];
[self bindViewModel];
}
return self;
}
- (void)makeUI {
}
- (void)bindViewModel {
}
@end
......@@ -21,6 +21,7 @@
#import "FUSLiveStartConfigModel.h"
#import "FUSZoneInfosModel.h"
#import "FUSOnetoOneCheckQualificationModel.h"
#import "FUSSettingDataModel.h"
@interface FUSCacheDataShare : NSObject
......
......@@ -11,6 +11,7 @@
#import "FUSChatPublicDefine.h"
#import "FUSCommonUDKeys.h"
#import <FUSCommon/FUSCommon-Swift.h>
@implementation FUSCacheDataShare
......
//
// FUSSwiftCacheDataShare.swift
// FUSCommon
//
// Created by aaa on 2024/11/23.
//
import UIKit
import RxCocoa
import RxSwift
@objcMembers open class FUSSwiftCacheDataShare: NSObject {
public static let share: FUSSwiftCacheDataShare = .init()
// - OC PART
/// 用户设置,现在暂时只做了部分属性的跟踪,如定位,其他属性需要做到的时候补全
@objc public var oc_settingData:FUSSettingDataModel?{
get{ FUSSwiftCacheDataShare.share.settingData.value }
set{ FUSSwiftCacheDataShare.share.settingData.accept(oc_settingData) }
}
// - swift PART
/// 用户设置,现在暂时只做了部分属性的跟踪,如定位,其他属性需要做到的时候补全
public let settingData: BehaviorRelay<FUSSettingDataModel?> = .init(value: nil)
}
......@@ -61,6 +61,9 @@
#import "FUSUserInfosModel.h"
#import "FUSOnetoOneCheckQualificationModel.h"
#import "FUSCallTimeIncomeModel.h"
#import "FUSOCBaseView.h"
#import "FUSSettingDataModel.h"
#import "FUSUserManagerVoiceSignModel.h"
#import "FUSAliOSSModel.h"
#import "FUSAliOSSUploadFileModel.h"
#import "FUSMomentCreateModel.h"
......
//
// FUSDate.swift
// FUSFoundation
//
// Created by aaa on 2024/11/23.
//
import UIKit
public extension Date {
/// 获取当前 秒级 时间戳 - 10位
var timeStamp : String {
let timeInterval: TimeInterval = self.timeIntervalSince1970
let timeStamp = Int(timeInterval)
return "\(timeStamp)"
}
/// 获取当前 毫秒级 时间戳 - 13位
var milliStamp : String {
let timeInterval: TimeInterval = self.timeIntervalSince1970
let millisecond = CLongLong(round(timeInterval*1000))
return "\(millisecond)"
}
/// 获取今日日期:2020-07-08
var todayString: String {
// 格式化
let formatter = DateFormatter()
// 设置格式
formatter.dateFormat = "yyyy-MM-dd"
return formatter.string(from: Date())
}
}
......@@ -7,12 +7,12 @@
<key>FUSChatCenterBundle.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>71</integer>
<integer>74</integer>
</dict>
<key>FUSChatCenterModule.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>72</integer>
<integer>71</integer>
</dict>
</dict>
</dict>
......
......@@ -7,12 +7,12 @@
<key>FUSShowRoomBundle.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>75</integer>
<integer>76</integer>
</dict>
<key>FUSShowRoomModule.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>76</integer>
<integer>75</integer>
</dict>
</dict>
</dict>
......
......@@ -7,12 +7,12 @@
<key>FUSUserCenterModule.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>73</integer>
<integer>72</integer>
</dict>
<key>FUSUserCenterModuleBundle.xcscheme_^#shared#^_</key>
<dict>
<key>orderHint</key>
<integer>74</integer>
<integer>73</integer>
</dict>
</dict>
</dict>
......
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "personalPage_completeUserInfo_voiceRecordAgain@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "personalPage_completeUserInfo_voiceRecordAgain@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "personalPage_completeUserInfo_voiceRecordSubmit@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "personalPage_completeUserInfo_voiceRecordSubmit@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
{
"images" : [
{
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "voice_sign_record_card_bg_img@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "voice_sign_record_card_bg_img@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
//
// FUSCompleteUserInfoViewController.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/22.
//
import UIKit
import RxSwift
import RxCocoa
protocol FUSCompleteUserInfoBaseProtocol {
func fus_setupModel(model: FUSCompleteUserInfoViewModel)
func fus_viewWillDisappear(_ animated: Bool)
func fus_viewWillAppear(_ animated: Bool)
}
class FUSCompleteUserInfoViewController: FUSBaseViewController {
/// OC用,设置type:0=web, 1=privateCall
public func ff_setControllerType(type: Int) {
self.type = FFCompleteUserInfoType(rawValue: type) ?? .web
}
public var type: FFCompleteUserInfoType = .web
let editContentView = UIView()
let lastStepBtn = UIButton(type: .custom)
let nextStepBtn = FUSStyleButton(type: .custom)
let nextStepEnableMask: UIView = .init()
private let progressBgView = UIView()
private let progressView = UIView()
private var progressPointList: Array<FUSCompleteUserInfoProgressPointView> = .init()
let progressViewWidth = UIView.fus_screenW() - 52.0 * 2.0
/// 当前进度
private var currentProgress: BehaviorRelay<Int> = .init(value: 0)
/// 控制模型
let viewModel = FUSCompleteUserInfoViewModel()
override func viewDidLoad() {
super.viewDidLoad()
self.title = .fus_versionLocalString("完成个人资料")
makeUI()
}
func makeUI(){
// self.view.backgroundColor = .fus_appBG()
// self.viewModel.type = self.type
//
// lastStepBtn.isHidden = true
// lastStepBtn.setTitle(.localString("上一步"), for: .normal)
// lastStepBtn.setTitleColor(.hexColor("#999999"), for: .normal)
// lastStepBtn.titleLabel?.font = .ff_default(19)
// self.view.addSubview(lastStepBtn)
// lastStepBtn.snp.makeConstraints { make in
// make.left.right.equalToSuperview().inset(30)
// make.bottom.equalTo(self.view.safeAreaLayoutGuide.snp.bottom).offset(-8)
// make.height.equalTo(54)
// }
//
// nextStepBtn.setTitle(.localString("下一步"), for: .normal)
// nextStepBtn.setTitleColor(.hexColor("#22222B"), for: .normal)
// nextStepBtn.titleLabel?.font = .ff_default(19)
// nextStepBtn.style = .gradientLeftToRight
// nextStepBtn.layer.cornerRadius = 54.0 / 2.0
// self.view.addSubview(nextStepBtn)
// nextStepBtn.snp.makeConstraints { make in
// make.left.right.equalToSuperview().inset(30)
// make.bottom.equalTo(lastStepBtn.snp.top)
// make.height.equalTo(54)
// }
//
// nextStepEnableMask.layer.cornerRadius = nextStepBtn.layer.cornerRadius
// nextStepEnableMask.layer.masksToBounds = true
// nextStepEnableMask.backgroundColor = UIColor.hexColor("000000").withAlphaComponent(0.5)
// nextStepEnableMask.isUserInteractionEnabled = false
// nextStepBtn.addSubview(nextStepEnableMask)
// nextStepEnableMask.snp.makeConstraints { make in
// make.edges.equalToSuperview()
// }
//
// progressBgView.backgroundColor = .white.withAlphaComponent(0.1)
// self.view.addSubview(progressBgView)
// progressBgView.snp.makeConstraints { make in
// make.centerX.equalToSuperview()
// make.bottom.equalTo(nextStepBtn.snp.top).offset(-40)
// make.height.equalTo(4)
// make.width.equalTo(progressViewWidth)
// }
//
// progressView.backgroundColor = .themeSubColor
// progressView.frame = CGRectMake(0, 0, 0, 4)
// progressBgView.addSubview(progressView)
//
// let pointCount = self.viewModel.stageModelList.value.count
// for index in 0..<pointCount {
//
// let pointView = FFCompleteUserInfoProgressPointView(frame: CGRectMake(0, 0, 9, 9))
// pointView.center = CGPointMake(progressViewWidth / Double(pointCount - 1) * Double(index), 2)
// progressBgView.addSubview(pointView)
//
// self.progressPointList.append(pointView)
// }
//
// self.view.addSubview(editContentView)
// editContentView.snp.makeConstraints { make in
// make.left.right.top.equalToSuperview()
// make.bottom.equalTo(progressBgView.snp.top).offset(-16)
// }
//
// self.ff_makeContentView()
}
}
/// 一个圆点的view
class FUSCompleteUserInfoProgressPointView: FUSBaseView {
let pointView = UIView()
public func ff_setColor(color: UIColor) {
pointView.backgroundColor = color
self.layer.borderColor = color.cgColor
}
override func makeUI() {
self.backgroundColor = .fus_appBG()
pointView.backgroundColor = .init(hex: "#999999")
self.addSubview(pointView)
pointView.snp.makeConstraints { make in
make.left.top.right.bottom.equalToSuperview().inset(2);
}
self.layer.borderColor = UIColor.init(hex: "#999999").cgColor
self.layer.borderWidth = 1;
}
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.height / 2.0
pointView.layer.cornerRadius = (self.height - 4) / 2.0
}
}
//
// FUSCompleteUserInfoAvatarView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/23.
//
import UIKit
class FUSCompleteUserInfoAvatarView: FUSBaseView {
/// 点击上传
var clickedUploadHandler:(() -> Void)?
let bgScrollView = UIScrollView()
let contentView = UIView()
let messageLabel = UILabel()
let avatarBtn = UIButton(type: .custom)
let uploadBtn = UIButton(type: .custom)
let uploadRedDot = UIView()
let exampleLeftAvatarImgView = UIImageView(image: UIImage.fus_defaultIcon())
override func makeUI() {
super.makeUI()
self.layer.masksToBounds = true
self.backgroundColor = .fus_appBG()
bgScrollView.showsHorizontalScrollIndicator = false
self.addSubview(bgScrollView)
bgScrollView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
bgScrollView.addSubview(contentView)
contentView.snp.makeConstraints { make in
make.edges.equalToSuperview()
make.width.equalTo(bgScrollView.snp.width)
}
// self.ff_setProgress(progress: 0)
// self.lastStepBtn.isHidden = true
messageLabel.font = .fus_themeFont(14)
messageLabel.textColor = .fus_textColorLight2()
// messageLabel.text = .localString("您只需花30秒完成一下信息的补充,即可获得FIREFLY新星认定,并获得相关专属的推荐。根据历史经验,您个人信息越真实,获得的关注者会越多。")
messageLabel.text = .fus_versionLocalString("您只需花30秒完成一下个人资料的补充,即可解锁私房价格的设定。")
messageLabel.numberOfLines = 0;
contentView.addSubview(messageLabel)
messageLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(14)
make.left.right.equalToSuperview().inset(26)
}
avatarBtn.layer.cornerRadius = 104.0 / 2.0
avatarBtn.layer.masksToBounds = true
avatarBtn.isUserInteractionEnabled = false
avatarBtn.imageView?.contentMode = .scaleAspectFit
contentView.addSubview(avatarBtn)
avatarBtn.snp.makeConstraints { make in
make.top.equalTo(messageLabel.snp.bottom).offset(28)
make.centerX.equalToSuperview()
make.size.equalTo(CGSizeMake(104, 104))
}
let uploadBtnTitle = String.fus_versionLocalString("上传头像")
let uploadBtnTitleSize = uploadBtnTitle.size(with: .fus_themeFont(17), maxWidth: 414, maxHeight: 20)
uploadBtn.layer.cornerRadius = 36.0 / 2.0
uploadBtn.layer.borderColor = UIColor.fus_theme().cgColor
uploadBtn.layer.borderWidth = 1;
uploadBtn.setTitle(.fus_versionLocalString("上传头像"), for: .normal)
uploadBtn.setTitleColor(.fus_theme(), for: .normal)
uploadBtn.titleLabel?.font = .fus_themeFont(17)
contentView.addSubview(uploadBtn)
uploadBtn.snp.makeConstraints { make in
make.top.equalTo(avatarBtn.snp.bottom).offset(18)
make.centerX.equalToSuperview()
make.size.equalTo(CGSizeMake(uploadBtnTitleSize.width + 42, 36))
}
uploadRedDot.backgroundColor = .red
uploadRedDot.layer.cornerRadius = 5.0 / 2.0
contentView.addSubview(uploadRedDot)
uploadRedDot.snp.makeConstraints { make in
make.centerX.equalTo(uploadBtn.snp.right)
make.centerY.equalTo(uploadBtn.snp.top)
make.size.equalTo(CGSizeMake(5, 5))
}
let bottomCenterView = UIView()
contentView.addSubview(bottomCenterView)
bottomCenterView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalTo(uploadBtn.snp.bottom).offset(20)
make.bottom.equalToSuperview().offset(-10)
}
let exampleTitleLabel = UILabel()
exampleTitleLabel.font = .fus_themeBoldFont(17)
exampleTitleLabel.textColor = .fus_textColorRich()
exampleTitleLabel.text = .fus_versionLocalString("封面示例(含真实头像)")
bottomCenterView.addSubview(exampleTitleLabel)
exampleTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(26)
make.top.equalToSuperview()
}
let exampleLineView = UIView()
exampleLineView.backgroundColor = .fus_line()
bottomCenterView.addSubview(exampleLineView)
exampleLineView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(24)
make.top.equalTo(exampleTitleLabel.snp.bottom).offset(14)
make.height.equalTo(1)
}
let exampleCenterView = UIView()
bottomCenterView.addSubview(exampleCenterView)
exampleCenterView.snp.makeConstraints { make in
make.top.equalTo(exampleLineView.snp.bottom).offset(28)
make.centerX.equalToSuperview()
make.bottom.equalToSuperview()
}
exampleLeftAvatarImgView.layer.cornerRadius = 72.0 / 2.0
exampleLeftAvatarImgView.layer.masksToBounds = true
exampleLeftAvatarImgView.contentMode = .scaleAspectFit
exampleCenterView.addSubview(exampleLeftAvatarImgView)
exampleLeftAvatarImgView.snp.makeConstraints { make in
make.left.right.equalToSuperview()
make.top.equalToSuperview().offset(14)
make.size.equalTo(CGSizeMake(72, 72))
}
let exampleLeftAvatarTitleLabel = UILabel()
exampleLeftAvatarTitleLabel.font = .fus_themeFont(14)
exampleLeftAvatarTitleLabel.textColor = .fus_textColorRich()
exampleLeftAvatarTitleLabel.text = .fus_versionLocalString("真实头像样式")
exampleCenterView.addSubview(exampleLeftAvatarTitleLabel)
exampleLeftAvatarTitleLabel.snp.makeConstraints { make in
make.top.equalTo(exampleLeftAvatarImgView.snp.bottom).offset(12)
make.centerX.equalTo(exampleLeftAvatarImgView.snp.centerX)
}
}
override func bindViewModel() {
uploadBtn.rx.tap.subscribe(onNext: {[weak self] in
self?.clickedUploadHandler?()
}).disposed(by: disposeBag)
}
}
extension FUSCompleteUserInfoAvatarView: FUSCompleteUserInfoBaseProtocol{
func fus_setupModel(model: FUSCompleteUserInfoViewModel) {
model.editUserInfoModel.subscribe(onNext: {[weak self] editModel in
self?.avatarBtn.setBackgroundImageWith(.init(string: editModel.face?.ff_bigCdn ?? ""), for: .normal, placeholder: .fus_defaultIcon())
self?.exampleLeftAvatarImgView.setImageWith(.init(string: editModel.face?.ff_bigCdn ?? ""), placeholder: .fus_defaultIcon())
}).disposed(by: disposeBag)
model.avatarDidSet.subscribe(onNext: {[weak self] faceSet in
self?.uploadRedDot.isHidden = faceSet
}).disposed(by: disposeBag)
}
func fus_viewWillAppear(_ animated: Bool) {
}
func fus_viewWillDisappear(_ animated: Bool) {
}
}
//
// FUSCompleteUserInfoDetailView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/23.
//
import UIKit
class FUSCompleteUserInfoDetailView: FUSBaseView {
/// 点击回调:0.生日。1.身高。2.体重。
public var clickedHandler: ((_ index: Int) -> Void)?
/// 卡片列表
private var cellList:[FUSCompleteUserInfoDetailMessageView] = .init()
override func makeUI() {
self.backgroundColor = .fus_appBG()
let tipsLabel = UILabel()
tipsLabel.font = .fus_themeFont(14)
tipsLabel.textColor = .fus_textColorMedium()
tipsLabel.numberOfLines = 0
// tipsLabel.text = .localString("如果您要成为被FIREFLY推荐的新星,需要完成以下个人信息")
tipsLabel.text = .fus_versionLocalString("您只需花30秒完成一下个人资料的补充,即可解锁私房价格的设定。")
self.addSubview(tipsLabel)
tipsLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(14)
make.left.right.equalToSuperview().inset(26)
}
let cellBgView = UIView()
self.addSubview(cellBgView)
cellBgView.snp.makeConstraints { make in
make.top.equalTo(tipsLabel.snp.bottom).offset(4)
make.left.bottom.right.equalToSuperview()
}
let titleNameList = [String.fus_versionLocalString("生日"), .fus_versionLocalString("身高"), .fus_versionLocalString("体重")]
for (index, titleName) in titleNameList.enumerated() {
let tempView = FUSCompleteUserInfoDetailMessageView(frame: CGRectMake(0, Double(index) * 64.0, UIView.fus_screenW(), 64))
tempView.titleLabel.text = titleName
cellBgView.addSubview(tempView)
tempView.clickedHandler = {[weak self] in
self?.clickedHandler?(index)
}
cellList.append(tempView)
}
}
}
extension FUSCompleteUserInfoDetailView: FUSCompleteUserInfoBaseProtocol{
func fus_viewWillDisappear(_ animated: Bool) {
}
func fus_viewWillAppear(_ animated: Bool) {
}
func fus_setupModel(model: FUSCompleteUserInfoViewModel) {
model.editUserInfoModel.subscribe(onNext: {[weak self] editModel in
guard let self = self else { return }
for (index, tempView) in self.cellList.enumerated() {
if index == 0 {
if let birth = editModel.birth,
birth.count > 0 {
tempView.subTitleLabel.text = birth
tempView.subTitleLabel.isHidden = false
tempView.descLabel.isHidden = true
tempView.subDescLabel.isHidden = true
}else {
tempView.subTitleLabel.isHidden = true
tempView.descLabel.isHidden = false
tempView.subDescLabel.isHidden = false
}
}
else if index == 1 {
if let height = editModel.height,
height.count > 0 {
tempView.subTitleLabel.text = height + " cm"
}else {
tempView.subTitleLabel.text = "- cm"
}
}
else if index == 2 {
if let weight = editModel.weight,
weight.count > 0 {
tempView.subTitleLabel.text = weight + " kg"
}else {
tempView.subTitleLabel.text = "- kg"
}
}
}
}).disposed(by: disposeBag)
}
}
class FUSCompleteUserInfoDetailMessageView: FUSBaseView{
public var clickedHandler: (() -> Void)?
let tapBtn = UIButton(type: .custom)
let titleLabel = UILabel()
let subTitleLabel = UILabel()
let descLabel = UILabel()
let subDescLabel = UILabel()
override func makeUI() {
super.makeUI()
self.addSubview(tapBtn)
tapBtn.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
titleLabel.font = .fus_themeMediumFont(17)
titleLabel.textColor = .fus_textColorRich()
tapBtn.addSubview(titleLabel)
titleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20)
make.centerY.equalToSuperview()
}
let arrowView = UIImageView(image: .fus_rightArrowIcon())
tapBtn.addSubview(arrowView)
arrowView.snp.makeConstraints { make in
make.right.equalTo(-9)
make.centerY.equalToSuperview()
make.size.equalTo(CGSizeMake(20, 20))
}
subTitleLabel.font = .fus_themeFont(14)
subTitleLabel.textColor = .fus_textColorLight2()
tapBtn.addSubview(subTitleLabel)
subTitleLabel.snp.makeConstraints { make in
make.right.equalTo(arrowView.snp.left).offset(-6)
make.centerY.equalToSuperview()
}
descLabel.font = .fus_themeFont(14)
descLabel.textColor = .fus_textColorRich()
tapBtn.addSubview(descLabel)
descLabel.snp.makeConstraints { make in
make.right.equalTo(arrowView.snp.left).offset(-6)
make.centerY.equalToSuperview().offset(-10)
}
subDescLabel.font = .fus_themeFont(10)
subDescLabel.textColor = .fus_textColorLight2()
tapBtn.addSubview(subDescLabel)
subDescLabel.snp.makeConstraints { make in
make.right.equalTo(arrowView.snp.left).offset(-6)
make.centerY.equalToSuperview().offset(10)
}
let cellLine = UIView()
cellLine.backgroundColor = .fus_line()
tapBtn.addSubview(cellLine)
cellLine.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(22)
make.height.equalTo(0.5)
make.bottom.equalToSuperview()
}
descLabel.isHidden = true
subDescLabel.isHidden = true
descLabel.text = .fus_versionLocalString("生日未设置")
subDescLabel.text = .fus_versionLocalString("生日只能修改一次")
tapBtn.rx.tap.subscribe(onNext: {[weak self] in
self?.clickedHandler?()
}).disposed(by: disposeBag)
}
}
//
// FUSCompleteUserInfoLocationView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/23.
//
import UIKit
import RxCocoa
class FUSCompleteUserInfoLocationView: FUSBaseView {
let switchBtn = UISwitch(frame: .zero)
let switchState: BehaviorRelay<Bool> = .init(value: (FUSSwiftCacheDataShare.share.settingData.value?.locatState ?? 0) == 0)
override func makeUI() {
self.backgroundColor = .fus_appBG()
let tipsLabel = UILabel()
tipsLabel.font = .fus_themeFont(14)
tipsLabel.textColor = .fus_textColorMedium()
tipsLabel.numberOfLines = 0
// tipsLabel.text = .localString("如果您要成为被FIREFLY推荐的新星,需要完成以下个人信息")
tipsLabel.text = .fus_versionLocalString("您只需花30秒完成一下个人资料的补充,即可解锁私房价格的设定。")
self.addSubview(tipsLabel)
tipsLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(14)
make.left.right.equalToSuperview().inset(26)
}
let locationTitleLabel = UILabel()
locationTitleLabel.text = .fus_versionLocalString("定位")
locationTitleLabel.textColor = .fus_textColorRich()
locationTitleLabel.font = .fus_themeMediumFont(17)
self.addSubview(locationTitleLabel)
locationTitleLabel.snp.makeConstraints { make in
make.left.equalTo(26)
make.top.equalTo(tipsLabel.snp.bottom).offset(48)
}
switchBtn.onTintColor = .fus_theme()
self.addSubview(switchBtn)
switchBtn.snp.makeConstraints { make in
make.right.equalToSuperview().offset(-26)
make.centerY.equalTo(locationTitleLabel.snp.centerY)
}
let cellLineView = UIView()
cellLineView.backgroundColor = .fus_line()
self.addSubview(cellLineView)
cellLineView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(26)
make.top.equalTo(locationTitleLabel.snp.bottom).offset(28)
make.height.equalTo(0.5)
}
let messageLabel = UILabel()
messageLabel.font = .fus_themeFont(14)
messageLabel.textColor = .fus_textColorLight2()
messageLabel.text = .fus_versionLocalString("定位设置可以通过「我的」-「设置」-「账号安全设置」 -「隐私设置」进行开启")
messageLabel.numberOfLines = 0
self.addSubview(messageLabel)
messageLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(26)
make.top.equalTo(cellLineView.snp.bottom).offset(15)
}
}
override func bindViewModel() {
FUSSwiftCacheDataShare.share.settingData
.map({ ($0?.locatState ?? 0) == 0 })
.bind(to: switchBtn.rx.isOn)
.disposed(by: disposeBag)
switchBtn.rx.controlEvent(.valueChanged)
.subscribe(onNext: {[weak switchBtn] in
guard let isOn = switchBtn?.isOn else { return }
if FUSAuthCenter.isLocationEnable == false {
FUSAlertView.showAlert(withTitle: nil, message: .fus_versionLocalString("手机的位置服务未开放,无法使用此功能。请设置并允许Fusi访问位置信息"), cancelButtonTitle: .fus_localString("取消"), otherButtonTitles: [String.fus_versionLocalString("设置")]) { index in
if index == 1 {
FUSAuthCenter.jumpToSystemSetting()
}
}
switchBtn?.isOn = !isOn
return
}
FUSLoadingView.fus_showProgressView(withMessage: "", canTouchBottomView: true)
FUSZoneHttpRequest.fus_setUserLocationState(isOn ? "0" : "1") { dataDict, code in
FUSLoadingView.fus_dismissProgressView()
FUSCommonHttpRequest.fus_getCountryCode {
} failure: { msg in
}
} failure: { msg, code in
FUSLoadingView.fus_dismissProgressView()
}
}).disposed(by: disposeBag)
}
}
//
// FUSCompleteUserInfoNameView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/26.
//
import UIKit
class FUSCompleteUserInfoNameView: FUSBaseView {
/// 输入框完成输入回调
var textFieldEndEditHandler:((String) -> Void)?
let settingNickNameTextLabel = UILabel()
let editNameCardBtn = UIButton(type: .custom)
let nickNameTextField = FUSTextField()
override func makeUI() {
super.makeUI()
self.backgroundColor = .fus_appBG()
settingNickNameTextLabel.font = .fus_themeFont(17)
settingNickNameTextLabel.textColor = .fus_textColorRich()
settingNickNameTextLabel.text = .fus_versionLocalString("设定暱称")
self.addSubview(settingNickNameTextLabel)
settingNickNameTextLabel.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(26)
make.top.equalTo(20)
}
self.addSubview(editNameCardBtn)
editNameCardBtn.snp.makeConstraints { make in
make.left.equalTo(26)
make.top.equalTo(settingNickNameTextLabel.snp.bottom).offset(10)
}
editNameCardBtn.setAttributedTitle(.sj.makeText({ make in
make.append(.localString("修改暱称消耗")).textColor(.hexColor("#999999"))
make.append(" ")
make.append(.localString("改名卡")).textColor(.themeSubColor)
make.append(" ")
make.append("x1").textColor(.white)
make.font(.ff_default(14))
}), for: .normal)
let textFieldBgView = UIView()
textFieldBgView.backgroundColor = .textFieldBackgroundColorWhite
textFieldBgView.layer.cornerRadius = 8
textFieldBgView.layer.masksToBounds = true
self.addSubview(textFieldBgView)
textFieldBgView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(26)
make.top.equalTo(editNameCardBtn.snp.bottom).offset(10)
make.height.equalTo(54)
}
nickNameTextField.font = .ff_default(17)
nickNameTextField.textColor = .white
// nickNameTextField.ya_delegate = self
nickNameTextField.returnKeyType = .done
textFieldBgView.addSubview(nickNameTextField)
nickNameTextField.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(14)
make.top.bottom.equalToSuperview()
}
}
override func bindViewModel() {
super.bindViewModel()
self.nickNameTextField.text = Mediator.UserCenter?.userInfo.value?.nickname
NotificationCenter.default.rx.notification(UIResponder.keyboardWillHideNotification)
.subscribe(onNext: {[weak self] notifi in
self?.textFieldEndEditHandler?(self?.nickNameTextField.text ?? "")
}).disposed(by: disposeBag)
}
}
//
// FUSCompleteUserInfoSignView.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/23.
//
import UIKit
class FUSCompleteUserInfoSignView: FUSBaseView {
/// 输入框完成输入回调
var textViewEndEditHandler:((String) -> Void)?
let signTextView = FUSTextView(frame: CGRectMake(0, 0, UIView.fus_screenW() - 26*2 - 10*2, 104 - 12*2))
override func makeUI() {
self.backgroundColor = .fus_appBG()
let tipsLabel = UILabel()
tipsLabel.font = .fus_themeFont(14)
tipsLabel.textColor = .fus_textColorMedium()
tipsLabel.numberOfLines = 0
// tipsLabel.text = .localString("如果您要成为被FIREFLY推荐的新星,需要完成以下个人信息")
tipsLabel.text = .fus_versionLocalString("您只需花30秒完成一下个人资料的补充,即可解锁私房价格的设定。")
self.addSubview(tipsLabel)
tipsLabel.snp.makeConstraints { make in
make.top.equalToSuperview().offset(14)
make.left.right.equalToSuperview().inset(26)
}
let signTitleLabel = UILabel()
signTitleLabel.font = .fus_themeFont(17)
signTitleLabel.textColor = .fus_textColorRich()
signTitleLabel.text = .fus_versionLocalString("签名")
self.addSubview(signTitleLabel)
signTitleLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(26)
make.top.equalTo(tipsLabel.snp.bottom).offset(30)
}
let signBgView = UIView()
signBgView.backgroundColor = .white.withAlphaComponent(0.1)
signBgView.layer.cornerRadius = 8
self.addSubview(signBgView)
signBgView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(26)
make.top.equalTo(signTitleLabel.snp.bottom).offset(14)
make.height.equalTo(104)
}
signTextView.textMaxLength = 100
signTextView.backgroundColor = .clear
signTextView.font = .fus_themeFont(14)
signTextView.textColor = .fus_textColorRich()
signTextView.yzdelegate = self
signBgView.addSubview(signTextView)
signTextView.snp.makeConstraints { make in
make.left.right.equalToSuperview().inset(10)
make.top.bottom.equalToSuperview().inset(4)
}
}
}
extension FUSCompleteUserInfoSignView: FUSTextViewDelegate {
func textView(_ textView: FUSTextView!, shouldChangeTextIn range: NSRange, replacementText text: String!) -> Bool {
if text == "\n" {
self.endEditing(true)
}
return true
}
func textViewDidEndEditing(_ textView: FUSTextView!) {
self.textViewEndEditHandler?(self.signTextView.text)
}
}
extension FUSCompleteUserInfoSignView: FUSCompleteUserInfoBaseProtocol {
func fus_setupModel(model: FUSCompleteUserInfoViewModel) {
signTextView.text = model.editUserInfoModel.value.sign
}
func fus_viewWillDisappear(_ animated: Bool) {
}
func fus_viewWillAppear(_ animated: Bool) {
}
}
//
// FUSCompleteUserInfoViewModel.swift
// FUSUserCenterModule
//
// Created by aaa on 2024/11/22.
//
import UIKit
import RxSwift
import RxCocoa
public enum FFCompleteUserInfoType: Int {
case web = 0
case privateCall
/// 获取不同类型需要创建的view
// func ff_getClasssList() -> [UIView.Type] {
// switch self {
// case .web:
// return [FFCompleteUserInfoAvatarView.self, FFCompleteUserInfoDetailView.self, FFCompleteUserInfoSignView.self, FFCompleteUserInfoLocationView.self]
// case .privateCall:
// return [FFCompleteUserInfoNameView.self, FFCompleteUserInfoAvatarView.self, FFCompleteUserInfoDetailView.self, FFCompleteUserInfoSignView.self, FFCompleteUserInfoLocationView.self, FFCompleteUserInfoVoiceSignView.self]
// }
// }
}
class FUSCompleteUserInfoViewModel: NSObject {
public let userManagerVoiceSign: BehaviorRelay<FUSUserManagerVoiceSignModel?> = .init(value: nil)
}
......@@ -18,6 +18,7 @@
#import "FUSNewsFeedHttpHelper.h"
#import <FUSUserCenterModule/FUSUserCenterModule-Swift.h>
#import <FUSCommon/FUSCommon-Swift.h>
@interface FUSChatSettingViewController () <UITableViewDelegate,UITableViewDataSource>
......@@ -186,7 +187,7 @@
case 0: {
if (self.detailCompleteStage == -1) {
//TODO: 这里要写FFCompleteUserInfoViewController
//TODO: 这里要写FFCompleteUserInfoViewController 正在写
// FFCompleteUserInfoViewController *vc = [[FFCompleteUserInfoViewController alloc] init];
// [vc ff_setControllerTypeWithType:1];
// [[UIViewController topViewController].navigationController pushViewController:vc animated:YES];
......@@ -234,6 +235,9 @@
}
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_ZONE_GET_CONTROL_CONFIG params:@{@"userid":uid} success:^(NSDictionary *dataDict, int code) {
FUSSettingDataModel *model = [FUSSettingDataModel fus_modelWithDict:dataDict];
[FUSSwiftCacheDataShare share].oc_settingData = model;
// 是否发布过视频动态(0:否、1:是)
self.hasPublishVideo = [dataDict[@"publishVideoTotal"] boolValue];
// 是否已发布过免费的视频动态(0:否、1:是)
......
......@@ -13,6 +13,7 @@
#import "FUSLoginCacheOperate.h"
#import "FUSZoneHttpRequest.h"
#import "FUSCommonHttpRequest.h"
#import <FUSCommon/FUSCommon-Swift.h>
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
......@@ -62,6 +63,9 @@
[FUSZoneHttpRequest fus_setUserLocationState:[NSString stringWithFormat:@"%d",!item.currentSwitchState] Success:^(NSDictionary *dataDic, int code) {
int locatstate = [dataDic[@"locatstate"] intValue];
item.switchState = locatstate == 0 ? YES : NO;
FUSSettingDataModel *model = [FUSSwiftCacheDataShare share].oc_settingData;
model.locatState = [dataDic[@"locatstate"] integerValue];
[FUSSwiftCacheDataShare share].oc_settingData = model;
if (locatstate == 0) {
[[NSUserDefaults standardUserDefaults] setObject:@0 forKey:PRIVACY_SET_POSITION_STATE];
// 3.1.0 开播上传地理位置
......
......@@ -17,6 +17,7 @@
#import "FUSSettingChatInviteModel.h"
#import <FUSCommon/FUSCommon-Swift.h>
@implementation FUSSettingHttpRequest
......@@ -264,6 +265,9 @@
}
[FUSHttpHelper postRequestBinaryWithUrl:FUSUserCenterURLs.fus_URL_ZONE_GET_CONTROL_CONFIG params:@{@"userid":uid} success:^(NSDictionary *dataDict, int code) {
FUSSettingDataModel *model = [FUSSettingDataModel fus_modelWithDict:dataDict];
[FUSSwiftCacheDataShare share].oc_settingData = model;
BOOL hasOpenedVirtual = ![dataDict[@"virtualState"] boolValue];
BOOL hasOpenedLocat = ![dataDict[@"locatState"] boolValue];
BOOL hasOpenedStranger = ![dataDict[@"strangerState"] boolValue];
......
......@@ -31,6 +31,7 @@
#import "FUSGotBackpackItemAnimView.h"
#import "FUSUserCenterBunble.h"
#import "FUSUserCenterURLs.h"
#import "FUSSettingHttpRequest.h"
#endif /* FUSUserCenterOCHeader_h */
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