This commit is contained in:
DDIsFriend
2023-08-18 17:28:57 +08:00
commit f0e8a1709d
4282 changed files with 192396 additions and 0 deletions

View File

@@ -0,0 +1,149 @@
//
// UILabel+Message.swift
// SwiftEntryKit
//
// Created by Daniel Huri on 04/14/2018.
// Copyright (c) 2018 huri000@gmail.com. All rights reserved.
//
import UIKit
extension UILabel {
var style: EKProperty.LabelStyle {
set {
font = newValue.font
textColor = newValue.color(for: traitCollection)
textAlignment = newValue.alignment
numberOfLines = newValue.numberOfLines
}
get {
return EKProperty.LabelStyle(font: font,
color: EKColor(textColor),
alignment: textAlignment,
numberOfLines: numberOfLines)
}
}
var content: EKProperty.LabelContent {
set {
text = newValue.text
accessibilityIdentifier = newValue.accessibilityIdentifier
style = newValue.style
}
get {
return EKProperty.LabelContent(text: text ?? "", style: style)
}
}
}
extension UIButton {
var buttonContent: EKProperty.ButtonContent {
set {
setTitle(newValue.label.text, for: .normal)
setTitleColor(newValue.label.style.color(for: traitCollection), for: .normal)
titleLabel?.font = newValue.label.style.font
accessibilityIdentifier = newValue.accessibilityIdentifier
backgroundColor = newValue.backgroundColor.color(
for: traitCollection,
mode: newValue.displayMode
)
}
get {
fatalError("buttonContent doesn't have a getter")
}
}
}
extension UIImageView {
var imageContent: EKProperty.ImageContent {
set {
stopAnimating()
if newValue.images.count == 1 {
image = newValue.images.first
} else {
animationImages = newValue.images.map {
$0.withRenderingMode(.alwaysTemplate)
}
animationDuration = newValue.imageSequenceAnimationDuration
}
contentMode = newValue.contentMode
tintColor = newValue.tint?.color(for: traitCollection,
mode: newValue.displayMode)
accessibilityIdentifier = newValue.accessibilityIdentifier
if let size = newValue.size {
set(.width, of: size.width)
set(.height, of: size.height)
} else {
forceContentWrap()
}
if newValue.makesRound {
clipsToBounds = true
if let size = newValue.size {
layer.cornerRadius = min(size.width, size.height) * 0.5
} else {
layoutIfNeeded()
layer.cornerRadius = min(bounds.width, bounds.height) * 0.5
}
}
startAnimating()
if case .animate(duration: let duration,
options: let options,
transform: let transform) = newValue.animation {
let options: UIView.AnimationOptions = [.repeat, .autoreverse, options]
// A hack that forces the animation to run on the main thread,
// on one of the next run loops
DispatchQueue.main.async {
UIView.animate(withDuration: duration,
delay: 0,
options: options,
animations: {
self.transform = transform
}, completion: nil)
}
}
}
get {
fatalError("imageContent doesn't have a getter")
}
}
}
extension UITextField {
var placeholder: EKProperty.LabelContent {
set {
attributedPlaceholder = NSAttributedString(
string: newValue.text,
attributes: [
.font: newValue.style.font,
.foregroundColor: newValue.style.color(for: traitCollection)
]
)
}
get {
fatalError("placeholder doesn't have a getter")
}
}
var textFieldContent: EKProperty.TextFieldContent {
set {
placeholder = newValue.placeholder
keyboardType = newValue.keyboardType
textColor = newValue.textStyle.color(for: traitCollection)
font = newValue.textStyle.font
textAlignment = newValue.textStyle.alignment
isSecureTextEntry = newValue.isSecure
text = newValue.textContent
tintColor = newValue.tintColor(for: traitCollection)
accessibilityIdentifier = newValue.accessibilityIdentifier
}
get {
fatalError("textFieldContent doesn't have a getter")
}
}
}