Skip to content

Instantly share code, notes, and snippets.

View karigrooms's full-sized avatar

Kari Grooms karigrooms

View GitHub Profile
@karigrooms
karigrooms / swiftui-composition-order-2.swift
Last active February 19, 2021 18:19
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (second example)
import SwiftUI
struct MyButtonStyle: ButtonStyle {
func makeBody(configuration: Configuration) -> some View {
configuration.label
.fixedSize()
// apply size modifiers
.frame(width: nil, height: 48)
@karigrooms
karigrooms / swiftui-composition-order-3.swift
Created February 17, 2021 22:04
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (third example)
import SwiftUI
struct ExampleView: View {
var body: some View {
Text("Hello world!")
.foregroundColor(.blue)
.foregroundColor(.black)
}
}
@karigrooms
karigrooms / swiftui-composition-order-4.swift
Created February 17, 2021 22:14
SwiftUI composition order of view modifiers for Lessons in SwiftUI blog post (4th example)
import SwiftUI
struct ExampleView: View {
var body: some View {
VStack(alignment: .center, spacing: 16) {
Text("One")
Text("Two")
Text("Three (override parent modifier)").font(.headline)
Text("Four")
}
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example.swift
Created February 18, 2021 17:52
SwiftUI button viewmodel example for Lessons in SwiftUI blog post (first example)
struct ButtonViewModel {
// ...
// MARK: Style
var disabledStyle: ButtonType.Style {
return inverse ? type.disabledInverseStyle : type.disabledStyle
}
var selectedStyle: ButtonType.Style {
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example-2.swift
Last active February 18, 2021 18:09
SwiftUI button viewmodel example for Lessons in SwiftUI blog post (2nd example)
struct ButtonViewModel {
// ...
// MARK: State Styles
func backgroundColor(for isEnabled: Bool, isPressed: Bool) -> Color {
let styles = buttonTypeStyle(for: isEnabled, isPressed: isPressed)
return styles.backgroundColor.color.opacity(styles.buttonOpacity)
}
@karigrooms
karigrooms / swiftui-buttons-viewmodel-example-3.swift
Last active February 19, 2021 17:04
SwiftUI button ViewModel example for Lessons in SwiftUI blog post (3rd example)
struct VrboButtonStyle: ButtonStyle {
let iconMode: UTButtonIconMode?
let inverse: Bool
let size: UTButtonSize
let type: UTButtonType
func makeBody(configuration: Configuration) -> some View {
ButtonStyleView(configuration: configuration,
type: type,
@karigrooms
karigrooms / swiftui-buttons-viewmodel-unit-tests.swift
Last active February 19, 2021 17:06
SwiftUI unit tests examples for Lessons in SwiftUI blog post
class ButtonViewModelTests: XCTestCase {
// ...
func testDefaultConfig() {
let vm = ButtonViewModel(iconMode: nil, inverse: false, size: .medium, type: .secondary)
let size = ButtonSize.medium
let type = ButtonType.secondary
XCTAssertNil(vm.iconStyle)
XCTAssertEqual(vm.selectedStyle, type.selectedStyle)
@karigrooms
karigrooms / swiftui-preview-fixes.csv
Created February 18, 2021 19:57
SwiftUI for Lessons in SwiftUI blog post
Project Object Fix
UIToolkit UIToolkit (class) Rename class to UIToolkitConfiguration
TripBoards TripBoards (protocol) Rename TripBoards to TripBoardManager
@karigrooms
karigrooms / swiftui-resize-image-and-maintain-aspect-ratio.swift
Last active November 28, 2024 19:53
ViewModifier for resizing images in SwiftUI. Resize an image to any size (square, circle, rectangle) while maintaining its aspect ratio.
import SwiftUI
/// Common aspect ratios
public enum AspectRatio: CGFloat {
case square = 1
case threeToFour = 0.75
case fourToThree = 1.75
}
/// Fit an image to a certain aspect ratio while maintaining its aspect ratio
@karigrooms
karigrooms / swiftui-card-view-1.swift
Created February 23, 2021 18:39
Blog post: SwiftUI with UICollectionView - 1. Simple card view to use inside of UICollectionViewCell
import SwiftUI
struct Card: View {
var body: some View {
VStack(alignment: .leading, spacing: 8) {
Image("condos")
.resizable()
.clipShape(RoundedRectangle(cornerRadius: 4))
Text("Condo with awesome views of downtown")