Skip to content

Instantly share code, notes, and snippets.

@sebjvidal
Created November 4, 2025 09:21
Show Gist options
  • Select an option

  • Save sebjvidal/7049d7ed47d345f51dc092dbd7da80d6 to your computer and use it in GitHub Desktop.

Select an option

Save sebjvidal/7049d7ed47d345f51dc092dbd7da80d6 to your computer and use it in GitHub Desktop.
UIGlassContainerEffect-Demo
//
// ViewController.swift
// UIGlassContainerEffect-Demo
//
// Created by Seb Vidal on 04/11/2025.
//
import UIKit
import MapKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let mapView = MKMapView()
mapView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(mapView)
NSLayoutConstraint.activate([
mapView.topAnchor.constraint(equalTo: view.topAnchor),
mapView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
mapView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
let containerEffect = UIGlassContainerEffect()
containerEffect.spacing = 5
let glassContainer = UIVisualEffectView()
glassContainer.effect = containerEffect
glassContainer.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(glassContainer)
NSLayoutConstraint.activate([
glassContainer.topAnchor.constraint(equalTo: view.topAnchor),
glassContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor),
glassContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor),
glassContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor)
])
let glassEffect = UIGlassEffect(style: .regular)
glassEffect.isInteractive = true
let leadingGlassView = UIVisualEffectView()
leadingGlassView.effect = glassEffect
leadingGlassView.cornerConfiguration = .capsule()
leadingGlassView.translatesAutoresizingMaskIntoConstraints = false
glassContainer.contentView.addSubview(leadingGlassView)
NSLayoutConstraint.activate([
leadingGlassView.trailingAnchor.constraint(equalTo: glassContainer.centerXAnchor, constant: -5),
leadingGlassView.centerYAnchor.constraint(equalTo: glassContainer.centerYAnchor),
])
let leadingButton = UIButton()
leadingButton.configuration = .plain()
leadingButton.configuration?.buttonSize = .large
leadingButton.configuration?.image = UIImage(systemName: "ellipsis")
leadingButton.translatesAutoresizingMaskIntoConstraints = false
leadingGlassView.contentView.addSubview(leadingButton)
NSLayoutConstraint.activate([
leadingButton.topAnchor.constraint(equalTo: leadingGlassView.topAnchor),
leadingButton.leadingAnchor.constraint(equalTo: leadingGlassView.leadingAnchor),
leadingButton.trailingAnchor.constraint(equalTo: leadingGlassView.trailingAnchor),
leadingButton.bottomAnchor.constraint(equalTo: leadingGlassView.bottomAnchor)
])
let trailingGlassView = UIVisualEffectView()
trailingGlassView.effect = glassEffect
trailingGlassView.cornerConfiguration = .capsule()
trailingGlassView.translatesAutoresizingMaskIntoConstraints = false
glassContainer.contentView.addSubview(trailingGlassView)
NSLayoutConstraint.activate([
trailingGlassView.leadingAnchor.constraint(equalTo: glassContainer.centerXAnchor, constant: 5),
trailingGlassView.centerYAnchor.constraint(equalTo: glassContainer.centerYAnchor),
])
let trailingButton = UIButton()
trailingButton.configuration = .plain()
trailingButton.configuration?.buttonSize = .large
trailingButton.configuration?.image = UIImage(systemName: "ellipsis")
trailingButton.translatesAutoresizingMaskIntoConstraints = false
trailingGlassView.contentView.addSubview(trailingButton)
NSLayoutConstraint.activate([
trailingButton.topAnchor.constraint(equalTo: trailingGlassView.topAnchor),
trailingButton.leadingAnchor.constraint(equalTo: trailingGlassView.leadingAnchor),
trailingButton.trailingAnchor.constraint(equalTo: trailingGlassView.trailingAnchor),
trailingButton.bottomAnchor.constraint(equalTo: trailingGlassView.bottomAnchor)
])
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment