UIKit — Interaction Skill
Purpose
Route the UIKit tasks that act on a screen that already exists — touch handling, animation, the transition between two screens, and the boundary where UIKit and SwiftUI meet — to the minimum required UIKit Knowledge Contracts.
Routing
Load only the contracts relevant to the task. All paths relative to knowledge/uikit/.
- Touch -> gesture-recognizers.md (attaching, state, coordinate spaces), gesture-recognizer-coordination.md (delegate, simultaneous recognition, require(toFail:))
- Animation -> uiview-animation.md (UIView.animate, UIViewPropertyAnimator, animating constraints), core-animation-layers.md (CALayer, CABasicAnimation, presentation vs model layer)
- Transitions -> custom-view-controller-transitions.md (animator object, containerView, completeTransition), interactive-transitions.md (UIPercentDrivenInteractiveTransition, gesture-driven dismissal)
- SwiftUI interop -> swiftui-view-representable.md (UIViewRepresentable, Coordinator), swiftui-hosting-controller.md (UIHostingController, sizingOptions, safeAreaRegions)
Never load more than the contracts relevant to the specific question.
For view controller lifecycle, Auto Layout, navigation, and diffable
lists, route to skill.uikit.foundations instead. For animation and
gestures written in SwiftUI rather than UIKit, route to
skill.swiftui.interaction instead.
Stop Conditions
Stop and report if the requested topic has no matching Knowledge Contract in knowledge/uikit/ — do not guess or fall back to general knowledge.
- When to animate, and which gesture a control should use — owned by
human-interface-guidelines - Accessibility of a custom gesture or an animation preference such as
Reduce Motion — owned by
accessibility UIViewPropertyAnimatoras a scroll-linked scrubbing engine, Metal orCAEmitterLayereffects, andUIKit Dynamics— Excluded- Storyboard segues and
IBAction-driven transitions — Excluded
