import UIKit public class PlayerView: UIView { private let titleLabel: UILabel = UILabel() private let langLabel: UILabel = UILabel() private let cnLabel: UILabel = UILabel() private let enLabel: UILabel = UILabel() private let stackView: UIStackView public override init(frame: CGRect) { stackView = UIStackView() super.init(frame: frame) setupUI() } public convenience init() { self.init(frame: .zero) } required init?(coder: NSCoder) { stackView = UIStackView() super.init(coder: coder) setupUI() } private func setupUI() { backgroundColor = .white titleLabel.text = "实时翻译" titleLabel.font = .boldSystemFont(ofSize: 22) titleLabel.textColor = .black titleLabel.textAlignment = .center titleLabel.numberOfLines = 1 langLabel.text = "中文(简体) -> 英语" langLabel.font = .systemFont(ofSize: 14) langLabel.textColor = .darkGray langLabel.textAlignment = .left langLabel.numberOfLines = 1 cnLabel.font = .systemFont(ofSize: 18) cnLabel.textColor = .black cnLabel.textAlignment = .left cnLabel.numberOfLines = 0 enLabel.font = .systemFont(ofSize: 18) enLabel.textColor = UIColor(red: 0.24, green: 0.54, blue: 0.90, alpha: 1.0) enLabel.textAlignment = .left enLabel.numberOfLines = 0 let para = NSMutableParagraphStyle() para.lineSpacing = 4 cnLabel.attributedText = NSAttributedString(string: "正在识别...", attributes: [.paragraphStyle: para]) enLabel.attributedText = NSAttributedString(string: "翻译中...", attributes: [.paragraphStyle: para]) stackView.axis = .vertical stackView.spacing = 12 stackView.alignment = .fill stackView.distribution = .fill stackView.translatesAutoresizingMaskIntoConstraints = false stackView.addArrangedSubview(titleLabel) stackView.addArrangedSubview(langLabel) stackView.addArrangedSubview(cnLabel) stackView.addArrangedSubview(enLabel) layoutMargins = UIEdgeInsets(top: 16, left: 16, bottom: 16, right: 16) addSubview(stackView) let guide = layoutMarginsGuide NSLayoutConstraint.activate([ stackView.topAnchor.constraint(equalTo: guide.topAnchor), stackView.leadingAnchor.constraint(equalTo: guide.leadingAnchor), stackView.trailingAnchor.constraint(equalTo: guide.trailingAnchor), stackView.bottomAnchor.constraint(lessThanOrEqualTo: guide.bottomAnchor), ]) } public func play() { } public func pause() { } public func update(withLang lang: String?, cn: String?, en: String?) { if let lang = lang { langLabel.text = lang } let para = NSMutableParagraphStyle() para.lineSpacing = 4 if let cn = cn { cnLabel.attributedText = NSAttributedString(string: cn, attributes: [.paragraphStyle: para]) } if let en = en { enLabel.attributedText = NSAttributedString(string: en, attributes: [.paragraphStyle: para]) } } }