IBAnimatable is an open source library to help designers and developers design and prototype customized UI, interaction, navigation, transition and animation for App Store ready Apps in Interface Builder.
- Adding convenient
@IBInspectableproperties to reduce numerous amount of code. e.g.fillColor,cornerRadius,shadowColorandshadowOffset. - Providing predefined UI elements and animations. e.g. Flat UI colors, Gradient colors, and animations.
- Extending existing behaviors, e.g. More transition animations like "Fade", "Explode", "Fold" and "Portal".
-
UIKit - All
IBAnimatableUI elements are based onUIKit.- Dos
- All UI elements should support Auto Layout.
- Support existing navigation pattern like present/dismiss, push/pop.
- Don'ts
- Creating another layout system. e.g. CSS Flexbox.
- Creating new custom navigation pattern.
- Dos
-
@IBDesginableand@IBInspectable- To design in Interface Builder, all properties should be@IBDesginable. Some properties cannot render properly in Interface Builder, e.g.rotate. Moreover, animations are not able to preview in Interface Builder. However, once Interface Builder supports, those features works properly in Interface Builder. -
Platform - iOS - Currently, we focus on iOS. Once iOS support is mature, we can implement more protocol extensions to support other platforms like MacOS, WatchOS, and tvOS.
-
iOS version - Currently,
IBAnimatablesupports iOS 8 and above. * Dos * Supporting latest version first and disabling them in the previous version if required. * Don'ts * Sacrificing features for backward compatibilities. -
Swift - Currently,
IBAnimatablesupports Swift only.- Dos
- Using Swift features and best practice like protocol extensions, enum and optional.
- Don'ts
- Avoiding Swift features to support Objective-C.
- Dos
Version 1: Designable and animatable elements- Version 2: Custom transition animations and more animatable elements
- Version 3: Swift 3
- Version 4: More designable and animatable elements
- Version 5: More animations
- Version 6: Sketch plugin & Xcode plugin
You can find more details in https://github.com/IBAnimatable/IBAnimatable/milestones
-
Bar Button Item:
roundedImage
-
Blur:
blurEffectStyleblurOpacity- Motion Blur - IBAnimatable#65
-
Border:
borderColorborderWidthborderSideBorder with more than one side and less than 4 sides
-
Checkbox:
checkedcheckedImageuncheckedImage- Animations for state changes - IBAnimatable#67
- Default checked and unchecked icon (Using path to avoid image assets?) - IBAnimatable#68
- Checked color - IBAnimatable#69
-
Corner:
cornerRadius
-
Fill:
fillColoropacity
-
Gradient:
startColorendColorstartPointDefault gradient colors
-
Navigation Bar:
solidColor
-
Mask:
CircleStarPolygonTriangleWaveParallelogram
-
Padding:
paddingLeftpaddingRightpaddingSide
-
Placeholder:
placeholderColor
-
Root Window:
rootWindowBackgroundColor
-
Rotation:
rotate
-
Shadow:
shadowColorshadowRadiusshadowOpacityshadowOffset
-
SideImage:
leftImageleftImageLeftPaddingleftImageRightPaddingleftImageTopPaddingrightImageRightImageLeftPaddingRightImageRightPaddingRightImageTopPadding
-
Status Bar:
lightStatusBar
-
Table View Cell:
removeSeparatorMargins
-
Tint:
tintOpacityshadeOpacitytoneColortoneOpacity
-
View Controller:
hideNavigationBar
-
Collection View and Collection View Cell - IBAnimatable#53
-
Animatable Slider - IBAnimatable#70
-
Material Design elements - and IBAnimatable#16 and IBAnimatable#55
-
Flat colors -
Motion effect, parallax effect - IBAnimatable#18
-
Segmented Control - IBAnimatable#72
-
Custom dynamic type (text style) - IBAnimatable#73
-
Animations types:
SlideInLeftSlideInRightSlideInDownSlideInUpSlideOutLeftSlideOutRightSlideOutDownSlideOutUpSqueezeInLeftSqueezeInRightSqueezeInDownSqueezeInUpSqueezeOutLeftSqueezeOutRightSqueezeOutDownSqueezeOutUpFadeInFadeOutFadeOutInFadeInOutFadeInLeftFadeInRightFadeInDownFadeInUpFadeOutLeftFadeOutRightFadeOutDownFadeOutUpSqueezeFadeInLeftSqueezeFadeInRightSqueezeFadeInDownSqueezeFadeInUpSqueezeFadeOutLeftSqueezeFadeOutRightSqueezeFadeOutDownSqueezeFadeOutUpZoomInZoomOutShakePopFlipXFlipYMorphSqueezeFlashWobbleSwingRotateMoveToMoveByscale- IBAnimatable#121- Jump - IBAnimatable#75
-
Animation properties:
animationTypeautoRundurationdelaydampingvelocityforcerepeatCount- Animating forever?
repeatCount = Float.Infinit timing: linear and easing
-
Unwind Segue -
Dismiss current ViewController Segue -
Pop to root ViewController Segue -
AnimatablePresentationController: #198- gestureToDismiss (UIDynamics)
-
AnimatableAlertControllerforUIAlertController- Standard Alert
- Action Sheet
-
Ripple effect for user interaction like https://www.google.com/design/spec/animation/responsive-interaction.html#responsive-interaction-user-input
-
Dismissing keyboard automatically when tap outside of the
AnimatableTextField. -
Automatically scrolling the view to follow the keyboard's focus.
Configurable custom transition animations for Push and Pop.Configurable custom transition animations for Present and Dismiss.Configurable gesture interactions for Dismiss and Pop.- Meaningful transition like https://www.google.com/design/spec/animation/meaningful-transitions.html
- More transition like
https://github.com/ColinEberhardt/VCTransitionsLibraryand http://transitiontreasury.com/
- Mock data generator
- Importing Sketch to Swift playground
- Importing Sketch to Storyboard? Maybe too hard.
- Sketch plugin to export
IBAnimatablestyles from Sketch, e.g. generatingOpacity=0.5; fillColor=#336699;from Sketch and easily apply in Interface Builder.
Any suggestions for the vision are welcome, please modify the Roadmap.md file and create a PR. BTW: you can edit it on Github online and create a PR without manually forking the project now.