Skip to content

Instantly share code, notes, and snippets.

View darrarski's full-sized avatar
🍏

Dariusz Rybicki darrarski

🍏
View GitHub Profile
@darrarski
darrarski / EmojiPicker.swift
Last active June 24, 2025 12:33
SwiftUI emoji picker using UIKit on iOS
import SwiftUI
struct EmojiPickerView: UIViewRepresentable {
@Binding var isFirstResponder: Bool
var onPick: (String) -> Void
var onDelete: () -> Void
func makeUIView(context: Context) -> UIViewType {
UIViewType(view: self)
}
@darrarski
darrarski / Functor.swift
Created August 27, 2022 18:34
Sourcery template for creating functors from functions
import XCTestDynamicOverlay
{% for func in functions %}
public struct {% for text in func.name|split:"(" %}{% if forloop.first %}{{ text|upperFirstLetter }}{% endif %}{% endfor %} {
public var run: ({% for param in func.parameters %}{{ param.typeName }}{% ifnot forloop.last %}, {% endif %}{% endfor %}){% if func.throws %} throws{% endif %} -> {{ func.returnTypeName }}
public func callAsFunction({% if func.parameters.count > 0 %}
{% for param in func.parameters %}
{{ param.asSource }}{% ifnot forloop.last %},{% endif %}
{% endfor %}
@darrarski
darrarski / SwiftUI_tap_gesture_with_location.swift
Last active June 8, 2022 10:15
Get location of a tap in SwiftUI
import SwiftUI
struct ExampleView: View {
var body: some View {
Color.blue
.gesture(
TapGesture(count: 1)
.simultaneously(with: DragGesture(minimumDistance: 0))
.onEnded { value in
if value.first != nil, let location = value.second?.startLocation {
@darrarski
darrarski / SwiftUI_InterfaceOrientationObservingViewModifier.swift
Created February 18, 2022 13:49
SwiftUI view modifier that performs action whenever UIInterfaceOrientation reported by UIViewController changes
import SwiftUI
struct InterfaceOrientationObservingViewModifier: ViewModifier {
let onChange: (UIInterfaceOrientation) -> Void
func body(content: Content) -> some View {
content.background(InterfaceOrientationObservingView(onChange: onChange))
}
}
@darrarski
darrarski / SwiftUI_DeviceOrientationObservingViewModifier.swift
Created February 18, 2022 13:47
SwiftUI view modifier that performs action whenever accelerometer-based UIDeviceOrientation changes
import CoreMotion
import SwiftUI
struct DeviceOrientationObservingViewModifier: ViewModifier {
let onChange: (UIDeviceOrientation) -> Void
func body(content: Content) -> some View {
content.background(DeviceOrientationObservingView(onChange: onChange))
}
}
@darrarski
darrarski / SwiftUI_LazyVGrid_ContextMenu_Delete.swift
Created February 11, 2022 23:41
SwiftUI workaround for broken animation when deleting collection item with context menu.
import SwiftUI
struct Item: Equatable, Identifiable {
var id = UUID()
var color: Color
}
struct ContentView: View {
@State var items = Array(repeating: [Color.red, .green, .blue], count: 10)
.flatMap { $0 }
@darrarski
darrarski / SwiftUI_BottomBarViewModifier.swift
Created January 16, 2022 23:28
SwiftUI extension that adds bottom bar (like toolbar tor tabbar) to the provided view.
import SwiftUI
extension View {
func bottomBar<Bar: View>(
ignoresKeyboard: Bool = true,
frameChangeAnimation: Animation? = .default,
@ViewBuilder bar: @escaping () -> Bar
) -> some View {
modifier(BottomBarViewModifier(
ignoresKeyboard: ignoresKeyboard,
@darrarski
darrarski / SwiftUI_GeometryReaderViewModifier.swift
Last active January 16, 2022 23:27
SwiftUI extension that attaches geometry reader to a view and notifies whenever provided geometry changes.
import SwiftUI
extension View {
func geometryReader<Geometry: Codable>(
geometry: @escaping (GeometryProxy) -> Geometry,
onChange: @escaping (Geometry) -> Void
) -> some View {
modifier(GeometryReaderViewModifier(
geometry: geometry,
onChange: onChange
@darrarski
darrarski / SwiftUI_SizeChangeModifier.swift
Last active February 14, 2024 17:08
Swift UI vie modifier for retrieving the view size
import SwiftUI
public extension View {
func onSizeChange(
ignoreSafeArea: Bool = false,
round: Bool = false,
perform action: @escaping (CGSize) -> Void
) -> some View {
modifier(SizeChangeModifier(
ignoreSafeArea: ignoreSafeArea,
@darrarski
darrarski / SwiftUI_DeviceOrientationObserver.swift
Created August 23, 2021 17:28
SwiftUI CoreMotion driven DeviceOrientationObserver
import CoreMotion
import SwiftUI
public final class DeviceOrientationObserver: ObservableObject {
public init() {
manager.startAccelerometerUpdates(to: OperationQueue.main) { [weak self] data, error in
guard error == nil, let acceleration = data?.acceleration else {
self?.value = .unknown
return
}