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
@IBInspectable
properties to reduce numerous amount of code. e.g.fillColor
,cornerRadius
,shadowColor
andshadowOffset
. - 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
IBAnimatable
UI 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
-
@IBDesginable
and@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,
IBAnimatable
supports 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,
IBAnimatable
supports 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)
-
AnimatableAlertController
forUIAlertController
- 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
IBAnimatable
styles 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.