Skip to content

Instantly share code, notes, and snippets.

View karigrooms's full-sized avatar

Kari Grooms karigrooms

View GitHub Profile
@karigrooms
karigrooms / swiftui-uicollectionview-3.swift
Created February 23, 2021 20:01
Blog post: SwiftUI with UICollectionView - 8. Add fixture data to pass to cells
import SwiftUI
import UIKit
class CollectionViewExample: UIViewController {
//...
// MARK: Data
struct Item: MyCollectionViewCell.Content {
@karigrooms
karigrooms / swiftui-uicollectionviewcell-3.swift
Created February 23, 2021 19:37
Blog post: SwiftUI with UICollectionView - 7. Refactored to pass data to the SwiftUI Card
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
static var reuseIdentifier = "MyCollectionViewCell"
typealias Content = Card.Content
private(set) var host: UIHostingController<Card>?
@karigrooms
karigrooms / swiftui-card-view-2.swift
Created February 23, 2021 19:21
Blog post: SwiftUI with UICollectionView - 6. Update card to accept data
import SwiftUI
protocol CardContent {
var imageName: String { get }
var title: String { get }
var description: String { get }
}
struct Card: View {
@karigrooms
karigrooms / swiftui-uicollectionview-2.swift
Created February 23, 2021 19:16
Blog post: SwiftUI with UICollectionView - 5. Add SwiftUI UIHostingController as a child of our UIViewController
//...
extension CollectionViewExample: UICollectionViewDataSource {
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 9
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: MyCollectionViewCell.reuseIdentifier, for: indexPath) as? MyCollectionViewCell else {
@karigrooms
karigrooms / swiftui-uicollectionviewcell-2.swift
Last active February 23, 2021 19:14
Blog post: SwiftUI with UICollectionView - 4. UIHostingController Setup/Cleanup
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
lazy var host: UIHostingController = {
return UIHostingController(rootView: Card())
}()
//...
@karigrooms
karigrooms / swiftui-uicollectionview-1.swift
Created February 23, 2021 18:54
Blog post: SwiftUI with UICollectionView - 3. Setup the UICollectionView
import SwiftUI
import UIKit
class CollectionViewExample: UIViewController {
lazy var collectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: layout)
collectionView.backgroundColor = UIColor(named: "Light")
@karigrooms
karigrooms / swiftui-uicollectionviewcell-1.swift
Created February 23, 2021 18:46
Blog post: SwiftUI with UICollectionView - 2. Embed SwiftUI Card in UICollectionViewCell
import SwiftUI
import UIKit
class MyCollectionViewCell: UICollectionViewCell {
static var reuseIdentifier = "MyCollectionViewCell"
lazy var host: UIHostingController = {
return UIHostingController(rootView: Card())
}()
@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")
@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-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