Seb Vidal's banner
Seb Vidal's profile picture

Seb Vidal

@SebJVidal6,720 subscribers

iOS Developer 👨🏽‍💻 Chairman of the _UINavigationBarPalette fan club.

Shorts

Two hours on a train without WiFi means reverse engineering the Liquid Glass...liquid...effect? Reasonably simple API to work with: CASDFLayer, CASDFElementLayer and a CASDFEffect subclass, in this case CASDFFillEffect. You can wrap up in a UIView subclass, overriding layerClass to play nicely with higher-level UIKit animation abstractions.

Two hours on a train without WiFi means reverse engineering the Liquid Glass...liquid...effect? Reasonably simple API to work with: CASDFLayer, CASDFElementLayer and a CASDFEffect subclass, in this case CASDFFillEffect. You can wrap up in a UIView subclass, overriding layerClass to play nicely with higher-level UIKit animation abstractions.

41,058 Aufrufe

Spent some time reverse engineering Apple Music and Podcast's search chips UI 👀 Interestingly, there's no public or private API to achieve this, _and_ both Music and Podcasts have different implementations of the identical interface 🫠 Anyone interested in an article on this?

Spent some time reverse engineering Apple Music and Podcast's search chips UI 👀 Interestingly, there's no public or private API to achieve this, _and_ both Music and Podcasts have different implementations of the identical interface 🫠 Anyone interested in an article on this?

143,875 Aufrufe

It's hard not to add fuel to the "is SwiftUI production-ready" fire when this is the state of the "best way to build an app" 6 years after the framework was released... 🙃 ~30 lines of (admittedly sloppy) but simple code, unusable on iOS 26. Oh! And it works just fine on 18 🫠

It's hard not to add fuel to the "is SwiftUI production-ready" fire when this is the state of the "best way to build an app" 6 years after the framework was released... 🙃 ~30 lines of (admittedly sloppy) but simple code, unusable on iOS 26. Oh! And it works just fine on 18 🫠

66,875 Aufrufe

With a bit of UIKit Jiggery-Pokery™ you can display arbitrary views as the content of a segmented control’s segments. In this case, a _UIHostingView featuring SwiftUI Text with an animated numeric content transition. Although probably doable _with_, no private APIs used here!

With a bit of UIKit Jiggery-Pokery™ you can display arbitrary views as the content of a segmented control’s segments. In this case, a _UIHostingView featuring SwiftUI Text with an animated numeric content transition. Although probably doable _with_, no private APIs used here!

21,919 Aufrufe

Spent some time preparing Duet for iOS 26. Pretty happy with how this interaction turned out! In a shocking turn of events, I ended up using SwiftUI for the two map style buttons because, despite UIButton.Configuration being great, it’s got noting on SUI’s ButtonStyle API.

Spent some time preparing Duet for iOS 26. Pretty happy with how this interaction turned out! In a shocking turn of events, I ended up using SwiftUI for the two map style buttons because, despite UIButton.Configuration being great, it’s got noting on SUI’s ButtonStyle API.

52,955 Aufrufe

All of that work for what ended up being a very subtle effect... Happy with it though! Was worth the extra effort getting it working with UIKit's block-based animation APIs. Means I can use UIViewControllerTransitionCoordinator's animate(alongsideTransition:completion:) 🤓

All of that work for what ended up being a very subtle effect... Happy with it though! Was worth the extra effort getting it working with UIKit's block-based animation APIs. Means I can use UIViewControllerTransitionCoordinator's animate(alongsideTransition:completion:) 🤓

55,340 Aufrufe

Been a while, but here's your private API of the day... UIKit's fluid slider, as seen in Apple Music, Podcasts, SpringBoard and more. UISlider has private `_sliderStyle` and `sliderConfiguration` properties. Here, the slider has a style of 110, and the configuration is an instance of the private `_UISliderFluidConfiguration` class.

Been a while, but here's your private API of the day... UIKit's fluid slider, as seen in Apple Music, Podcasts, SpringBoard and more. UISlider has private `_sliderStyle` and `sliderConfiguration` properties. Here, the slider has a style of 110, and the configuration is an instance of the private `_UISliderFluidConfiguration` class.

57,845 Aufrufe

I promised you a zinger, so here's your private API of the day... Meet _UIContextMenuAccessoryView and UIContextMenuInteractionDelegate_Private's _contextMenuInteraction(_:accessoriesForMenuWithConfiguration:) method. This enables iMessage-like accessory views to be displayed alongside a context menu. Quite a lot going on here, so let me know if you're interested in a blog post 👀

I promised you a zinger, so here's your private API of the day... Meet _UIContextMenuAccessoryView and UIContextMenuInteractionDelegate_Private's _contextMenuInteraction(_:accessoriesForMenuWithConfiguration:) method. This enables iMessage-like accessory views to be displayed alongside a context menu. Quite a lot going on here, so let me know if you're interested in a blog post 👀

42,855 Aufrufe

Interesting new private property of UINavigationItem added in iOS 18, _preferredNavigationBarVisibility. This is really handy if only your detail view requires a nav bar. No need to set isHidden in viewDidAppear(_:) and viewWillDisappear(_:). Here's an example in Duet...

Interesting new private property of UINavigationItem added in iOS 18, _preferredNavigationBarVisibility. This is really handy if only your detail view requires a nav bar. No need to set isHidden in viewDidAppear(_:) and viewWillDisappear(_:). Here's an example in Duet...

31,424 Aufrufe

Ooh here's a fun one! 👀 UISheetPresentationController.Detent has a private _fullDetent method that, when applied to a UISheetPresentationController's detents array, enables switching between a sheet and a full screen modal with a gesture... Super clean interaction!

Ooh here's a fun one! 👀 UISheetPresentationController.Detent has a private _fullDetent method that, when applied to a UISheetPresentationController's detents array, enables switching between a sheet and a full screen modal with a gesture... Super clean interaction!

30,289 Aufrufe

Spent some time reverse engineering the Apple Maps sheet UI on iPad. This can be achieved with a few private UIKit APIs... 3 private properties of UISheetPresentationController: horizontalAlignment, wantsBottomAttached and marginInRegularWidthRegularHeight. Code below... 👇🏽

Spent some time reverse engineering the Apple Maps sheet UI on iPad. This can be achieved with a few private UIKit APIs... 3 private properties of UISheetPresentationController: horizontalAlignment, wantsBottomAttached and marginInRegularWidthRegularHeight. Code below... 👇🏽

27,130 Aufrufe

Here’s your reminder that, if you’re triggering an animation on -[UIViewController viewDidAppear], you should probably create an ivar that keeps track of whether or not you _need_ to start said animation 🙃

Here’s your reminder that, if you’re triggering an animation on -[UIViewController viewDidAppear], you should probably create an ivar that keeps track of whether or not you _need_ to start said animation 🙃

20,593 Aufrufe

Videos

Keine weiteren Inhalte verfügbar