123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- //
- // TSDiyStyleElementView.swift
- // AIEmoji
- //
- // Created by nkl on 2025/7/31.
- //
- import Foundation
- class TSDiyStyleElementView: UIView, TSDiyVideoElement {
- var type: TSDiyVideoElementType {
- .style
- }
- var param: String {
- items.first { item in
- item.isSelected
- }?.type.param ?? TSDiyStyleType.general.param
- }
- lazy var titleLabel: UILabel = {
- let title: UILabel = .createLabel()
- title.text = type.sectionTitle
- title.textColor = .white.withAlphaComponent(0.8)
- title.font = .font(size: 14, weight: .medium)
- return title
- }()
- lazy var general: TSDiyStyleElementItem = {
- let gen = TSDiyStyleElementItem(type: .general)
- gen.isSelected = true
- return gen
- }()
- lazy var animation: TSDiyStyleElementItem = {
- let gen = TSDiyStyleElementItem(type: .animation)
- gen.isSelected = false
- return gen
- }()
- var items: [TSDiyStyleElementItem] {
- [general, animation]
- }
- override init(frame: CGRect) {
- super.init(frame: frame)
- addChildren()
- makeConstarints()
- }
- func addChildren() {
- general.addTapAction { [weak self] in
- guard let self = self else { return }
- items.forEach {
- $0.isSelected = false
- }
- self.general.isSelected = true
- }
- animation.addTapAction { [weak self] in
- guard let self = self else { return }
- items.forEach {
- $0.isSelected = false
- }
- self.animation.isSelected = true
- }
- addSubview(titleLabel)
- addSubview(general)
- addSubview(animation)
- }
- func makeConstarints() {
- titleLabel.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(16)
- make.top.equalToSuperview().offset(22)
- }
- general.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(16)
- make.top.equalTo(titleLabel.snp.bottom).offset(12)
- make.bottom.equalToSuperview().inset(12)
- make.height.equalTo(56)
- make.width.equalTo(100)
- }
- animation.snp.makeConstraints { make in
- make.leading.equalTo(general.snp.trailing).offset(12)
- make.top.equalTo(general)
- make.height.equalTo(56)
- make.width.equalTo(100)
- }
- }
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
- class TSDiyStyleElementItem: UIView {
- var type: TSDiyStyleType
- lazy var bgImageView: UIImageView = .init(image: UIImage(named: type.imgName))
- lazy var maskBottom: UIView = .creatColor(color: .black.withAlphaComponent(0.5))
- lazy var titleLabel: UILabel = .createLabel(text: type.rawValue, font: .font(size: 12), textColor: .white)
- var isSelected: Bool = false {
- didSet {
- updateSelected()
- }
- }
- func updateSelected() {
- if isSelected {
- bgImageView.layer.borderColor = UIColor.fromHex("#FECB34").cgColor
- bgImageView.layer.borderWidth = 1
- bgImageView.layer.cornerRadius = 8
- } else {
- bgImageView.layer.borderColor = UIColor.clear.cgColor
- bgImageView.layer.borderWidth = 0
- bgImageView.layer.cornerRadius = 8
- }
- }
- init(type: TSDiyStyleType) {
- self.type = type
- super.init(frame: .zero)
- addChildren()
- makeConstarints()
- }
- func addChildren() {
- addSubview(bgImageView)
- maskBottom.cornersRound(radius: 8, corner: [.bottomLeft, .bottomRight])
- bgImageView.addSubview(maskBottom)
- maskBottom.addSubview(titleLabel)
- }
- func makeConstarints() {
- bgImageView.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
- maskBottom.snp.makeConstraints { make in
- make.height.equalTo(20)
- make.horizontalEdges.equalToSuperview()
- make.bottom.equalToSuperview()
- }
- titleLabel.snp.makeConstraints { make in
- make.center.equalToSuperview()
- }
- }
- @MainActor required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
- }
|