Files
yingmeng-ios-switf/yinmeng-ios/Modules/Home/View/HomeVoicePublishView.swift

181 lines
5.6 KiB
Swift
Raw Normal View History

2024-03-01 16:54:46 +08:00
//
// HomeVoicePublishView.swift
// yinmeng-ios
//
2024-03-05 14:04:09 +08:00
// Created by yinmeng on 2024/2/29.
2024-03-01 16:54:46 +08:00
//
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
}
}
}