Skip to content

Instantly share code, notes, and snippets.

View Kievkao's full-sized avatar

Andrii Kravchenko Kievkao

View GitHub Profile
//
// UIView+Helpers.swift
// DMLOOYFG
//
// Created by Roman Rechich on 07.10.2021.
//
import UIKit
import SwiftUI
@Kievkao
Kievkao / BindingExtension.swift
Created October 19, 2020 06:20
OnChange handler for Binding
extension Binding {
func onChange(_ handler: @escaping (Value) -> Void) -> Binding<Value> {
Binding(
get: { self.wrappedValue },
set: { newValue in
self.wrappedValue = newValue
handler(newValue)
}
)
}
@Kievkao
Kievkao / Collection+Extensions.swift
Created October 12, 2020 06:31
Safe collections access
extension Collection {
subscript(safe index: Index) -> Element? {
return indices.contains(index) ? self[index] : nil
}
}
@Kievkao
Kievkao / GridSpan.swift
Created October 6, 2020 06:37
SwiftUI grid spans
struct ColSpan<Content: View>: View {
let span: Bool
let content: () -> Content
init(span: Bool, @ViewBuilder content: @escaping () -> Content) {
self.span = span
self.content = content
}
var body: some View {
@Kievkao
Kievkao / SizeChange.swift
Created September 15, 2020 06:18
Reading size changes
struct SizePreferenceKey: PreferenceKey {
static var defaultValue: CGSize = .zero
static func reduce(value: inout CGSize, nextValue: () -> CGSize) {}
}
extension View {
func readSize(onChange: @escaping (CGSize) -> Void) -> some View {
background(
GeometryReader { geometryProxy in
Color.clear
@Kievkao
Kievkao / SwiftUI-ScrollView-offset.swift
Created September 9, 2020 07:09
How to get ScrollView offset in SwiftUI
struct ContentView: View {
var body: some View {
ScrollViewOffset(onOffsetChange: { (offset) in
print("New ScrollView offset: \(offset)")
}) {
VStack {
ForEach(0..<100) { index in
Text("\(index)")
}
}
@Kievkao
Kievkao / SwiftUI - conditions
Created September 9, 2020 06:36
SwiftUI - Conditional view modifiers
struct SwiftUIView: View {
var condition1: Bool = true
var condition2: Bool = false
var customColor: Color?
var body: some View {
Text("Hello, World!")
.ifLet(customColor) { $0.foregroundColor($1) }
.if(condition1) { $0.padding(16) }
.if(condition2) { $0.hidden() }
@Kievkao
Kievkao / UIImage+Replacing
Created April 11, 2019 08:27
Replace pixels in UIImage (white or black. For other colours require some adjustment in terms of CGFloat converting)
extension UIImage {
func replaceColor(_ color: UIColor, with: UIColor) -> UIImage? {
guard let fromRGB = color.rgb(), let toRGB = with.rgb() else { return self }
let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height)
UIGraphicsBeginImageContextWithOptions(rect.size, false, self.scale)
UIRectFill(rect)
draw(in: rect, blendMode: .copy, alpha: 1)
guard let contextRef = UIGraphicsGetCurrentContext() else { return self }
@Kievkao
Kievkao / TransportSecurity.plist
Created November 19, 2016 11:13
TransportSecurity enabling
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
@Kievkao
Kievkao / Swift.gitignore
Created November 8, 2016 17:12
Swift gitignore
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser