Skip to content

Instantly share code, notes, and snippets.

View eldaroid's full-sized avatar
🎯
Focusing

Попов Эльдар eldaroid

🎯
Focusing
View GitHub Profile
@eldaroid
eldaroid / LogSizes.swift
Last active August 10, 2024 22:40
Инструмент для отладки UI в SwiftUI, позволяя более детально контролировать и понимать процесс вычисления размеров и размещения представлений
struct LogSizes: Layout {
var label: String
func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
assert(subviews.count == 1)
print(String(format: "предлагают _%@_: →%.2f x ↓%.2f", label, proposal.width ?? 0, proposal.height ?? 0))
let result = subviews[0].sizeThatFits(proposal)
print(String(format: "ответ от _%@_: →%.2f x ↓%.2f", label, result.width, result.height))
return result
}
@eldaroid
eldaroid / DynamicTextColoring.swift
Last active August 10, 2024 21:23
Динамическое окрашивание текста: 1) Встроенным текстовым стилированием; 2) AttributedString
struct DynamicTextColoring: View {
var body: some View {
VStack {
// только с 16 оси
Text("1) Коллеги и платформа \(Text("поздравляют Вас").foregroundColor(.teal))!")
Text(attributedCongratulationString)
}
}
import SwiftUI
// Extension to handle boolean conditions
extension View {
@ViewBuilder
public func `if`<Transform: View>(
_ value: Bool,
transform: (Self) -> Transform
) -> some View {
if value {
extension FocusedValues {
var myKey: Binding<String>? {
get { self[MyFocusKey.self] }
set { self[MyFocusKey.self] = newValue }
}
struct MyFocusKey: FocusedValueKey {
typealias Value = Binding<String>
}
}
@eldaroid
eldaroid / DoubleHumanFormatted.swift
Last active July 17, 2024 19:34
Преобразование чисел в удобочитаемый формат, добавляя соответствующие постфиксы для больших чисел (например, 123 тысяч, 5 миллионов, 8 миллиардов и т.д.).
public extension Double {
func humanFormatted(
groupingSeparator: String = " ",
roundingMode: NumberFormatter.RoundingMode = .halfEven,
fractionDigits: Int = 1,
threshold: Double = 9_999
) -> (stringValue: String, postfix: String?) {
let dividerNames: [String?] = [nil, "тыс.", "млн", "млрд", "трлн", "квадрлн"]
struct DefaultPopUps: View {
@State var onSheet = false
@State var onFullScreenCover = false
@State var onPopover = false
@State var onAlert = false
@State var onActionSheet = false
var body: some View {
VStack {
Button(action: {
// BlurReplace, Identity, Move, Offset,
// Opacity, Push, Scale, Slide
// Asymmetric
struct ContentView: View {
@State private var showBlurReplace = false
@State private var showIdentity = false
@State private var showMove = false
@State private var showOffset = false
@State private var showOpacity = false
@State private var showPush = false
@eldaroid
eldaroid / AnimationExample.swift
Created June 25, 2024 20:23
Визуализация различных типов анимационных кривых и наблюдение их поведения: в реальном времени
struct AnimationExample: View {
@ObservedObject var trace = AnimationTrace()
@State var animating: Bool = false
@State var selectedAnimationIndex: Int = 0
@State var slowAnimations: Bool = false
var selectedAnimation: (String, Animation) {
return animations[selectedAnimationIndex]
}
var body: some View {
VStack {
@eldaroid
eldaroid / LifeCycleViewController.swift
Last active July 4, 2024 19:48
Исследуем жизненный цикл ViewController
final class ViewController: UIViewController {
private let name = "🖥️"
private let infoLabel: UILabel = {
let label = UILabel()
label.text = "AppDelegate Life Cycle"
label.translatesAutoresizingMaskIntoConstraints = false
return label
}()
private let switchButton: UIButton = {
@eldaroid
eldaroid / LifeCycleSceneDelegate.swift
Last active July 28, 2024 10:11
Исследуем жизненный цикл iOS Scene (методы SceneDelegate)
final class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = (scene as? UIWindowScene) else { return }
// Настройка окна приложения
window = UIWindow(windowScene: windowScene)
let initialViewController = ViewController()
window?.rootViewController = initialViewController