| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248 |
- //
- // KeyboardFunctionPopView.swift
- // AiKeyboard
- //
- // Created by Destiny on 2025/4/23.
- //
- import UIKit
- class KeyboardFunctionPopView: UIView {
-
- var selectClosure: ((KeyboardType) -> Void)?
-
- var buttons = [UIButton]()
-
- var selectType: KeyboardType? {
- didSet {
- self.updateUI()
- }
- }
-
- lazy var contentView: UIView = {
-
- let view = UIView()
- view.isHidden = true
- view.backgroundColor = .white
- view.layer.cornerRadius = 16
- return view
- }()
-
- lazy var selectFuncView: UIView = {
-
- let view = UIView()
-
- view.isUserInteractionEnabled = true
- let tap = UITapGestureRecognizer(target: self, action: #selector(closeButtonTapped))
- view.addGestureRecognizer(tap)
- return view
- }()
-
- lazy var selectFuncLabel: UILabel = {
-
- let label = UILabel()
- label.text = "帮聊"
- label.font = .boldSystemFont(ofSize: 12)
- label.textColor = .hexStringColor(hexString: "#000000", alpha: 0.8)
- return label
- }()
-
- lazy var arrowIcon: UIImageView = {
-
- let icon = UIImageView()
- icon.image = UIImage(named: "icon_arrow_up")
- return icon
- }()
-
- lazy var funcHelpBtn: UIButton = {
-
- let btn = UIButton()
- btn.tag = 0
- btn.isSelected = true
- btn.setBackgroundImage(UIImage(named: "keyboard_func_select_bg"), for: .selected)
- btn.setTitle("帮聊", for: .normal)
- btn.setTitleColor(.hexStringColor(hexString: "#000000", alpha: 0.8), for: .normal)
- btn.titleLabel?.font = UIFont.boldSystemFont(ofSize: 12)
- btn.addTarget(self, action: #selector(functionBtnTapped(_:)), for: .touchUpInside)
- return btn
- }()
-
- lazy var funcTeachBtn: UIButton = {
-
- let btn = UIButton()
- btn.tag = 1
- btn.setBackgroundImage(UIImage(named: "keyboard_func_select_bg"), for: .selected)
- btn.setTitle("教你说", for: .normal)
- btn.setTitleColor(.hexStringColor(hexString: "#000000", alpha: 0.8), for: .normal)
- btn.titleLabel?.font = UIFont.systemFont(ofSize: 12)
- btn.addTarget(self, action: #selector(functionBtnTapped(_:)), for: .touchUpInside)
- return btn
- }()
-
- lazy var funcPrologueBtn: UIButton = {
-
- let btn = UIButton()
- btn.tag = 2
- btn.setBackgroundImage(UIImage(named: "keyboard_func_select_bg"), for: .selected)
- btn.setTitle("开场白", for: .normal)
- btn.setTitleColor(.hexStringColor(hexString: "#000000", alpha: 0.8), for: .normal)
- btn.titleLabel?.font = UIFont.systemFont(ofSize: 12)
- btn.addTarget(self, action: #selector(functionBtnTapped(_:)), for: .touchUpInside)
- return btn
- }()
-
- override init(frame: CGRect) {
- super.init(frame: frame)
- setUI()
- setupTapGesture()
-
- buttons = [funcHelpBtn, funcTeachBtn, funcPrologueBtn]
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- class func show(view: UIView, selectType: KeyboardType, selectClosure: @escaping (KeyboardType) -> Void) {
-
- let window = KeyboardFunctionPopView(frame: CGRect(x: 0, y: 0, width: KeyboardConst.kb_kScreenW, height: KeyboardConst.kb_kScreenH))
- window.selectClosure = selectClosure
- window.selectType = selectType
- window.layer.shadowColor = UIColor.hexStringColor(hexString: "#AEB2FF").cgColor
- window.layer.shadowOpacity = 0.4
- window.layer.shadowOffset = CGSize(width: 0, height: 0)
- window.layer.shadowRadius = 8.3
- view.addSubview(window)
- window.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- UIView.animate(withDuration: 0.4, delay: 0, usingSpringWithDamping: 0.95, initialSpringVelocity: 0.05) {
- window.contentView.isHidden = false
- }
- }
- }
- extension KeyboardFunctionPopView {
-
- @objc func closeButtonTapped() {
- self.removeFromSuperview()
- }
-
- @objc func functionBtnTapped(_ sender: UIButton) {
-
- for button in buttons {
- button.isSelected = false
- }
- sender.isSelected = true
- self.selectClosure?(KeyboardType(rawValue: sender.tag) ?? .teach)
- self.closeButtonTapped()
- }
- }
- extension KeyboardFunctionPopView: UIGestureRecognizerDelegate {
-
- // 添加点击手势识别器
- private func setupTapGesture() {
- let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleBackgroundTap(_:)))
- tapGesture.delegate = self
- self.addGestureRecognizer(tapGesture)
- }
-
- // MARK: - Actions
- @objc private func handleBackgroundTap(_ gesture: UITapGestureRecognizer) {
- let location = gesture.location(in: self)
- if !contentView.frame.contains(location) {
- self.closeButtonTapped()
- }
- }
-
- func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool {
- // 确保点击事件不是发生在containerView上
- let location = touch.location(in: self)
- return !contentView.frame.contains(location)
- }
- }
- extension KeyboardFunctionPopView {
-
- func updateUI() {
-
- switch self.selectType {
- case .help:
- self.selectFuncLabel.text = "帮聊"
- break
- case .teach:
- self.selectFuncLabel.text = "教你说"
- break
- case .prologue:
- self.selectFuncLabel.text = "开场白"
- break
- default:
- break
- }
-
- for button in buttons {
- if button.tag == self.selectType?.rawValue ?? 0 {
- button.isSelected = true
- button.titleLabel?.font = UIFont.boldSystemFont(ofSize: 12)
- } else {
- button.isSelected = false
- button.titleLabel?.font = UIFont.systemFont(ofSize: 12)
- }
- }
- }
-
- func setUI() {
-
- self.addSubview(contentView)
- contentView.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 85, height: 162))
- make.left.equalTo(55)
- make.top.equalTo(17)
- }
-
- contentView.addSubview(selectFuncView)
- selectFuncView.snp.makeConstraints { make in
- make.left.top.right.equalTo(0)
- make.height.equalTo(32)
- }
-
- selectFuncView.addSubview(selectFuncLabel)
- selectFuncLabel.snp.makeConstraints { make in
- make.left.equalTo(12)
- make.centerY.equalToSuperview()
- }
-
- selectFuncView.addSubview(arrowIcon)
- arrowIcon.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 18, height: 18))
- make.centerY.equalToSuperview()
- make.right.equalTo(-5)
- }
-
- contentView.addSubview(funcHelpBtn)
- funcHelpBtn.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 81, height: 32))
- make.left.equalTo(2)
- make.right.equalTo(-2)
- make.top.equalTo(selectFuncView.snp.bottom).offset(9)
- }
-
- contentView.addSubview(funcTeachBtn)
- funcTeachBtn.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 81, height: 32))
- make.left.equalTo(2)
- make.right.equalTo(-2)
- make.top.equalTo(funcHelpBtn.snp.bottom).offset(8)
- }
-
- contentView.addSubview(funcPrologueBtn)
- funcPrologueBtn.snp.makeConstraints { make in
- make.size.equalTo(CGSize(width: 81, height: 32))
- make.left.equalTo(2)
- make.right.equalTo(-2)
- make.top.equalTo(funcTeachBtn.snp.bottom).offset(8)
- }
- }
- }
|