Skip to content

Instantly share code, notes, and snippets.

View juliensagot's full-sized avatar

Julien Sagot juliensagot

View GitHub Profile
@juliensagot
juliensagot / VariableBlurView.swift
Last active April 28, 2024 13:23
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)
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
@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>,
@juliensagot
juliensagot / NSBezierPath+cgPath.swift
Last active September 26, 2023 23:11
Convert NSBezierPath to CGPath (Swift 5.1, Xcode 11.3 (11C29))
extension NSBezierPath {
/// A `CGPath` object representing the current `NSBezierPath`.
var cgPath: CGPath {
let path = CGMutablePath()
let points = UnsafeMutablePointer<NSPoint>.allocate(capacity: 3)
if elementCount > 0 {
var didClosePath = true
@juliensagot
juliensagot / UIFont+smallCaps.swift
Last active April 9, 2022 18:43
Get UIFont with smallCaps feature (Swift 5.6, Xcode 13.3)
extension UIFont {
var withSmallCaps: UIFont {
let upperCaseFeature = [
UIFontDescriptor.FeatureKey.type : kUpperCaseType,
UIFontDescriptor.FeatureKey.selector : kUpperCaseSmallCapsSelector
]
let lowerCaseFeature = [
UIFontDescriptor.FeatureKey.type : kLowerCaseType,
UIFontDescriptor.FeatureKey.selector : kLowerCaseSmallCapsSelector
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
}