// // HomeVoicePublishView.swift // yinmeng-ios // // Created by yinmeng on 2024/2/29. // import UIKit import Nuke typealias ClickPublishBlock = ()->Void class HomeVoicePublishView: UIView { var clickPublishBlock:ClickPublishBlock? override init(frame: CGRect) { super.init(frame: frame) setUILayout() } func setUILayout(){ addSubview(backgroundView) addSubview(discView) addSubview(avatarView) addSubview(playBtn) addSubview(resetBtn) addSubview(publishView) backgroundView.snp.makeConstraints { make in make.edges.equalTo(self) } discView.snp.makeConstraints { make in make.left.equalTo(8) make.top.equalTo(4) make.width.height.equalTo(136) } avatarView.snp.makeConstraints { make in make.width.height.equalTo(58) make.center.equalTo(self.discView) } resetBtn.snp.makeConstraints { make in make.width.height.equalTo(44) make.right.equalTo(-44) make.top.equalTo(18) } playBtn.snp.makeConstraints { make in make.right.equalTo(self.resetBtn.snp.left).offset(-32) make.top.equalTo(18) make.width.height.equalTo(44) } publishView.snp.makeConstraints { make in make.top.equalTo(74) make.width.equalTo(168) make.height.equalTo(52) make.right.equalTo(-20) } discParser.parse(withNamed: "RecordPlayer", in: Bundle.main) {[weak self] videoItem in self?.discView.videoItem = videoItem self?.discView.loops = 100000; self?.discView.clearsAfterStop = false } failureBlock: { error in } publishParser.parse(withNamed: "PublishVoice", in: Bundle.main) {[weak self] videoItem in self?.publishView.videoItem = videoItem self?.publishView.loops = 100000; self?.publishView.startAnimation() } failureBlock: { error in } let tap = UITapGestureRecognizer(target: self, action: #selector(publishViewAction)) publishView.addGestureRecognizer(tap) } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } @objc func publishViewAction(){ guard let _clickPublishBlock = self.clickPublishBlock else { return } _clickPublishBlock() if playBtn.isSelected{ discView.stopAnimation() playBtn.isSelected = false PlayVoiceManager.shared.stopPlayVoice() } } @objc func playBtnAction(){ guard let _model = self.model else { HUDTool.show(with: "把头像拖至唱片机才可播放") return } self.playBtn.isSelected = !self.playBtn.isSelected if (self.playBtn.isSelected){ discView.startAnimation() PlayVoiceManager.shared.downloadVoice(url: _model.userVoice) return } discView.stopAnimation() PlayVoiceManager.shared.stopPlayVoice() } @objc func resetBtnAction(){ avatarView.image = nil model = nil discView.stopAnimation() PlayVoiceManager.shared.stopPlayVoice() } var backgroundView:UIImageView = { let _backgroundView = UIImageView() _backgroundView.image = UIImage(named: "yin_home_voice_publish_bg") _backgroundView.isUserInteractionEnabled = true return _backgroundView }() lazy var discView:SVGAImageView = { let _discView = SVGAImageView() _discView.contentMode = .scaleAspectFill return _discView }() private lazy var discParser:SVGAParser = { let _discParser = SVGAParser() return _discParser }() private lazy var publishView:SVGAImageView = { let _publishView = SVGAImageView() _publishView.contentMode = .scaleAspectFill _publishView.isUserInteractionEnabled = true return _publishView }() private lazy var publishParser:SVGAParser = { let _publishParser = SVGAParser() return _publishParser }() var resetBtn:UIButton = { let _resetBtn = UIButton() _resetBtn.setImage(UIImage(named: "yin_hoem_voice_publis_reset"), for: .normal) _resetBtn.addTarget(self, action: #selector(resetBtnAction), for: .touchUpInside) return _resetBtn }() var playBtn:UIButton = { let _playBtn = UIButton() _playBtn.setImage(UIImage(named: "yin_hoem_voice_publis_play"), for: .selected) _playBtn.setImage(UIImage(named: "yin_hoem_voice_publis_no_play"), for: .normal) _playBtn.addTarget(self, action: #selector(playBtnAction), for: .touchUpInside) return _playBtn }() var avatarView:UIImageView = { let _avatarView = UIImageView() _avatarView.isUserInteractionEnabled = true _avatarView.layer.cornerRadius = 58/2; _avatarView.layer.masksToBounds = true _avatarView.layer.borderWidth = 2 _avatarView.layer.borderColor = UIColor.white.cgColor return _avatarView }() var model:HomeVoiceModel? = nil{ didSet{ guard let _model = model else { return } Nuke.loadImage(with: _model.avatar, into:avatarView) discView.startAnimation() PlayVoiceManager.shared.downloadVoice(url: _model.userVoice) playBtn.isSelected = true } } }