Skip to content

Instantly share code, notes, and snippets.

View juliensagot's full-sized avatar

Julien Sagot juliensagot

View GitHub Profile
@juliensagot
juliensagot / HostingView.swift
Created June 21, 2024 14:22
The missing UIHostingView
import SwiftUI
import UIKit
public final class HostingView: UIView {
public init(@ViewBuilder content: () -> some View) {
super.init(frame: .zero)
let contentView = UIHostingConfiguration(content: content)
.margins(.all, 0)
.makeContentView()
@juliensagot
juliensagot / Interface.swift
Created June 13, 2024 07:49
SwiftUI Interface (from Xcode 16.0 Beta, module names removed)
This file has been truncated, but you can view the full file.
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 6.0 effective-5.10 (swiftlang-6.0.0.3.38 clang-1600.0.20.6)
// swift-module-flags: -target arm64e-apple-ios18.0 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -Osize -library-level api -enable-experimental-feature Macros -enable-experimental-feature ExtensionMacros -enable-experimental-feature IsolatedAny -enable-bare-slash-regex -user-module-version 6.0.70.5.103 -module-name SwiftUI -package-name SwiftUI
import Accessibility
import Combine
import CoreData
import CoreFoundation
@_exported import CoreGraphics
@_exported import CoreTransferable
import Darwin
@juliensagot
juliensagot / VariableBlurView.swift
Last active May 26, 2024 13:42
SwiftUI variable blur view
import Foundation
import SwiftUI
import UIKit
extension UIBlurEffect {
public static func variableBlurEffect(radius: Double, imageMask: UIImage) -> UIBlurEffect? {
let methodType = (@convention(c) (AnyClass, Selector, Double, UIImage) -> UIBlurEffect).self
let selectorName = ["imageMask:", "effectWithVariableBlurRadius:"].reversed().joined()
let selector = NSSelectorFromString(selectorName)
@juliensagot
juliensagot / Interface.swift
Created February 14, 2024 17:14
SwiftUI Interface (from Xcode 15.3 Beta 3, module names removed)
This file has been truncated, but you can view the full file.
// swift-interface-format-version: 1.0
// swift-compiler-version: Apple Swift version 5.10 (swiftlang-5.10.0.12.5 clang-1500.3.9.1.1)
// swift-module-flags: -target arm64e-apple-ios17.4 -enable-objc-interop -enable-library-evolution -swift-version 5 -enforce-exclusivity=checked -Osize -library-level api -library-level api -enable-experimental-feature Macros -enable-experimental-feature ExtensionMacros -package-name SwiftUI -enable-bare-slash-regex -user-module-version 5.4.37 -module-name SwiftUI
import Accessibility
import Combine
import CoreData
import CoreFoundation
@_exported import CoreGraphics
import CoreText
@_exported import CoreTransferable
@juliensagot
juliensagot / ValuePicker.swift
Last active January 28, 2024 10:48
Custom SwiftUI Picker
import SwiftUI
public struct ValuePicker<SelectionValue: Hashable, Content: View>: View {
private let title: LocalizedStringKey
private let selection: Binding<SelectionValue>
private let content: Content
public init(
_ title: LocalizedStringKey,
selection: Binding<SelectionValue>,
import Foundation
import SwiftUI
// MARK: - Custom Button Style
struct MobileMeButtonStyle: ButtonStyle {
// MARK: Metrics
@ScaledMetric private var cornerRadius = 12
@ScaledMetric private var horizontalLabelPadding = 12
@ScaledMetric private var verticalLabelPadding = 8
import UIKit
import PlaygroundSupport
final class CardView: UIControl {
private let imageView = UIImageView(image: UIImage(named: "Sample"))
override init(frame: CGRect) {
super.init(frame: frame)
layer.cornerRadius = 9
@juliensagot
juliensagot / SwiftUI_subpixel_issue.swift
Last active July 14, 2020 09:15
SwiftUI subpixel alignment stroke animation issue
import SwiftUI
struct TestCard: View {
private let cornerRadius: CGFloat = 12
@Environment(\.displayScale) private var displayScale
@State private var isSelected = false
var body: some View {
@juliensagot
juliensagot / UIImage+averageColor.swift
Last active December 9, 2019 08:16
Get the average color of a UIImage. (Swift 4.2, Xcode 10.0)
import UIKit
extension UIImage {
var averageColor: UIColor? {
guard let inputImage = self.ciImage ?? CIImage(image: self) else { return nil }
guard let filter = CIFilter(name: "CIAreaAverage", parameters: [kCIInputImageKey: inputImage, kCIInputExtentKey: CIVector(extent: inputImage.extent)])
else { return nil }
guard let outputImage = filter.outputImage else { return nil }
@juliensagot
juliensagot / UIBezierPath+utils.swift
Last active May 28, 2018 15:00
Extension of UIBezierPath to create a rounded rect with different corner radius while keeping smooth corners. (Swift 4, Xcode 9.2)
import UIKit
fileprivate enum PathElement {
case moveToPoint(CGPoint)
case addLineToPoint(CGPoint)
case addQuadCurveToPoint(CGPoint, CGPoint)
case addCurveToPoint(CGPoint, CGPoint, CGPoint)
case closeSubpath
}