| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- //
- // LNAboutViewController.swift
- // Lanu
- //
- // Created by OneeChan on 2025/12/22.
- //
- import Foundation
- import UIKit
- import SnapKit
- extension UIView {
- func pushToAbout() {
- let vc = LNAboutViewController()
- navigationController?.pushViewController(vc, animated: true)
- }
- }
- class LNAboutViewController: LNViewController {
- override func viewDidLoad() {
- super.viewDidLoad()
-
- setupViews()
- }
- }
- extension LNAboutViewController {
- private func setupViews() {
- title = .init(key: "A00247")
- view.backgroundColor = .primary_1
-
- let icon = UIImageView()
- icon.image = getAppIcon()
- icon.layer.cornerRadius = 16
- icon.clipsToBounds = true
- view.addSubview(icon)
- icon.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview().offset(40)
- make.width.height.equalTo(72)
- }
-
- let nameIc = UIImageView()
- nameIc.image = .icGami
- view.addSubview(nameIc)
- nameIc.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(icon.snp.bottom).offset(7)
- }
-
- var versionStr: String = .init(key: "A00248", curAppVersion)
-
- #if DEBUG
- versionStr += "(\(curBuildVersion))"
- #endif
-
- let versionLabel = UILabel()
- versionLabel.text = versionStr
- versionLabel.font = .body_s
- versionLabel.textColor = .text_5
- view.addSubview(versionLabel)
- versionLabel.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(nameIc.snp.bottom).offset(13)
- }
-
- let infoView = UIView()
- infoView.backgroundColor = .fill
- infoView.layer.cornerRadius = 12
- view.addSubview(infoView)
- infoView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview().inset(16)
- make.top.equalTo(versionLabel.snp.bottom).offset(40)
- }
-
- let stackView = UIStackView()
- stackView.axis = .vertical
- stackView.spacing = 26
- infoView.addSubview(stackView)
- stackView.snp.makeConstraints { make in
- make.edges.equalToSuperview().inset(16)
- }
-
- let privacy = buildFunctionItem(title: .init(key: "A00249"), infoView: nil)
- privacy.onTap { [weak self] in
- guard let self else { return }
- view.pushToWebView(LNJumpWebViewConfig.normalConfig(url: .privacyUrl))
- }
- stackView.addArrangedSubview(privacy)
-
- let service = buildFunctionItem(title: .init(key: "A00250"), infoView: nil)
- service.onTap { [weak self] in
- guard let self else { return }
- view.pushToWebView(LNJumpWebViewConfig.normalConfig(url: .serviceUrl))
- }
- stackView.addArrangedSubview(service)
-
- let social = buildFunctionItem(title: .init(key: "A00251"), infoView: nil)
- social.onTap { [weak self] in
- guard let self else { return }
- view.pushToWebView(LNJumpWebViewConfig.normalConfig(url: .communityUrl))
- }
- stackView.addArrangedSubview(social)
-
- let newVersion = LNNewVersionView()
- newVersion.isHidden = !LNAppConfig.shared.hasNewVersion
- let version = buildFunctionItem(title: .init(key: "A00252"), infoView: newVersion)
- version.onTap {
- if LNAppConfig.shared.hasNewVersion {
- LNAppConfig.shared.jumpToAppStore()
- } else {
- showToast(.init(key: "A00253"))
- }
- }
- stackView.addArrangedSubview(version)
- }
-
- private func buildFunctionItem(title: String, infoView: UIView?) -> UIView {
- let container = UIView()
-
- let arrow = UIImageView.arrowImageView(size: 14)
- arrow.tintColor = .text_4
- container.addSubview(arrow)
- arrow.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalToSuperview()
- }
-
- if let infoView {
- container.addSubview(infoView)
- infoView.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.trailing.equalTo(arrow.snp.leading).offset(-2)
- }
- }
-
- let titleLabel = UILabel()
- titleLabel.font = .body_s
- titleLabel.textColor = .text_5
- titleLabel.text = title
- container.addSubview(titleLabel)
- titleLabel.snp.makeConstraints { make in
- make.leading.equalToSuperview()
- make.verticalEdges.equalToSuperview()
- make.trailing.lessThanOrEqualTo((infoView ?? arrow).snp.leading)
- }
-
- return container
- }
-
- func getAppIcon() -> UIImage? {
- guard let infoPlist = Bundle.main.infoDictionary,
- let iconDict = infoPlist["CFBundleIcons"] as? [String: Any],
- let primaryIcon = iconDict["CFBundlePrimaryIcon"] as? [String: Any],
- let iconFiles = primaryIcon["CFBundleIconFiles"] as? [String],
- let lastIconName = iconFiles.last else {
- return nil
- }
-
- return UIImage(named: lastIconName)
- }
- }
|