| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- //
- // LNOrderShareImageGenerator.swift
- // Lanu
- //
- // Created by OneeChan on 2025/11/27.
- //
- import Foundation
- import UIKit
- import SnapKit
- class LNOrderShareImageGenerator {
- private let container = UIImageView()
-
- private let avatar = UIImageView()
- private let userNameLabel = UILabel()
- private let scoreView = LNFiveStarScoreView()
- private let qrCodeView = UIImageView()
- private let costLabel = UILabel()
-
- private let skillIc = UIImageView()
- private let skillNameLabel = UILabel()
- private let countLabel = UILabel()
-
- init() {
- setupViews()
- }
-
- func update(skill: LNGameMateSkillVO, count: Int, image: UIImage) {
- avatar.showAvatar(myUserInfo.avatar)
- skillIc.sd_setImage(with: URL(string: skill.icon))
- skillNameLabel.text = skill.name
- scoreView.score = myUserInfo.star
- qrCodeView.image = image
-
- countLabel.text = .init(key: "A00162", count, skill.unit)
-
- let cost = skill.price * Double(count)
- costLabel.text = cost.toDisplay
-
- container.layoutIfNeeded()
- }
-
- func generate() -> UIImage {
- let renderer = UIGraphicsImageRenderer(bounds: container.bounds)
-
- return renderer.image { _ in
- container.drawHierarchy(
- in: container.bounds,
- afterScreenUpdates: true
- )
- }
- }
- }
- extension LNOrderShareImageGenerator {
- private func setupViews() {
- let image: UIImage = .icOrderShareBg
- container.image = image
- container.frame = .init(x: 0, y: 0, width: image.size.width, height: image.size.height)
-
- avatar.backgroundColor = .fill
- avatar.layer.cornerRadius = 37.5
- avatar.layer.borderWidth = 2
- avatar.layer.borderColor = UIColor.fill.cgColor
- avatar.clipsToBounds = true
- avatar.showAvatar(myUserInfo.avatar)
- container.addSubview(avatar)
- avatar.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalToSuperview().offset(30)
- make.width.height.equalTo(75)
- }
-
- userNameLabel.font = .heading_h2
- userNameLabel.textColor = .text_5
- userNameLabel.text = myUserInfo.nickname
- container.addSubview(userNameLabel)
- userNameLabel.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(avatar.snp.bottom).offset(2)
- }
-
- scoreView.icSize = 10
- scoreView.spacing = 4
- container.addSubview(scoreView)
- scoreView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(userNameLabel.snp.bottom).offset(2)
- }
-
- container.addSubview(qrCodeView)
- qrCodeView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(scoreView.snp.bottom).offset(13)
- make.width.height.equalTo(145)
- }
-
- let priceView = UIView()
- container.addSubview(priceView)
- priceView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(qrCodeView.snp.bottom).offset(6)
- }
-
- let coin = UIImageView.coinImageView()
- priceView.addSubview(coin)
- coin.snp.makeConstraints { make in
- make.centerY.equalToSuperview()
- make.leading.equalToSuperview()
- make.width.height.equalTo(20)
- }
-
- costLabel.font = .heading_h2
- costLabel.textColor = .text_5
- priceView.addSubview(costLabel)
- costLabel.snp.makeConstraints { make in
- make.verticalEdges.equalToSuperview()
- make.trailing.equalToSuperview()
- make.leading.equalTo(coin.snp.trailing).offset(2)
- }
-
- let tipsView = UIImageView()
- tipsView.image = .primary_7
- tipsView.layer.cornerRadius = 14.5
- tipsView.clipsToBounds = true
- container.addSubview(tipsView)
- tipsView.snp.makeConstraints { make in
- make.centerX.equalToSuperview()
- make.top.equalTo(priceView.snp.bottom).offset(9)
- }
-
- let tipsLabel = UILabel()
- tipsLabel.text = .init(key: "A00164")
- tipsLabel.font = .heading_h4
- tipsLabel.textColor = .text_1
- tipsView.addSubview(tipsLabel)
- tipsLabel.snp.makeConstraints { make in
- make.verticalEdges.equalToSuperview().inset(6)
- make.horizontalEdges.equalToSuperview().inset(21)
- }
-
- skillIc.layer.cornerRadius = 10
- skillIc.clipsToBounds = true
- container.addSubview(skillIc)
- skillIc.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(56)
- make.bottom.equalToSuperview().offset(-88)
- make.width.height.equalTo(20)
- }
-
- skillNameLabel.font = .heading_h5
- skillNameLabel.textColor = .text_5
- container.addSubview(skillNameLabel)
- skillNameLabel.snp.makeConstraints { make in
- make.centerY.equalTo(skillIc)
- make.leading.equalTo(skillIc.snp.trailing).offset(8)
- }
-
- countLabel.font = .body_m
- countLabel.textColor = .text_5
- container.addSubview(countLabel)
- countLabel.snp.makeConstraints { make in
- make.centerY.equalTo(skillIc)
- make.trailing.equalToSuperview().offset(-58)
- }
- }
- }
|