Files
yingmeng-ios-switf/yinmeng-ios/Modules/Home/HomeVoiceVC.swift

360 lines
14 KiB
Swift
Raw Normal View History

2024-02-25 13:10:44 +08:00
//
// HomeVoiceVC.swift
// yinmeng-ios
//
2024-03-05 14:04:09 +08:00
// Created by yinmeng on 2024/2/25.
2024-02-25 13:10:44 +08:00
//
import UIKit
2024-03-01 16:54:46 +08:00
import NIMSDK
import Nuke
2024-02-28 19:01:10 +08:00
class HomeVoiceVC: BaseViewController,HiddenNavigationBarProtocol {
2024-03-01 16:54:46 +08:00
var myModel:HomeVoiceModel?
2024-03-07 18:33:08 +08:00
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
2024-03-08 10:09:08 +08:00
if publishView.playBtn.isSelected{
publishView.playBtnAction()
}
2024-03-07 18:33:08 +08:00
}
2024-02-25 13:10:44 +08:00
override func viewDidLoad() {
super.viewDidLoad()
2024-02-28 19:01:10 +08:00
setUILayout()
2024-03-01 16:54:46 +08:00
requestData()
requsetFansListData()
userInfoBtn.addTarget(self, action: #selector(userInfoBtnAction), for: .touchUpInside)
2024-03-01 21:03:59 +08:00
if (UserDefaults.standard.value(forKey:"kIsShowGuide") != nil){return}
UserDefaults.standard.setValue("yes", forKey: "kIsShowGuide")
let guideVeiw = HomeVoiceGuideView.init(frame: CGRect(x: 0, y: 0, width: ScreenWidth, height: ScreenHeight))
2024-03-05 14:04:09 +08:00
keyWindow.addSubview(guideVeiw)
2024-03-01 16:54:46 +08:00
}
@objc func userInfoBtnAction(){
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
guard let weakSelf = self else {
return
}
if type == 3{
let vc = UserPayViewController()
self?.navigationController?.pushViewController(vc, animated: true)
return
}
}
userInfoView.type = 1
userInfoView.model = self.myModel
self.view.addSubview(userInfoView)
userInfoView.snp.makeConstraints { make in
make.edges.equalTo(self.view)
}
}
func requsetFansListData(){
let uid = "\(AuthManager.userUid)"
RequestGet(path: "fans/following", parma: ["uid":uid,"pageNo":"1","pageSize":"50"]) { data in
if let list = Deserialized<HomeVoiceModel>.toArray(with: data) {
self.followView.modelList = list
}
} fail: { code, data in
print(code)
}
2024-02-25 13:10:44 +08:00
}
2024-02-28 19:01:10 +08:00
func setUILayout(){
2024-03-01 16:54:46 +08:00
2024-02-28 19:01:10 +08:00
view.addSubview(backgroundView)
2024-03-01 16:54:46 +08:00
view.addSubview(scrollView)
scrollView.addSubview(topLogoIcon)
scrollView.addSubview(chooseItemVeiw)
scrollView.addSubview(changeItemView)
scrollView.addSubview(userInfoBtn)
scrollView.addSubview(publishView)
scrollView.addSubview(bgPlayMusicView)
2024-02-28 19:01:10 +08:00
backgroundView.snp.makeConstraints { make in
make.edges.equalTo(self.view)
}
2024-03-01 16:54:46 +08:00
scrollView.snp.makeConstraints { make in
make.edges.equalTo(self.view)
}
2024-02-28 19:01:10 +08:00
topLogoIcon.snp.makeConstraints { make in
make.left.equalTo(20)
make.top.equalTo(14 + NavHeight)
make.width.equalTo(260)
make.height.equalTo(23)
}
chooseItemVeiw.snp.makeConstraints { make in
make.left.equalTo(20)
make.top.equalTo(self.topLogoIcon.snp.bottom).offset(18)
make.width.equalTo(61)
make.height.equalTo(27)
}
changeItemView.snp.makeConstraints { make in
make.left.equalTo(self.chooseItemVeiw.snp.right).offset(8)
make.top.height.equalTo(self.chooseItemVeiw)
make.width.equalTo(76)
}
userInfoBtn.snp.makeConstraints { make in
2024-03-01 16:54:46 +08:00
make.left.equalTo(ScreenWidth - 70)
2024-02-28 19:01:10 +08:00
make.height.equalTo(40)
make.width.equalTo(50)
make.centerY.equalTo(changeItemView)
}
2024-03-01 16:54:46 +08:00
bgPlayMusicView.snp.makeConstraints { make in
make.left.equalTo(14)
make.top.equalTo(self.chooseItemVeiw.snp.bottom).offset(10)
make.width.equalTo(ScreenWidth-28)
make.height.equalTo(424)
}
publishView.snp.makeConstraints { make in
make.left.equalTo(14)
make.top.equalTo(self.bgPlayMusicView.snp.bottom).offset(10)
make.width.equalTo(ScreenWidth-28)
make.height.equalTo(144)
}
publishView.superview?.layoutIfNeeded()
scrollView.contentSize = CGSize(width: ScreenWidth, height: publishView.frame.origin.y + publishView.frame.size.height)
let margin:CGFloat = (ScreenWidth - 90 * 3 - 28)/4
for i in 0..<9 {
let x = CGFloat((i % 3)) * (90.0 + margin) + margin
let y = CGFloat((i / 3)) * (114 + 16) + 24
let itemView = HomeVoicePlayMusicItemView(frame: CGRect(x: x, y: y, width: 90, height: 114))
let tap = UITapGestureRecognizer.init(target: self, action: #selector(clickAvatarAction(sender:)))
itemView.tag = i + 100
itemView.addGestureRecognizer(tap)
let longTap = UIPanGestureRecognizer(target: self, action: #selector(clickLongTapAction(sender:)))
itemView.addGestureRecognizer(longTap)
bgPlayMusicView.addSubview(itemView)
itemViewList.append(itemView)
}
let x = ScreenWidth - 28 - 44 - 3
followView.frame = CGRect(x:x , y: 3, width: 44, height: 418)
chooseTypeView.chooseTypeBlock = {[weak self] type in
guard let weakSelf = self else {
return
}
weakSelf.chooseItemVeiw.isChoose = false
weakSelf.gender = type == 0 ? "" : "\(type)"
weakSelf.requestData()
}
let tap = UITapGestureRecognizer(target: self, action: #selector(chooseItemAction))
chooseItemVeiw.addGestureRecognizer(tap)
let changeTap = UITapGestureRecognizer.init(target: self, action: #selector(changeItemAction))
changeItemView.addGestureRecognizer(changeTap)
bgPlayMusicView.addSubview(followView)
scrollView.addSubview(chooseTypeView)
2024-02-28 19:01:10 +08:00
chooseTypeView.snp.makeConstraints { make in
make.width.equalTo(64)
make.height.equalTo(107)
make.centerX.equalTo(self.chooseItemVeiw)
make.top.equalTo(self.changeItemView.snp.bottom)
}
2024-03-01 16:54:46 +08:00
followView.clickAvatarBlcok = {[weak self] model in
guard let weakSelf = self else {
return
}
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
let session = NIMSession("\(model.uid)", type: .P2P)
let chatVC = ChatVC.init(session: session)
self?.navigationController?.pushViewController(chatVC, animated: true)
}
userInfoView.model = model
weakSelf.view.addSubview(userInfoView)
userInfoView.snp.makeConstraints { make in
make.edges.equalTo(weakSelf.view)
}
}
publishView.clickPublishBlock = {[weak self] in
let recordView = HomeVoiceRecordView.init(frame: .zero)
recordView.myModel = self?.myModel
self?.view.addSubview(recordView)
recordView.snp.makeConstraints { make in
make.edges.equalTo((self?.view)!)
}
}
}
@objc func clickLongTapAction(sender:UIPanGestureRecognizer){
let i = (sender.view?.tag ?? 100) - 100
if sender.state == .began{
location = sender.view?.center
}else if sender.state == .changed{
let point = sender.location(in: self.view)
if (point.y < 0 || point.y > self.view.frame.size.height){return}
let changePoint = sender.translation(in: self.view)
let x = (sender.view?.center.x ?? 0) + changePoint.x
let y = (sender.view?.center.y ?? 0) + changePoint.y
sender.view?.center = CGPoint(x: x, y: y)
sender.setTranslation(.zero, in: self.view)
}else{
2024-02-28 19:01:10 +08:00
2024-03-01 16:54:46 +08:00
guard let centerPoint = sender.view?.center else{return}
let point = CGPoint(x: centerPoint.x + 14, y: centerPoint.y+136)
let minX:CGFloat = 33
let minY:CGFloat = 570
let maxX:CGFloat = 133
let maxY:CGFloat = 570 + 133
if point.x >= minX && point.x <= maxX && point.y >= minY && point.y <= maxY{
if let view = sender.view as? HomeVoicePlayMusicItemView ,let model = view.model{
publishView.model = model
}
}
if let location = self.location{
sender.view?.center = location
}
}
}
@objc func clickAvatarAction(sender:UITapGestureRecognizer){
guard let view = sender.view as? HomeVoicePlayMusicItemView else{
return
}
let userInfoView:HomeVoiceUserInfoView = HomeVoiceUserInfoView.init(frame: .zero)
userInfoView.clickBtnBlock = {[weak self] (type,model) in
let session = NIMSession("\(model.uid)", type: .P2P)
let chatVC = ChatVC.init(session: session)
self?.navigationController?.pushViewController(chatVC, animated: true)
}
userInfoView.model = view.model
self.view.addSubview(userInfoView)
userInfoView.snp.makeConstraints { make in
make.edges.equalTo(self.view)
2024-02-28 19:01:10 +08:00
}
2024-03-01 16:54:46 +08:00
}
@objc func changeItemAction(){
requestData()
makeRotationAnim(view: changeItemView.leftIconView)
}
func makeRotationAnim(view: UIView) {
// 1.
let rotationAnim = CABasicAnimation(keyPath: "transform.rotation.z")
// 2.
rotationAnim.fromValue = 0 //
rotationAnim.toValue = Double.pi * 2 //
rotationAnim.repeatCount = 2 //
rotationAnim.duration = 0.5
rotationAnim.autoreverses = false // ,NO
rotationAnim.isRemovedOnCompletion = true //truefalse
view.layer.add(rotationAnim, forKey: nil) // view
}
func requestData(){
RequestGet(path: "voiceShow/listRandom", parma: ["gender":gender]) { data in
guard let dic = data as? [String : Any]else {
return
}
let curData = dic["randomList"]
let myDic = dic["me"]
if let model = Deserialized<HomeVoiceModel>.toModel(with: myDic) {
self.myModel = model
}
if let list = Deserialized<HomeVoiceModel>.toArray(with: curData) {
for i in 0..<9 {
if i < list.count{
let view:HomeVoicePlayMusicItemView = self.itemViewList[i]
let model = list[i]
view.model = model
}
}
}
} fail: { code, data in
print(code)
}
2024-02-25 13:10:44 +08:00
}
2024-02-28 19:01:10 +08:00
@objc func chooseItemAction(){
chooseItemVeiw.isChoose = !chooseItemVeiw.isChoose
chooseTypeView.isHidden = !chooseItemVeiw.isChoose
}
2024-03-01 16:54:46 +08:00
var gender = ""
2024-02-28 19:01:10 +08:00
private lazy var backgroundView:UIImageView = {
let _backgroundView = UIImageView()
_backgroundView.image = UIImage(named: "yin_home_voice_bg")
_backgroundView.isUserInteractionEnabled = true
return _backgroundView
}()
var topLogoIcon:UIImageView = {
let _topLogoIcon = UIImageView()
_topLogoIcon.image = UIImage(named: "yin_home_voice_top_icon")
return _topLogoIcon
}()
var chooseItemVeiw:HomeVoiceChooseItemVeiw = {
let _chooseItemVeiw = HomeVoiceChooseItemVeiw(frame: .zero)
_chooseItemVeiw.image = "yin_home_voice_choose_icon"
_chooseItemVeiw.text = "筛选"
2024-03-01 16:54:46 +08:00
_chooseItemVeiw.isUserInteractionEnabled = true
2024-02-28 19:01:10 +08:00
return _chooseItemVeiw
}()
var changeItemView:HomeVoiceChooseItemVeiw = {
let _changeItemView = HomeVoiceChooseItemVeiw(frame: .zero)
_changeItemView.image = "yin_home_voice_change_icon"
_changeItemView.text = "换一换"
return _changeItemView
}()
2024-03-01 16:54:46 +08:00
2024-02-28 19:01:10 +08:00
var userInfoBtn:UIButton = {
let _userInfoBtn = UIButton()
_userInfoBtn.setBackgroundImage(UIImage(named: "yin_home_voice_user_info_bg"), for: .normal)
_userInfoBtn.setImage(UIImage(named: "yin_home_voice_user_info_icon"), for: .normal)
2024-03-01 16:54:46 +08:00
2024-02-28 19:01:10 +08:00
return _userInfoBtn
}()
var chooseTypeView:HomeVoiceChooseTypeView = {
let _chooseTypeView = HomeVoiceChooseTypeView(frame: .zero)
_chooseTypeView.isHidden = true
return _chooseTypeView
}()
2024-03-01 16:54:46 +08:00
var bgPlayMusicView:UIImageView = {
let _bgPlayMusicView = UIImageView()
_bgPlayMusicView.image = UIImage(named: "yin_home_voice_play_music_bg")
_bgPlayMusicView.isUserInteractionEnabled = true
return _bgPlayMusicView
}()
var scrollView:UIScrollView = {
let _scrollView = UIScrollView()
_scrollView.backgroundColor = .clear
return _scrollView
}()
var itemViewList:[HomeVoicePlayMusicItemView] = []
var followView:HomeVoiceFollowView = {
let _followView = HomeVoiceFollowView(frame: .zero)
return _followView
}()
var publishView:HomeVoicePublishView = {
let _publishView = HomeVoicePublishView(frame: .zero)
return _publishView
}()
var location:CGPoint?
2024-02-25 13:10:44 +08:00
}