Full Code of Ramotion/animated-tab-bar for AI

master 52174249fa7b cached
110 files
510.4 KB
129.6k tokens
1 requests
Download .txt
Showing preview only (550K chars total). Download the full file or copy to clipboard to get everything.
Repository: Ramotion/animated-tab-bar
Branch: master
Commit: 52174249fa7b
Files: 110
Total size: 510.4 KB

Directory structure:
gitextract_ozh3a0j9/

├── .gitignore
├── .swift-version
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── Package.swift
├── RAMAnimatedTabBarController/
│   ├── Animations/
│   │   ├── BounceAnimation/
│   │   │   └── RAMBounceAnimation.swift
│   │   ├── FrameAnimation/
│   │   │   └── RAMFrameItemAnimation.swift
│   │   ├── FumeAnimation/
│   │   │   └── RAMFumeAnimation.swift
│   │   ├── RotationAnimation/
│   │   │   └── RAMRotationAnimation.swift
│   │   └── TransitionAniamtions/
│   │       └── RAMTransitionItemAnimations.swift
│   ├── BottomLine/
│   │   └── RAMAnimatedTabBarController+BottomLine.swift
│   ├── RAMAnimatedTabBarController.swift
│   ├── RAMAnimatedTabBarItem.swift
│   ├── RAMBadge/
│   │   └── RAMBadge.swift
│   ├── RAMItemAnimationProtocol.swift
│   └── Utilities/
│       └── Collection+Extensions.swift
├── RAMAnimatedTabBarController.podspec
├── RAMAnimatedTabBarDemo/
│   ├── AnimatedTabBarTests/
│   │   ├── AnimatedTabBarTests.swift
│   │   ├── Info.plist
│   │   └── RAMBadgeTests.swift
│   ├── RAMAnimatedTabBarDemo/
│   │   ├── AppDelegate.swift
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.xib
│   │   │   └── Main.storyboard
│   │   ├── Images.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Settings_icon/
│   │   │   │   └── Settings.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Tools/
│   │   │   │   ├── Tools_00028.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00029.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00030.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00031.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00032.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00033.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00034.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00035.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00036.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00037.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00038.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00039.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00040.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00041.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00042.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00043.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00044.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00045.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00046.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00047.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00048.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00049.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00050.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00051.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00052.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00053.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00054.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00055.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00056.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00057.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00058.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00059.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00060.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00061.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00062.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00063.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00064.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── Tools_00065.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── drop/
│   │   │   │   └── drop.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── icon_pin.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── icon_user.imageset/
│   │   │       └── Contents.json
│   │   ├── Info.plist
│   │   ├── Resources/
│   │   │   └── ToolsAnimation.plist
│   │   └── ViewController.swift
│   ├── RAMAnimatedTabBarDemo.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       ├── IDEWorkspaceChecks.plist
│   │   │       └── WorkspaceSettings.xcsettings
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── RAMAnimatedTabBarController.xcscheme
│   └── TabBarLib/
│       ├── Info.plist
│       └── TabBarLib.h
├── README.md
└── docs/
    ├── Classes/
    │   ├── RAMAnimatedTabBarController.html
    │   ├── RAMAnimatedTabBarItem.html
    │   ├── RAMBounceAnimation.html
    │   ├── RAMFrameItemAnimation.html
    │   ├── RAMFumeAnimation.html
    │   ├── RAMItemAnimation.html
    │   ├── RAMRotationAnimation.html
    │   └── RAMTransitionItemAnimations.html
    ├── Classes.html
    ├── css/
    │   ├── highlight.css
    │   └── jazzy.css
    ├── docsets/
    │   ├── RAMAnimatedTabBarDemo.docset/
    │   │   └── Contents/
    │   │       ├── Info.plist
    │   │       └── Resources/
    │   │           ├── Documents/
    │   │           │   ├── Classes/
    │   │           │   │   ├── RAMAnimatedTabBarController.html
    │   │           │   │   ├── RAMAnimatedTabBarItem.html
    │   │           │   │   ├── RAMBounceAnimation.html
    │   │           │   │   ├── RAMFrameItemAnimation.html
    │   │           │   │   ├── RAMFumeAnimation.html
    │   │           │   │   ├── RAMItemAnimation.html
    │   │           │   │   ├── RAMRotationAnimation.html
    │   │           │   │   └── RAMTransitionItemAnimations.html
    │   │           │   ├── Classes.html
    │   │           │   ├── css/
    │   │           │   │   ├── highlight.css
    │   │           │   │   └── jazzy.css
    │   │           │   ├── index.html
    │   │           │   ├── js/
    │   │           │   │   └── jazzy.js
    │   │           │   └── undocumented.txt
    │   │           └── docSet.dsidx
    │   └── RAMAnimatedTabBarDemo.tgz
    ├── index.html
    ├── js/
    │   └── jazzy.js
    └── undocumented.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
# Xcode
#
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
#
# Pods/

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build
Status API Training Shop Blog About Pricing

.DS_Store


================================================
FILE: .swift-version
================================================
4.2


================================================
FILE: .travis.yml
================================================
osx_image: xcode10.2
language: objective-c
xcode_sdk: iphonesimulator12.1

xcode_project: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj
xcode_scheme: RAMAnimatedTabBarController

# whitelist
branches:
only:
- master


================================================
FILE: CHANGELOG.md
================================================


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to a Project
Now that you’ve found the material for understanding the project, here is how you can take action.

### Create an Issue

If you find a bug in a project you’re using (and you don’t know how to fix it), have trouble following the documentation or have a question about the project – create an issue! There’s nothing to it and whatever issue you’re having, you’re likely not the only one, so others will find your issue helpful, too. For more information on how issues work, check out our Issues guide.

#### Issues Pro Tips

Check existing issues for your issue. Duplicating an issue is slower for both parties so search through open and closed issues to see if what you’re running into has been addressed already.
Be clear about what your problem is: what was the expected outcome, what happened instead? Detail how someone else can recreate the problem.
Link to demos recreating the problem on things like JSFiddle or CodePen.
Include system details like what the browser, library or operating system you’re using and its version.
Paste error output or logs in your issue or in a Gist. If pasting them in the issue, wrap it in three backticks: ``` so that it renders nicely.

### Pull Request

If you’re able to patch the bug or add the feature yourself – fantastic, make a pull request with the code! Be sure you’ve read any documents on contributing, understand the license and have signed a CLA if required. Once you’ve submitted a pull request the maintainer(s) can compare your branch to the existing one and decide whether or not to incorporate (pull in) your changes.

#### Pull Request Pro Tips

Fork the repository and clone it locally. Connect your local to the original ‘upstream’ repository by adding it as a remote. Pull in changes from ‘upstream’ often so that you stay up to date so that when you submit your pull request, merge conflicts will be less likely. See more detailed instructions here.
Create a branch for your edits.
Be clear about what problem is occurring and how someone can recreate that problem or why your feature will help. Then be equally as clear about the steps you took to make your changes.
It’s best to test. Run your changes against any existing tests if they exist and create new ones when needed. Whether tests exist or not, make sure your changes don’t break the existing project.
Include screenshots of the before and after if your changes include differences in HTML/CSS. Drag and drop the images into the body of your pull request.
Contribute in the style of the project to the best of your abilities. This may mean using indents, semi colons or comments differently than you would in your own repository, but makes it easier for the maintainer to merge, others to understand and maintain in the future.

#### Open Pull Requests

Once you’ve opened a pull request a discussion will start around your proposed changes. Other contributors and users may chime in, but ultimately the decision is made by the maintainer(s). You may be asked to make some changes to your pull request, if so, add more commits to your branch and push them – they’ll automatically go into the existing pull request.

If your pull request is merged – great! If it is not, no sweat, it may not be what the project maintainer had in mind, or they were already working on it. This happens, so our recommendation is to take any feedback you’ve received and go forth and pull request again – or create your own open source project.

================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2014 Ramotion

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



================================================
FILE: Package.swift
================================================
// swift-tools-version:5.1
//
//  Package.swift
//
//  Copyright (c) Ramotion Inc. (https://www.ramotion.com/)
//
//  Permission is hereby granted, free of charge, to any person obtaining a copy
//  of this software and associated documentation files (the "Software"), to deal
//  in the Software without restriction, including without limitation the rights
//  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
//  copies of the Software, and to permit persons to whom the Software is
//  furnished to do so, subject to the following conditions:
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//
//  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
//  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
//  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
//  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
//  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
//  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
//  THE SOFTWARE.
//

import PackageDescription


let package = Package(
    name: "RAMAnimatedTabBarController",
    platforms: [
        .iOS(.v9)
    ],
    products: [
        .library(name: "RAMAnimatedTabBarController",
            targets: ["RAMAnimatedTabBarController"]),
    ],
    targets: [
        .target(name: "RAMAnimatedTabBarController",
            path: "RAMAnimatedTabBarController")
    ],
    swiftLanguageVersions: [.v5]
)


================================================
FILE: RAMAnimatedTabBarController/Animations/BounceAnimation/RAMBounceAnimation.swift
================================================
//  RAMBounceAnimation.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import UIKit

/// The RAMBounceAnimation class provides bounce animation.
open class RAMBounceAnimation: RAMItemAnimation {

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {
        playBounceAnimation(icon)
        textLabel.textColor = textSelectedColor
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {
        textLabel.textColor = defaultTextColor

        if let iconImage = icon.image {
            let renderMode = defaultIconColor.cgColor.alpha == 0 ? UIImage.RenderingMode.alwaysOriginal :
                UIImage.RenderingMode.alwaysTemplate
            let renderImage = iconImage.withRenderingMode(renderMode)
            icon.image = renderImage
            icon.tintColor = defaultIconColor
        }
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func selectedState(_ icon: UIImageView, textLabel: UILabel) {
        textLabel.textColor = textSelectedColor

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }

    func playBounceAnimation(_ icon: UIImageView) {

        let bounceAnimation = CAKeyframeAnimation(keyPath: Constants.AnimationKeys.scale)
        bounceAnimation.values = [1.0, 1.4, 0.9, 1.15, 0.95, 1.02, 1.0]
        bounceAnimation.duration = TimeInterval(duration)
        bounceAnimation.calculationMode = CAAnimationCalculationMode.cubic

        icon.layer.add(bounceAnimation, forKey: nil)

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }
}


================================================
FILE: RAMAnimatedTabBarController/Animations/FrameAnimation/RAMFrameItemAnimation.swift
================================================
//  RAMFrameItemAnimation.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import QuartzCore
import UIKit

/// The RAMFrameItemAnimation class provides keyframe animation.
open class RAMFrameItemAnimation: RAMItemAnimation {

    @nonobjc fileprivate var animationImages: Array<CGImage> = Array()

    var selectedImage: UIImage!

    /// A Boolean value indicated plaing revers animation when UITabBarItem unselected, if false image change immediately, defalut value true
    @IBInspectable open var isDeselectAnimation: Bool = true

    /// path to array of image names from plist file
    @IBInspectable open var imagesPath: String!

    open override func awakeFromNib() {

        guard let path = Bundle.main.path(forResource: imagesPath, ofType: "plist") else {
            fatalError("don't found plist")
        }

        guard case let animationImagesName as [String] = NSArray(contentsOfFile: path) else {
            fatalError()
        }

        createImagesArray(animationImagesName)

        // selected image
        let selectedImageName = animationImagesName[animationImagesName.endIndex - 1]
        selectedImage = UIImage(named: selectedImageName)
    }

    func createImagesArray(_ imageNames: Array<String>) {
        for name: String in imageNames {
            if let image = UIImage(named: name)?.cgImage {
                animationImages.append(image)
            }
        }
    }

    // MARK: public

    /**
     Set images for keyframe animation

     - parameter images: images for keyframe animation
     */
    open func setAnimationImages(_ images: Array<UIImage>) {
        var animationImages = Array<CGImage>()
        for image in images {
            if let cgImage = image.cgImage {
                animationImages.append(cgImage)
            }
        }
        self.animationImages = animationImages
    }

    // MARK: RAMItemAnimationProtocol

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {

        playFrameAnimation(icon, images: animationImages)
        textLabel.textColor = textSelectedColor
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor _: UIColor) {
        if isDeselectAnimation {
            playFrameAnimation(icon, images: animationImages.reversed())
        }

        textLabel.textColor = defaultTextColor
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func selectedState(_ icon: UIImageView, textLabel: UILabel) {
        icon.image = selectedImage
        textLabel.textColor = textSelectedColor
    }

    @nonobjc func playFrameAnimation(_ icon: UIImageView, images: Array<CGImage>) {
        let frameAnimation = CAKeyframeAnimation(keyPath: Constants.AnimationKeys.keyFrame)
        frameAnimation.calculationMode = CAAnimationCalculationMode.discrete
        frameAnimation.duration = TimeInterval(duration)
        frameAnimation.values = images
        frameAnimation.repeatCount = 1
        frameAnimation.isRemovedOnCompletion = false
        frameAnimation.fillMode = CAMediaTimingFillMode.forwards
        icon.layer.add(frameAnimation, forKey: nil)
    }
}


================================================
FILE: RAMAnimatedTabBarController/Animations/FumeAnimation/RAMFumeAnimation.swift
================================================

//  RAMFumeAnimation.swift
//
// Copyright (c) 12/2/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import UIKit

/// The RAMFumeAnimation class provides bounce animation.
open class RAMFumeAnimation: RAMItemAnimation {

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {
        playMoveIconAnimation(icon, values: [icon.center.y as AnyObject, (icon.center.y + 4.0) as AnyObject])
        playLabelAnimation(textLabel)
        textLabel.textColor = textSelectedColor

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {

        playMoveIconAnimation(icon, values: [(icon.center.y + 4.0) as AnyObject, icon.center.y as AnyObject])
        playDeselectLabelAnimation(textLabel)
        textLabel.textColor = defaultTextColor

        if let iconImage = icon.image {
            let renderMode = defaultIconColor.cgColor.alpha == 0 ? UIImage.RenderingMode.alwaysOriginal :
                UIImage.RenderingMode.alwaysTemplate
            let renderImage = iconImage.withRenderingMode(renderMode)
            icon.image = renderImage
            icon.tintColor = defaultIconColor
        }
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func selectedState(_ icon: UIImageView, textLabel: UILabel) {

        playMoveIconAnimation(icon, values: [(icon.center.y + 12.0) as AnyObject])
        textLabel.alpha = 0
        textLabel.textColor = textSelectedColor

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }

    func playMoveIconAnimation(_ icon: UIImageView, values: [AnyObject]) {

        let yPositionAnimation = createAnimation(Constants.AnimationKeys.positionY, values: values, duration: duration / 2)

        icon.layer.add(yPositionAnimation, forKey: nil)
    }

    // MARK: select animation

    func playLabelAnimation(_ textLabel: UILabel) {

        let yPositionAnimation = createAnimation(Constants.AnimationKeys.positionY, values: [textLabel.center.y as AnyObject, (textLabel.center.y - 60.0) as AnyObject], duration: duration)
        yPositionAnimation.fillMode = CAMediaTimingFillMode.removed
        yPositionAnimation.isRemovedOnCompletion = true
        textLabel.layer.add(yPositionAnimation, forKey: nil)

        let scaleAnimation = createAnimation(Constants.AnimationKeys.scale, values: [1.0 as AnyObject, 2.0 as AnyObject], duration: duration)
        scaleAnimation.fillMode = CAMediaTimingFillMode.removed
        scaleAnimation.isRemovedOnCompletion = true
        textLabel.layer.add(scaleAnimation, forKey: nil)

        let opacityAnimation = createAnimation(Constants.AnimationKeys.opacity, values: [1.0 as AnyObject, 0.0 as AnyObject], duration: duration)
        textLabel.layer.add(opacityAnimation, forKey: nil)
    }

    func createAnimation(_ keyPath: String, values: [AnyObject], duration: CGFloat) -> CAKeyframeAnimation {

        let animation = CAKeyframeAnimation(keyPath: keyPath)
        animation.values = values
        animation.duration = TimeInterval(duration)
        animation.calculationMode = CAAnimationCalculationMode.cubic
        animation.fillMode = CAMediaTimingFillMode.forwards
        animation.isRemovedOnCompletion = false
        return animation
    }

    // MARK: deselect animation

    func playDeselectLabelAnimation(_ textLabel: UILabel) {

        let yPositionAnimation = createAnimation(Constants.AnimationKeys.positionY, values: [(textLabel.center.y + 15) as AnyObject, textLabel.center.y as AnyObject], duration: duration)
        textLabel.layer.add(yPositionAnimation, forKey: nil)

        let opacityAnimation = createAnimation(Constants.AnimationKeys.opacity, values: [0 as AnyObject, 1 as AnyObject], duration: duration)
        textLabel.layer.add(opacityAnimation, forKey: nil)
    }
}


================================================
FILE: RAMAnimatedTabBarController/Animations/RotationAnimation/RAMRotationAnimation.swift
================================================
//  RAMRotationAnimation.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import QuartzCore
import UIKit

/// The RAMRotationAnimation class provides rotation animation.
open class RAMRotationAnimation: RAMItemAnimation {

    /**
     Animation direction

     - Left:  left direction
     - Right: right direction
     */
    public enum RAMRotationDirection {
        case left
        case right
    }

    /// Animation direction (left, right)
    open var direction: RAMRotationDirection!

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {
        playRoatationAnimation(icon)
        textLabel.textColor = textSelectedColor
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {
        textLabel.textColor = defaultTextColor

        if let iconImage = icon.image {
            let renderMode = defaultIconColor.cgColor.alpha == 0 ? UIImage.RenderingMode.alwaysOriginal :
                UIImage.RenderingMode.alwaysTemplate
            let renderImage = iconImage.withRenderingMode(renderMode)
            icon.image = renderImage
            icon.tintColor = defaultIconColor
        }
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func selectedState(_ icon: UIImageView, textLabel: UILabel) {
        textLabel.textColor = textSelectedColor

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }

    func playRoatationAnimation(_ icon: UIImageView) {

        let rotateAnimation = CABasicAnimation(keyPath: Constants.AnimationKeys.rotation)
        rotateAnimation.fromValue = 0.0

        var toValue = CGFloat.pi * 2
        if direction != nil && direction == RAMRotationDirection.left {
            toValue = toValue * -1.0
        }

        rotateAnimation.toValue = toValue
        rotateAnimation.duration = TimeInterval(duration)

        icon.layer.add(rotateAnimation, forKey: nil)

        if let iconImage = icon.image {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }
    }
}

/// The RAMLeftRotationAnimation class provides letf rotation animation.
open class RAMLeftRotationAnimation: RAMRotationAnimation {

    public override init() {
        super.init()
        direction = RAMRotationDirection.left
    }
}

/// The RAMRightRotationAnimation class provides rigth rotation animation.
open class RAMRightRotationAnimation: RAMRotationAnimation {

    public override init() {
        super.init()
        direction = RAMRotationDirection.right
    }
}


================================================
FILE: RAMAnimatedTabBarController/Animations/TransitionAniamtions/RAMTransitionItemAnimations.swift
================================================
//  RAMTransitionItemAnimations.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import UIKit

/// Transition animtion
open class RAMTransitionItemAnimations: RAMItemAnimation {

    ///  Options for animating. Default TransitionNone
    open var transitionOptions: UIView.AnimationOptions!

    override init() {
        super.init()

        transitionOptions = UIView.AnimationOptions()
    }

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {

        selectedColor(icon, textLabel: textLabel)

        UIView.transition(with: icon, duration: TimeInterval(duration), options: transitionOptions, animations: {
        }, completion: { _ in
        })
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {

        if let iconImage = icon.image {
            let renderMode = defaultIconColor.cgColor.alpha == 0 ? UIImage.RenderingMode.alwaysOriginal :
                UIImage.RenderingMode.alwaysTemplate
            let renderImage = iconImage.withRenderingMode(renderMode)
            icon.image = renderImage
            icon.tintColor = defaultIconColor
        }
        textLabel.textColor = defaultTextColor
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open override func selectedState(_ icon: UIImageView, textLabel: UILabel) {

        selectedColor(icon, textLabel: textLabel)
    }

    func selectedColor(_ icon: UIImageView, textLabel: UILabel) {

        if let iconImage = icon.image, iconSelectedColor != nil {
            let renderImage = iconImage.withRenderingMode(.alwaysTemplate)
            icon.image = renderImage
            icon.tintColor = iconSelectedColor
        }

        textLabel.textColor = textSelectedColor
    }
}

open class RAMFlipLeftTransitionItemAnimations: RAMTransitionItemAnimations {

    public override init() {
        super.init()

        transitionOptions = UIView.AnimationOptions.transitionFlipFromLeft
    }
}

open class RAMFlipRightTransitionItemAnimations: RAMTransitionItemAnimations {

    public override init() {
        super.init()

        transitionOptions = UIView.AnimationOptions.transitionFlipFromRight
    }
}

open class RAMFlipTopTransitionItemAnimations: RAMTransitionItemAnimations {

    public override init() {
        super.init()

        transitionOptions = UIView.AnimationOptions.transitionFlipFromTop
    }
}

open class RAMFlipBottomTransitionItemAnimations: RAMTransitionItemAnimations {

    public override init() {
        super.init()

        transitionOptions = UIView.AnimationOptions.transitionFlipFromBottom
    }
}


================================================
FILE: RAMAnimatedTabBarController/BottomLine/RAMAnimatedTabBarController+BottomLine.swift
================================================
// Copyright (c) 03/05/2018. Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import Foundation
import UIKit

extension RAMAnimatedTabBarController {
    
    func createBottomLine() {
        guard let currentItem = containers.first else { return }
        
        let container = UIView()
        container.backgroundColor = .clear
        container.translatesAutoresizingMaskIntoConstraints = false
        
        view.addSubview(container)
        
        container.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
        container.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
        container.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        container.heightAnchor.constraint(equalToConstant: bottomLineHeight).isActive = true
        
        
        let line = UIView()
        line.backgroundColor = bottomLineColor
        line.translatesAutoresizingMaskIntoConstraints = false
        container.addSubview(line)
        bottomLine = line
        
        lineLeadingConstraint = bottomLine?.leadingAnchor.constraint(equalTo: currentItem.leadingAnchor)
        lineLeadingConstraint?.isActive = true
        
        lineHeightConstraint = bottomLine?.heightAnchor.constraint(equalToConstant: bottomLineHeight)
        lineHeightConstraint?.isActive = true
        
        // add constraints
        bottomLine?.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
        bottomLine?.widthAnchor.constraint(equalTo: currentItem.widthAnchor).isActive = true
    }
    
    func removeBottomLine() {
        guard let bottomLine = self.bottomLine else { return }

        bottomLine.superview?.removeFromSuperview()
        self.bottomLine = nil
        lineLeadingConstraint?.isActive = false
        lineLeadingConstraint = nil
    }
    
    func setBottomLinePosition(index: Int, animated: Bool = true) {
        guard let itemsCount = tabBar.items?.count, itemsCount > index,
        let currentItem = containers.at(index) else { return }
        
        lineLeadingConstraint?.isActive = false
        
        lineLeadingConstraint = bottomLine?.leadingAnchor.constraint(equalTo: currentItem.leadingAnchor)
        lineLeadingConstraint?.isActive = true
        
        if animated {
            UIView.animate(withDuration: bottomLineMoveDuration) { self.bottomLine?.superview?.layoutIfNeeded() }
        } else {
            self.bottomLine?.superview?.layoutIfNeeded()
        }
    }
    
    func updateBottomLineHeight(to height: CGFloat) {
        lineHeightConstraint?.isActive = false
        
        lineHeightConstraint = bottomLine?.heightAnchor.constraint(equalToConstant: height)
        lineHeightConstraint?.isActive = true
    }
}


================================================
FILE: RAMAnimatedTabBarController/RAMAnimatedTabBarController.swift
================================================
//  RAMAnimatedTabBarController.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import UIKit

/// UITabBarController with item animations
open class RAMAnimatedTabBarController: UITabBarController {
    
    /**
     The animated items displayed by the tab bar.
     **/
    open var animatedItems: [RAMAnimatedTabBarItem] {
        return tabBar.items as? [RAMAnimatedTabBarItem] ?? []
    }
    
    
    /**
     Show bottom line for indicating selected item, default value is false
     **/
    open var isBottomLineShow: Bool = false {
        didSet {
            if isBottomLineShow {
                if bottomLine == nil { createBottomLine() }
            } else {
                if bottomLine != nil { removeBottomLine() }
            }
        }
    }
    
    /**
      Bottom line color
     **/
    open var bottomLineColor: UIColor = .black {
        didSet {
            bottomLine?.backgroundColor = bottomLineColor
        }
    }
    
    /**
     Bottom line height
     **/
    open var bottomLineHeight: CGFloat = 2 {
        didSet {
            if bottomLineHeight > 0 {
                updateBottomLineHeight(to: bottomLineHeight)
            }
        }
    }
    
    /**
     Bottom line time of animations duration
     **/
    open var bottomLineMoveDuration: TimeInterval = 0.3

    private(set) var containers: [UIView] = []
    
    open override var viewControllers: [UIViewController]? {
        didSet {
            initializeContainers()
        }
    }
    
    open override func setViewControllers(_ viewControllers: [UIViewController]?, animated: Bool) {
        super.setViewControllers(viewControllers, animated: animated)
        initializeContainers()
    }
    
    open override var selectedIndex: Int {
        didSet {
           self.setBottomLinePosition(index: selectedIndex)
        }
    }

    open override var selectedViewController: UIViewController? {
        willSet {
            guard let vc = newValue,
                let index = viewControllers?.firstIndex(of: vc) else { return }
            handleSelection(index: index)
        }
    }
    
    var lineHeightConstraint: NSLayoutConstraint?
    var lineLeadingConstraint: NSLayoutConstraint?
    var bottomLine: UIView?
    var arrBottomAnchor:[NSLayoutConstraint] = []
    var arrViews: [UIView] = []
    
    /**
     Hide UITabBar

     - parameter isHidden: A Boolean indicating whether the UITabBarController is displayed
     */
    @available(*, deprecated, message: "Now you can use UITabBar isHidden")
    open func animationTabBarHidden(_ isHidden: Bool) {
        tabBar.isHidden = isHidden
    }
    
    // MARK: life circle

    open override func viewDidLoad() {
        super.viewDidLoad()
        initializeContainers()
    }

    override open func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        coordinator.animate(alongsideTransition: { (transitionCoordinatorContext) -> Void in
            self.layoutContainers()
        }, completion: { (transitionCoordinatorContext) -> Void in
            //refresh view once rotation is completed not in will transition as it returns incorrect frame size.Refresh here
        })
        super.viewWillTransition(to: size, with: coordinator)
    }
    
    // MARK: create methods
    private func initializeContainers() {
        containers.forEach { $0.removeFromSuperview() }
        containers.removeAll()
        
        guard let items = tabBar.items else { return }
        guard items.count <= 5 else { fatalError("More button not supported") }
        
        for index in 0 ..< items.count {
            let viewContainer = UIView()
            viewContainer.isExclusiveTouch = true
            viewContainer.tag = index
            let tapGesture = UITapGestureRecognizer(target: self, action: #selector(itemTap))
            viewContainer.addGestureRecognizer(tapGesture)
            tabBar.addSubview(viewContainer)
            containers.append(viewContainer)
        }
                
        if !containers.isEmpty {
            createCustomIcons(containers: containers)
        }
        
        layoutContainers()
    }
    
    private func layoutContainers() {
        let itemWidth = tabBar.bounds.width / CGFloat(containers.count)
        let isRTL = tabBar.userInterfaceLayoutDirection == .rightToLeft
        
        for (index, container) in containers.enumerated() {
            let i = isRTL ? (containers.count - 1 - index) : index
            let frame = CGRect(x: itemWidth * CGFloat(i), y: 0, width: itemWidth, height: Theme.tabBarHeight)
            container.frame = frame
            
            if let item = tabBar.items?.at(index) as? RAMAnimatedTabBarItem {
                let iconView = item.iconView?.icon
                let iconSize = iconView?.image?.size ?? CGSize(width: 30, height: 30)
                let iconX = (container.frame.width - iconSize.width) / 2 + item.titlePositionAdjustment.horizontal
                let iconY = (container.frame.height - iconSize.height) / 2 + Theme.defaultIconVerticalOffset + item.titlePositionAdjustment.vertical
                iconView?.frame = CGRect(x: iconX, y: iconY, width: iconSize.width, height: iconSize.height)
                
                let label = item.iconView?.textLabel
                let labelSize = label?.sizeThatFits(CGSize.zero) ?? CGSize(width: tabBar.frame.size.width / CGFloat(containers.count), height: 20)
                let labelX = (container.frame.width - labelSize.width) / 2 + item.titlePositionAdjustment.horizontal
                let labelY = (container.frame.height) / 2 + Theme.defaultTitleVerticalOffset + item.titlePositionAdjustment.vertical
                label?.frame = CGRect(x: labelX, y: labelY, width: labelSize.width, height: labelSize.height)
            }
        }
    }
    
    private func createCustomIcons(containers: [UIView]) {
        guard let items = tabBar.items as? [RAMAnimatedTabBarItem] else {
            fatalError("items must inherit RAMAnimatedTabBarItem")
        }

        for (index, item) in items.enumerated() {
            let container = containers[index]
            let renderMode = item.iconColor.cgColor.alpha == 0 ? UIImage.RenderingMode.alwaysOriginal :
                UIImage.RenderingMode.alwaysTemplate

            
            let iconImage = item.image ?? item.iconView?.icon.image
            let icon = UIImageView(image: iconImage?.withRenderingMode(renderMode))
            icon.tintColor = item.iconColor
            icon.highlightedImage = item.selectedImage?.withRenderingMode(renderMode)
            container.addSubview(icon)

            
            let textLabel = UILabel()
            if let title = item.title, !title.isEmpty {
                textLabel.text = title
            } else {
                textLabel.text = item.iconView?.textLabel.text
            }
            textLabel.backgroundColor = UIColor.clear
            textLabel.textColor = item.textColor
            textLabel.font =  UIFont.systemFont(ofSize: item.textFontSize)
            textLabel.textAlignment = NSTextAlignment.center
            container.addSubview(textLabel)
            
            
            container.backgroundColor = (items as [RAMAnimatedTabBarItem])[index].bgDefaultColor
            if item.isEnabled == false {
                icon.alpha = 0.5
                textLabel.alpha = 0.5
            }
            item.iconView = (icon: icon, textLabel: textLabel)
            
            if 0 == index { // selected first elemet
                item.selectedState()
                container.backgroundColor = (items as [RAMAnimatedTabBarItem])[index].bgSelectedColor
            } else {
                item.deselectedState()
                container.backgroundColor = (items as [RAMAnimatedTabBarItem])[index].bgDefaultColor
            }

            item.image = nil
            item.title = ""
        }
    }
    
    // MARK: actions
    @objc private func itemTap(gesture: UITapGestureRecognizer) {
        guard let index = gesture.view?.tag else { return }
        handleSelection(index: index)
    }
    
    private func handleSelection(index: Int) {
        guard let items = tabBar.items as? [RAMAnimatedTabBarItem] else { return }
        let currentIndex = index

        if items[currentIndex].isEnabled == false { return }

        let controller = children[currentIndex]

        if let shouldSelect = delegate?.tabBarController?(self, shouldSelect: controller)
            , !shouldSelect {
            return
        }

        if selectedIndex != currentIndex {
            let previousItem = items.at(selectedIndex)
            let previousContainer: UIView? = previousItem?.iconView?.icon.superview
            previousContainer?.backgroundColor = items[selectedIndex].bgDefaultColor
            previousItem?.deselectAnimation()

            let currentItem: RAMAnimatedTabBarItem = items[currentIndex]
            currentItem.playAnimation()
            let currentContainer: UIView? = currentItem.iconView?.icon.superview
            currentContainer?.backgroundColor = items[currentIndex].bgSelectedColor

            selectedIndex = index
        } else {
            if let navVC = viewControllers?[selectedIndex] as? UINavigationController {
                navVC.popToRootViewController(animated: true)
            }
        }
        delegate?.tabBarController?(self, didSelect: controller)
    }
}


extension RAMAnimatedTabBarController {

    /**
     Change selected color for each UITabBarItem

     - parameter textSelectedColor: set new color for text
     - parameter iconSelectedColor: set new color for icon
     */
    open func changeSelectedColor(_ textSelectedColor: UIColor, iconSelectedColor: UIColor) {

        let items = tabBar.items as! [RAMAnimatedTabBarItem]
        for index in 0 ..< items.count {
            let item = items[index]

            item.animation.textSelectedColor = textSelectedColor
            item.animation.iconSelectedColor = iconSelectedColor

            if item == tabBar.selectedItem {
                item.selectedState()
            }
        }
    }

    /**
     Selected UITabBarItem with animaton

     - parameter from: Index for unselected animation
     - parameter to:   Index for selected animation
     */
    open func setSelectIndex(from: Int, to: Int) {
        selectedIndex = to
        guard let items = tabBar.items as? [RAMAnimatedTabBarItem] else {
            fatalError("items must inherit RAMAnimatedTabBarItem")
        }

        let containerFrom = items[from].iconView?.icon.superview
        containerFrom?.backgroundColor = items[from].bgDefaultColor
        items[from].deselectAnimation()

        let containerTo = items[to].iconView?.icon.superview
        containerTo?.backgroundColor = items[to].bgSelectedColor
        items[to].playAnimation()
    }
}


extension RAMAnimatedTabBarController {
    enum Theme {
        public static let tabBarHeight: CGFloat = 49
        public static let defaultTitleVerticalOffset: CGFloat = 10
        public static let defaultIconVerticalOffset: CGFloat = -5
    }
}


extension UIView {
    var userInterfaceLayoutDirection: UIUserInterfaceLayoutDirection {
        return UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute)
    }
}


================================================
FILE: RAMAnimatedTabBarController/RAMAnimatedTabBarItem.swift
================================================
//  RAMAnimatedTabBarItem.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import Foundation
import UIKit

/// UITabBarItem with animation
open class RAMAnimatedTabBarItem: UITabBarItem {

    open override var isEnabled: Bool {
        didSet {
            iconView?.icon.alpha = isEnabled == true ? 1 : 0.5
            iconView?.textLabel.alpha = isEnabled == true ? 1 : 0.5
        }
    }
    
    /// Animation for UITabBarItem. Use RAMFumeAnimation, RAMBounceAnimation, RAMRotationAnimation, RAMFrameItemAnimation, RAMTransitionAnimation
    /// Also posible create custom anmation inherit from the RAMItemAnimation look for https://github.com/Ramotion/animated-tab-bar#creating-custom-animations
    @IBOutlet open var animation: RAMItemAnimation!

    /// The font used to render the UITabBarItem text.
    @IBInspectable open var textFontSize: CGFloat = 10

    /// The color of the UITabBarItem text.
    @IBInspectable open var textColor: UIColor = #colorLiteral(red: 0.5079551811, green: 0.5472556715, blue: 0.6011400746, alpha: 1)

    /// The tint color of the UITabBarItem icon.
    @IBInspectable open var iconColor: UIColor = UIColor.clear // if alpha color is 0 color ignoring

    open var bgDefaultColor: UIColor = UIColor.clear // background color
    open var bgSelectedColor: UIColor = UIColor.clear

    //  The current badge value
    open var badge: RAMBadge? // use badgeValue to show badge

    // Container for icon and text in UITableItem.
    open var iconView: (icon: UIImageView, textLabel: UILabel)?

    /**
     Start selected animation
     */
    open func playAnimation() {

        assert(animation != nil, "add animation in UITabBarItem")
        guard animation != nil, let iconView = iconView else {
            return
        }
        animation.playAnimation(iconView.icon, textLabel: iconView.textLabel)
    }

    /**
     Start unselected animation
     */
    open func deselectAnimation() {

        guard animation != nil && iconView != nil else {
            return
        }

        animation.deselectAnimation(
            iconView!.icon,
            textLabel: iconView!.textLabel,
            defaultTextColor: textColor,
            defaultIconColor: iconColor)
    }

    /**
     Set selected state without animation
     */
    open func selectedState() {
        guard animation != nil, let iconView = iconView else {
            return
        }

        animation.selectedState(iconView.icon, textLabel: iconView.textLabel)
    }
    
    /**
     Set deselected state without animation
     */
    open func deselectedState() {
        guard animation != nil && iconView != nil else {
            return
        }
        
        animation.deselectedState(iconView!.icon, textLabel: iconView!.textLabel)
    }
}


// MARK: Custom Badge
extension RAMAnimatedTabBarItem {

    /// The current badge value
    open override var badgeValue: String? {
        get {
            return badge?.text
        }
        set(newValue) {

            if newValue == nil {
                badge?.removeFromSuperview()
                badge = nil
                return
            }

            if let iconView = iconView, let contanerView = iconView.icon.superview, badge == nil {
                badge = RAMBadge.badge()
                badge?.addBadgeOnView(contanerView)
            }

            badge?.text = newValue
        }
    }
}


================================================
FILE: RAMAnimatedTabBarController/RAMBadge/RAMBadge.swift
================================================
//  RAMBadge.swift
//
// Copyright (c) 17/12/15 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE

import UIKit

open class RAMBadge: UILabel {

    internal var topConstraint: NSLayoutConstraint?
    internal var centerXConstraint: NSLayoutConstraint?

    open class func badge() -> RAMBadge {
        return RAMBadge(frame: CGRect(x: 0, y: 0, width: 18, height: 18))
    }

    public override init(frame: CGRect) {
        super.init(frame: frame)

        layer.backgroundColor = UIColor.red.cgColor
        layer.cornerRadius = frame.size.width / 2

        configureNumberLabel()

        translatesAutoresizingMaskIntoConstraints = false

        // constraints
        createSizeConstraints(frame.size)
    }

    open override var intrinsicContentSize: CGSize {
        var contentSize = super.intrinsicContentSize
        contentSize.width += 10.0
        return contentSize
    }

    public required init?(coder _: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // PRAGMA: create

    internal func createSizeConstraints(_ size: CGSize) {
        let widthConstraint = NSLayoutConstraint(
            item: self,
            attribute: .width,
            relatedBy: .greaterThanOrEqual,
            toItem: nil,
            attribute: .notAnAttribute,
            multiplier: 1,
            constant: size.width)
        addConstraint(widthConstraint)

        let heightConstraint = NSLayoutConstraint(
            item: self,
            attribute: .height,
            relatedBy: .equal,
            toItem: nil,
            attribute: NSLayoutConstraint.Attribute.notAnAttribute,
            multiplier: 1,
            constant: size.height)
        addConstraint(heightConstraint)
    }

    fileprivate func configureNumberLabel() {
        textAlignment = .center
        font = .systemFont(ofSize: 13)
        textColor = .white
    }

    // PRAGMA: public

    open func addBadgeOnView(_ onView: UIView) {

        onView.addSubview(self)

        // create constraints
        let top = NSLayoutConstraint(item: self,
                                           attribute: .top,
                                           relatedBy: .equal,
                                           toItem: onView,
                                           attribute: .top,
                                           multiplier: 1,
                                           constant: 3)
        onView.addConstraint(top)
        topConstraint = top

        let centerX = NSLayoutConstraint(item: self,
                                               attribute: .centerX,
                                               relatedBy: .equal,
                                               toItem: onView,
                                               attribute: .centerX,
                                               multiplier: 1,
                                               constant: 10)
        onView.addConstraint(centerX)
        centerXConstraint = centerX
    }
}


================================================
FILE: RAMAnimatedTabBarController/RAMItemAnimationProtocol.swift
================================================
//  RAMItemAnimationProtocol.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import Foundation
import UIKit

public protocol RAMItemAnimationProtocol {

    func playAnimation(_ icon: UIImageView, textLabel: UILabel)
    func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor)
    func selectedState(_ icon: UIImageView, textLabel: UILabel)
}

/// Base class for UITabBarItems animation
open class RAMItemAnimation: NSObject, RAMItemAnimationProtocol {

    // MARK: constants

    struct Constants {

        struct AnimationKeys {

            static let scale = "transform.scale"
            static let rotation = "transform.rotation"
            static let keyFrame = "contents"
            static let positionY = "position.y"
            static let opacity = "opacity"
        }
    }

    // MARK: properties

    /// The duration of the animation
    @IBInspectable open var duration: CGFloat = 0.5

    ///  The text color in selected state.
    @IBInspectable open var textSelectedColor: UIColor = UIColor(red: 0, green: 0.478431, blue: 1, alpha: 1)

    ///  The icon color in selected state.
    @IBInspectable open var iconSelectedColor: UIColor!

    /**
     Start animation, method call when UITabBarItem is selected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open func playAnimation(_: UIImageView, textLabel _: UILabel) {
        fatalError("override method in subclass")
    }

    /**
     Start animation, method call when UITabBarItem is unselected

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     - parameter defaultTextColor: default UITabBarItem text color
     - parameter defaultIconColor: default UITabBarItem icon color
     */
    open func deselectAnimation(_: UIImageView, textLabel _: UILabel, defaultTextColor _: UIColor, defaultIconColor _: UIColor) {
        fatalError("override method in subclass")
    }

    /**
     Method call when TabBarController did load

     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open func selectedState(_: UIImageView, textLabel _: UILabel) {
        fatalError("override method in subclass")
    }
    
    /**
     (Optional) Method call when TabBarController did load
     
     - parameter icon:      animating UITabBarItem icon
     - parameter textLabel: animating UITabBarItem textLabel
     */
    open func deselectedState(_: UIImageView, textLabel _: UILabel) {}
}


================================================
FILE: RAMAnimatedTabBarController/Utilities/Collection+Extensions.swift
================================================
//  Collection+Extensions.swift
//
// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.

import Foundation

extension Collection where Self.Index == Self.Indices.Iterator.Element {
    /**
     Returns an optional element. If the `index` does not exist in the collection, the subscript returns nil.

     - parameter safe: The index of the element to return, if it exists.

     - returns: An optional element from the collection at the specified index.
     */
    public subscript(safe i: Index) -> Self.Iterator.Element? {
        return at(i)
    }

    /**
     Returns an optional element. If the `index` does not exist in the collection, the function returns nil.

     - parameter index: The index of the element to return, if it exists.

     - returns: An optional element from the collection at the specified index.
     */
    public func at(_ i: Index) -> Self.Iterator.Element? {
        return indices.contains(i) ? self[i] : nil
    }
}


================================================
FILE: RAMAnimatedTabBarController.podspec
================================================
Pod::Spec.new do |s|
  s.name = 'RAMAnimatedTabBarController'
  s.version = '5.2.0'
  s.license = 'MIT'
  s.summary = 'RAMAnimatedTabBarController is a Swift module for adding animation to tabbar items.'
  s.homepage = 'https://github.com/Ramotion/animated-tab-bar'
  s.authors = { 'Juri Vasylenko' => 'juri.v@ramotion.com' }
  s.source = { :git => 'https://github.com/Ramotion/animated-tab-bar.git', :tag => s.version.to_s }
  s.ios.deployment_target = '9.0'
  s.source_files = "RAMAnimatedTabBarController/*.swift", "RAMAnimatedTabBarController/**/*.swift"
end


================================================
FILE: RAMAnimatedTabBarDemo/AnimatedTabBarTests/AnimatedTabBarTests.swift
================================================
//
//  AnimatedTabBarTests.swift
//  AnimatedTabBarTests
//
//  Created by Alex K on 17/08/2018.
//  Copyright © 2018 Ramotion. All rights reserved.
//

import XCTest
@testable import Animated_Tab_Bar

class AnimatedTabBarTests: XCTestCase {
    
    var tabBarController: RAMAnimatedTabBarController!
    
    override func setUp() {
        super.setUp()
        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        tabBarController = storyboard.instantiateViewController(withIdentifier: "RAMAnimatedTabBarController") as? RAMAnimatedTabBarController
        _ = tabBarController.view
        
    }
    override func tearDown() {
        super.tearDown()
    }
    
    func testCreateController() {
        XCTAssertNotNil(tabBarController)
    }
    
    func testIsBottomLineShowen() {
        
        XCTAssertEqual(tabBarController.bottomLine, nil)

        tabBarController.isBottomLineShow = true
        XCTAssertNotNil(tabBarController.bottomLine)
        
        tabBarController.isBottomLineShow = false
        XCTAssertEqual(tabBarController.bottomLine, nil)
    }
    
    func testChangeSelectedColor() {
        let selectedColor = UIColor.red
        let iconSelectedColor = UIColor.green
        tabBarController.changeSelectedColor(selectedColor, iconSelectedColor: iconSelectedColor)
        
        tabBarController.animatedItems.forEach {
            XCTAssertEqual($0.animation.textSelectedColor, selectedColor)
            XCTAssertEqual($0.animation.iconSelectedColor, iconSelectedColor)
        }
    }
    
    func testAnimationBarHidden() {
    
        XCTAssertEqual(tabBarController.tabBar.isHidden, false)
        tabBarController.animatedItems.forEach {
            XCTAssertEqual($0.iconView?.icon.superview?.isHidden, false)
        }
        
        tabBarController.animationTabBarHidden(true)
        
        XCTAssertEqual(tabBarController.tabBar.isHidden, true)
        tabBarController.animatedItems.forEach {
            XCTAssertEqual($0.iconView?.icon.superview?.isHidden, true)
        }
    }
    
    func testSelectIndex() {
        let toIndex = 2
        tabBarController.setSelectIndex(from: 0, to: toIndex)
        XCTAssertEqual(tabBarController.selectedIndex, toIndex)
    }
    
    func testAnimatedItems() {
        XCTAssertEqual(tabBarController.viewControllers?.count, tabBarController.animatedItems.count)
    }
    
    func testIsBottomLineShow() {
        XCTAssertEqual(tabBarController.isBottomLineShow, false)
        XCTAssertNil(tabBarController.bottomLine)
        tabBarController.isBottomLineShow = true
        
        XCTAssertEqual(tabBarController.isBottomLineShow, true)
        XCTAssertNotNil(tabBarController.bottomLine)
    }
    
    func testBottomLineColor() {
        let color = UIColor.red
        tabBarController.isBottomLineShow = true
        XCTAssertNotEqual(tabBarController.bottomLine, color)
        tabBarController.bottomLineColor = color
        XCTAssertEqual(tabBarController.bottomLineColor, color)
    }
    
    func testContainersCount() {
        XCTAssertEqual(tabBarController.viewControllers?.count, tabBarController.containers.count)
    }
    
    func testBadge() {
        let value = "1"
        tabBarController.animatedItems.first?.badgeValue = value
        XCTAssertEqual(tabBarController.animatedItems.first?.badgeValue, tabBarController.animatedItems.first?.badge?.text)
    }
    
    func testIsEnabled() {
        guard let item = tabBarController.animatedItems.first else { return }
        item.isEnabled = true
        XCTAssertEqual(item.iconView?.icon.alpha, 1)
        XCTAssertEqual(item.iconView?.textLabel.alpha, 1)
        
        item.isEnabled = false
        XCTAssertEqual(item.iconView?.icon.alpha, 0.5)
        XCTAssertEqual(item.iconView?.textLabel.alpha, 0.5)
    }
    
}


================================================
FILE: RAMAnimatedTabBarDemo/AnimatedTabBarTests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>$(DEVELOPMENT_LANGUAGE)</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>BNDL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>1</string>
</dict>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/AnimatedTabBarTests/RAMBadgeTests.swift
================================================
import XCTest
@testable import Animated_Tab_Bar

class RAMBadgeTests: XCTestCase {
    
    var badge: RAMBadge!

    override func setUp() {
        badge = RAMBadge.badge()
    }

    func testCreateBadge() {
        XCTAssertNotNil(badge)
    }
    
    func testAddBadgeOnView() {
        let view = UIView()
        XCTAssertNil(badge.superview)
        badge.addBadgeOnView(view)
        XCTAssertNotNil(badge.superview)
        XCTAssertNotNil(badge.topConstraint)
        XCTAssertNotNil(badge.centerXConstraint)
    }
}


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  RAMAnimatedTabBarDemo
//
//  Created by Alex Kalinkin on 11/18/14.
//  Copyright (c) 2014 Ramotion. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {        
        return true
    }
}


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Base.lproj/LaunchScreen.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  Copyright (c) 2014 Ramotion. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
                    <rect key="frame" x="20" y="439" width="441" height="21"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                    <nil key="highlightedColor"/>
                </label>
                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Animated Tab Bar" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
                    <rect key="frame" x="93.5" y="218.5" width="294" height="43"/>
                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                    <nil key="highlightedColor"/>
                </label>
            </subviews>
            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="SHs-oA-M0R"/>
                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
            </constraints>
            <nil key="simulatedStatusBarMetrics"/>
            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
            <point key="canvasLocation" x="548" y="455"/>
        </view>
    </objects>
</document>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15400" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="QjJ-1j-Kct">
    <device id="retina4_7" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15404"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Item-->
        <scene sceneID="Y99-CA-jqU">
            <objects>
                <viewController id="wJE-Q4-t8C" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="PmG-Vl-9D1">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Fume Animation" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="UxN-OP-GHb">
                                <rect key="frame" x="93" y="317.5" width="189" height="32.5"/>
                                <fontDescription key="fontDescription" type="system" pointSize="27"/>
                                <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="cbk-oV-z7H" firstAttribute="centerX" secondItem="UxN-OP-GHb" secondAttribute="centerX" id="1l9-FQ-w0o"/>
                            <constraint firstAttribute="centerY" secondItem="UxN-OP-GHb" secondAttribute="centerY" id="5ae-83-gzq"/>
                        </constraints>
                        <viewLayoutGuide key="safeArea" id="cbk-oV-z7H"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item" image="drop" id="tS2-0E-St8" customClass="RAMAnimatedTabBarItem" customModule="Animated_Tab_Bar" customModuleProvider="target">
                        <connections>
                            <outlet property="animation" destination="Lky-Hp-l9U" id="r67-ap-cxK"/>
                        </connections>
                    </tabBarItem>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="zW4-Q6-RN5" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <customObject id="Lky-Hp-l9U" customClass="RAMFumeAnimation" customModule="Animated_Tab_Bar" customModuleProvider="target">
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="number" keyPath="duration">
                            <real key="value" value="0.40000000000000002"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </customObject>
            </objects>
            <point key="canvasLocation" x="1349" y="-239"/>
        </scene>
        <!--Item1-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="ViewController" customModule="Animated_Tab_Bar" customModuleProvider="target" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Transition Animation" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AeA-ED-4jL">
                                <rect key="frame" x="69.5" y="317.5" width="236" height="32.5"/>
                                <fontDescription key="fontDescription" type="system" pointSize="27"/>
                                <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="centerY" secondItem="AeA-ED-4jL" secondAttribute="centerY" id="Ifi-6x-Ruv"/>
                            <constraint firstItem="8ec-QI-6Cw" firstAttribute="centerX" secondItem="AeA-ED-4jL" secondAttribute="centerX" id="gXX-8c-cGG"/>
                        </constraints>
                        <viewLayoutGuide key="safeArea" id="8ec-QI-6Cw"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item1" image="icon_pin" id="lUH-JS-dWf" customClass="RAMAnimatedTabBarItem" customModule="Animated_Tab_Bar" customModuleProvider="target">
                        <connections>
                            <outlet property="animation" destination="CzN-js-aQV" id="gvH-Rf-Hp8"/>
                        </connections>
                    </tabBarItem>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
                <customObject id="CzN-js-aQV" customClass="RAMFlipLeftTransitionItemAnimations" customModule="Animated_Tab_Bar" customModuleProvider="target">
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="color" keyPath="iconSelectedColor">
                            <color key="value" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="color" keyPath="textSelectedColor">
                            <color key="value" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </customObject>
            </objects>
            <point key="canvasLocation" x="1349" y="479"/>
        </scene>
        <!--Item2-->
        <scene sceneID="quI-1J-que">
            <objects>
                <viewController id="DFF-lT-Wr8" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="DX2-Ge-a2o">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rotation Animation" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="juj-np-Jde">
                                <rect key="frame" x="77.5" y="317.5" width="220.5" height="32.5"/>
                                <fontDescription key="fontDescription" type="system" pointSize="27"/>
                                <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstAttribute="centerY" secondItem="juj-np-Jde" secondAttribute="centerY" id="5B9-09-yru"/>
                            <constraint firstItem="VaI-Rh-DC9" firstAttribute="centerX" secondItem="juj-np-Jde" secondAttribute="centerX" id="JZ0-P4-3th"/>
                        </constraints>
                        <viewLayoutGuide key="safeArea" id="VaI-Rh-DC9"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item2" image="icon_user" id="z5N-yh-KHH" customClass="RAMAnimatedTabBarItem" customModule="Animated_Tab_Bar" customModuleProvider="target">
                        <connections>
                            <outlet property="animation" destination="SMy-mk-LC7" id="MkP-KN-27u"/>
                        </connections>
                    </tabBarItem>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="3Cn-qd-9Vu" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <customObject id="SMy-mk-LC7" customClass="RAMLeftRotationAnimation" customModule="Animated_Tab_Bar" customModuleProvider="target">
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="color" keyPath="textSelectedColor">
                            <color key="value" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </customObject>
            </objects>
            <point key="canvasLocation" x="1349" y="1228"/>
        </scene>
        <!--Animated Tab Bar Controller-->
        <scene sceneID="ovl-w5-59e">
            <objects>
                <tabBarController storyboardIdentifier="RAMAnimatedTabBarController" automaticallyAdjustsScrollViewInsets="NO" id="QjJ-1j-Kct" customClass="RAMAnimatedTabBarController" customModule="Animated_Tab_Bar" customModuleProvider="target" sceneMemberID="viewController">
                    <toolbarItems/>
                    <nil key="simulatedBottomBarMetrics"/>
                    <tabBar key="tabBar" contentMode="scaleToFill" id="Xsb-sw-RJ2">
                        <rect key="frame" x="0.0" y="0.0" width="1000" height="1000"/>
                        <autoresizingMask key="autoresizingMask"/>
                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
                    </tabBar>
                    <connections>
                        <segue destination="eCt-4k-9Vu" kind="relationship" relationship="viewControllers" id="WZh-Xs-WLh"/>
                        <segue destination="BYZ-38-t0r" kind="relationship" relationship="viewControllers" id="d4b-9o-ai8"/>
                        <segue destination="DFF-lT-Wr8" kind="relationship" relationship="viewControllers" id="ege-ES-0le"/>
                        <segue destination="Zsy-o9-m6D" kind="relationship" relationship="viewControllers" id="rtT-KT-B5t"/>
                        <segue destination="wJE-Q4-t8C" kind="relationship" relationship="viewControllers" id="j33-EU-Pj8"/>
                    </connections>
                </tabBarController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="cEF-4x-wpS" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="537" y="479"/>
        </scene>
        <!--Item4-->
        <scene sceneID="ttZ-oS-sRQ">
            <objects>
                <viewController id="eCt-4k-9Vu" customClass="ViewController" customModule="Animated_Tab_Bar" customModuleProvider="target" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="JgG-ft-dcB">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Bounce Animation" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qMh-ib-nBJ">
                                <rect key="frame" x="81.5" y="317.5" width="212" height="32.5"/>
                                <fontDescription key="fontDescription" type="system" pointSize="27"/>
                                <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="KK9-Py-qqm">
                                <rect key="frame" x="-4" y="580" width="190.5" height="30"/>
                                <state key="normal" title="Show Badge"/>
                                <connections>
                                    <action selector="showBadgeHandelr:" destination="eCt-4k-9Vu" eventType="touchUpInside" id="ghX-V6-TVP"/>
                                </connections>
                            </button>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FKl-OF-gs1">
                                <rect key="frame" x="188.5" y="580" width="190.5" height="30"/>
                                <state key="normal" title="Hide Badge"/>
                                <connections>
                                    <action selector="hideBadgeHandler:" destination="eCt-4k-9Vu" eventType="touchUpInside" id="9Ed-dA-ULL"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="FKl-OF-gs1" firstAttribute="leading" secondItem="KK9-Py-qqm" secondAttribute="trailing" constant="2" id="IP7-Vx-f8P"/>
                            <constraint firstItem="KK9-Py-qqm" firstAttribute="leading" secondItem="JgG-ft-dcB" secondAttribute="leadingMargin" constant="-20" id="Isz-OD-x14"/>
                            <constraint firstItem="KK9-Py-qqm" firstAttribute="width" secondItem="FKl-OF-gs1" secondAttribute="width" id="WnW-pO-RYO"/>
                            <constraint firstAttribute="trailingMargin" secondItem="FKl-OF-gs1" secondAttribute="trailing" constant="-20" id="YyU-4n-KYs"/>
                            <constraint firstItem="kSB-yj-LRJ" firstAttribute="centerX" secondItem="qMh-ib-nBJ" secondAttribute="centerX" id="b2F-Ux-a2l"/>
                            <constraint firstAttribute="centerY" secondItem="qMh-ib-nBJ" secondAttribute="centerY" id="jUP-sb-8cO"/>
                            <constraint firstItem="kSB-yj-LRJ" firstAttribute="bottom" secondItem="KK9-Py-qqm" secondAttribute="bottom" constant="8" id="naI-ed-60X"/>
                            <constraint firstItem="kSB-yj-LRJ" firstAttribute="bottom" secondItem="FKl-OF-gs1" secondAttribute="bottom" constant="8" id="ush-0w-xgF"/>
                        </constraints>
                        <viewLayoutGuide key="safeArea" id="kSB-yj-LRJ"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item4" image="Settings" id="EiX-sv-bUZ" customClass="RAMAnimatedTabBarItem" customModule="Animated_Tab_Bar" customModuleProvider="target">
                        <connections>
                            <outlet property="animation" destination="BSW-Za-y3b" id="Q93-Wg-KJV"/>
                        </connections>
                    </tabBarItem>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="4bq-TO-3KR" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <customObject id="BSW-Za-y3b" customClass="RAMBounceAnimation" customModule="Animated_Tab_Bar" customModuleProvider="target">
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="color" keyPath="textSelectedColor">
                            <color key="value" red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                        <userDefinedRuntimeAttribute type="number" keyPath="duration">
                            <real key="value" value="0.80000000000000004"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </customObject>
            </objects>
            <point key="canvasLocation" x="-237" y="1228"/>
        </scene>
        <!--Item3-->
        <scene sceneID="rxZ-sE-b31">
            <objects>
                <viewController id="Zsy-o9-m6D" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="qT7-Vb-aMC">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Frame Animation" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="gnW-CR-KSE">
                                <rect key="frame" x="89.5" y="317.5" width="196.5" height="32.5"/>
                                <fontDescription key="fontDescription" type="system" pointSize="27"/>
                                <color key="textColor" red="0.33333333333333331" green="0.33333333333333331" blue="0.33333333333333331" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="oai-od-5ae" firstAttribute="centerX" secondItem="gnW-CR-KSE" secondAttribute="centerX" id="jwX-bj-6Ah"/>
                            <constraint firstAttribute="centerY" secondItem="gnW-CR-KSE" secondAttribute="centerY" id="pMh-vB-55X"/>
                        </constraints>
                        <viewLayoutGuide key="safeArea" id="oai-od-5ae"/>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item3" image="Tools_00028" id="c38-iL-qNf" customClass="RAMAnimatedTabBarItem" customModule="Animated_Tab_Bar" customModuleProvider="target">
                        <connections>
                            <outlet property="animation" destination="Ojd-WY-9Yd" id="Ogs-bO-YG5"/>
                        </connections>
                    </tabBarItem>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="FuQ-Du-YS3" userLabel="First Responder" sceneMemberID="firstResponder"/>
                <customObject id="Ojd-WY-9Yd" customClass="RAMFrameItemAnimation" customModule="Animated_Tab_Bar" customModuleProvider="target">
                    <userDefinedRuntimeAttributes>
                        <userDefinedRuntimeAttribute type="string" keyPath="imagesPath" value="ToolsAnimation"/>
                        <userDefinedRuntimeAttribute type="boolean" keyPath="isDeselectAnimation" value="YES"/>
                        <userDefinedRuntimeAttribute type="color" keyPath="textSelectedColor">
                            <color key="value" red="0.91764705879999997" green="0.2901960784" blue="0.20784313730000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        </userDefinedRuntimeAttribute>
                    </userDefinedRuntimeAttributes>
                </customObject>
            </objects>
            <point key="canvasLocation" x="537" y="1228"/>
        </scene>
    </scenes>
    <resources>
        <image name="Settings" width="30" height="30"/>
        <image name="Tools_00028" width="30" height="30"/>
        <image name="drop" width="24" height="24"/>
        <image name="icon_pin" width="30" height="30"/>
        <image name="icon_user" width="30" height="30"/>
    </resources>
</document>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "icon-40.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "icon-60.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "icon-58.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "icon-87.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "icon-80.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "icon-120.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "icon-120.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "icon-180.png",
      "scale" : "3x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "icon-20.png",
      "scale" : "1x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "icon-40.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "icon-29.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "icon-58.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "icon-40.png",
      "scale" : "1x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "icon-80.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "icon-76.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "icon-152.png",
      "scale" : "2x"
    },
    {
      "size" : "83.5x83.5",
      "idiom" : "ipad",
      "filename" : "icon-167.png",
      "scale" : "2x"
    },
    {
      "size" : "1024x1024",
      "idiom" : "ios-marketing",
      "filename" : "Ramotion1024.png",
      "scale" : "1x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  },
  "properties" : {
    "pre-rendered" : true
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Settings_icon/Settings.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Settings_00208.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Settings_00208@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Settings_00208@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00028.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00028.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00028 copy.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00028@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00029.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00029.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00029@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00029@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00030.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00030.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00030@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00030@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00031.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00031.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00031@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00031@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00032.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00032.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00032@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00032@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00033.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00033.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00033@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00033@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00034.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00034.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00034@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00034@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00035.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00035.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00035@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00035@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00036.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00036.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00036@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00036@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00037.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00037.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00037@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00037@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00038.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00038.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00038@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00038@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00039.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00039.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00039@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00039@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00040.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00040.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00040@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00040@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00041.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00041.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00041@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00041@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00042.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00042.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00042@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00042@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00043.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00043.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00043@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00043@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00044.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00044.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00044@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00044@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00045.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00045.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00045@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00045@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00046.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00046.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00046@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00046@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00047.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00047.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00047@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00047@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00048.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00048.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00048@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00048@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00049.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00049.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00049@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00049@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00050.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00050.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00050@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00050@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00051.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00051.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00051@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00051@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00052.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00052.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00052@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00052@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00053.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00053.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00053@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00053@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00054.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00054.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00054@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00054@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00055.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00055.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00055@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00055@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00056.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00056.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00056@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00056@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00057.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00057.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00057@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00057@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00058.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00058.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00058@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00058@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00059.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00059.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00059@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00059@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00060.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00060.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00060@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00060@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00061.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00061.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00061@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00061@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00062.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00062.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00062@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00062@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00063.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00063.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00063@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00063@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00064.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00064.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00064@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00064@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00065.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "Tools_00065.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "Tools_00065@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "Tools_00065@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/drop/drop.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "drop.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "drop@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "drop@3.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/icon_pin.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "icon_pin_00160.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "icon_pin_00160@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "icon_pin_00160@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/icon_user.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x",
      "filename" : "user_00084.png"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "user_00084@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x",
      "filename" : "user_00084@3x.png"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Resources/ToolsAnimation.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
	<string>Tools_00028</string>
	<string>Tools_00029</string>
	<string>Tools_00030</string>
	<string>Tools_00031</string>
	<string>Tools_00032</string>
	<string>Tools_00033</string>
	<string>Tools_00034</string>
	<string>Tools_00035</string>
	<string>Tools_00036</string>
	<string>Tools_00037</string>
	<string>Tools_00038</string>
	<string>Tools_00039</string>
	<string>Tools_00040</string>
	<string>Tools_00041</string>
	<string>Tools_00042</string>
	<string>Tools_00043</string>
	<string>Tools_00044</string>
	<string>Tools_00045</string>
	<string>Tools_00046</string>
	<string>Tools_00047</string>
	<string>Tools_00048</string>
	<string>Tools_00049</string>
	<string>Tools_00050</string>
	<string>Tools_00051</string>
	<string>Tools_00052</string>
	<string>Tools_00053</string>
	<string>Tools_00054</string>
	<string>Tools_00055</string>
	<string>Tools_00056</string>
	<string>Tools_00057</string>
	<string>Tools_00058</string>
	<string>Tools_00059</string>
	<string>Tools_00060</string>
	<string>Tools_00061</string>
	<string>Tools_00062</string>
	<string>Tools_00063</string>
	<string>Tools_00064</string>
	<string>Tools_00065</string>
</array>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/ViewController.swift
================================================
//
//  ViewController.swift
//  RAMAnimatedTabBarDemo
//
//  Created by Alex Kalinkin on 11/18/14.
//  Copyright (c) 2014 Ramotion. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

    var index: NSInteger = 0

    // PRAGMA: actions
    @IBAction func showBadgeHandelr(_: AnyObject) {
        // example for showing badges
        index += 1
        tabBarItem.badgeValue = "\(index)"
    }

    @IBAction func hideBadgeHandler(_: AnyObject) {
        tabBarItem.badgeValue = nil
    }
}


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		3950EDD82354950E0072BAAD /* RAMAnimatedTabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3950EDD72354950E0072BAAD /* RAMAnimatedTabBarItem.swift */; };
		3950EDD9235496AF0072BAAD /* RAMAnimatedTabBarItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3950EDD72354950E0072BAAD /* RAMAnimatedTabBarItem.swift */; };
		3950EDDC235497650072BAAD /* Collection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3950EDDB235497650072BAAD /* Collection+Extensions.swift */; };
		3950EDDD235497910072BAAD /* Collection+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3950EDDB235497650072BAAD /* Collection+Extensions.swift */; };
		5A1F33BC2126AA3D004B8735 /* AnimatedTabBarTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A1F33BB2126AA3D004B8735 /* AnimatedTabBarTests.swift */; };
		5A5D3FF021B91D0700304986 /* RAMBadgeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A5D3FEF21B91D0700304986 /* RAMBadgeTests.swift */; };
		5ADAB94A209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ADAB949209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift */; };
		5ADAB94B209B51E5006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ADAB949209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift */; };
		849507011D05772B0005EC1A /* ToolsAnimation.plist in Resources */ = {isa = PBXBuildFile; fileRef = 849507001D05772B0005EC1A /* ToolsAnimation.plist */; };
		84BC64221C22E4C800B89B79 /* RAMBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BC64211C22E4C800B89B79 /* RAMBadge.swift */; };
		84D4B7A11DB0D35500EE38C6 /* TabBarLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 84D4B79F1DB0D35500EE38C6 /* TabBarLib.h */; settings = {ATTRIBUTES = (Public, ); }; };
		84D4B7A41DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84D4B79D1DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework */; };
		84D4B7A51DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84D4B79D1DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		84D4B7A91DB0D37700EE38C6 /* RAMBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BC64211C22E4C800B89B79 /* RAMBadge.swift */; };
		84D4B7AA1DB0D37B00EE38C6 /* RAMAnimatedTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A83F1A1C7C14002D8931 /* RAMAnimatedTabBarController.swift */; };
		84D4B7AB1DB0D37F00EE38C6 /* RAMFumeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3E056BD1A2DD57600F33DDA /* RAMFumeAnimation.swift */; };
		84D4B7AC1DB0D38100EE38C6 /* RAMBounceAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A8781A1CE200002D8931 /* RAMBounceAnimation.swift */; };
		84D4B7AD1DB0D38400EE38C6 /* RAMRotationAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A8421A1C8DD3002D8931 /* RAMRotationAnimation.swift */; };
		84D4B7AE1DB0D38700EE38C6 /* RAMFrameItemAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469A1A1B944D0037F03C /* RAMFrameItemAnimation.swift */; };
		84D4B7AF1DB0D38B00EE38C6 /* RAMTransitionItemAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469C1A1B944D0037F03C /* RAMTransitionItemAnimations.swift */; };
		84D4B7B01DB0D38F00EE38C6 /* RAMItemAnimationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469D1A1B944D0037F03C /* RAMItemAnimationProtocol.swift */; };
		CE4146781A1B923D0037F03C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4146771A1B923D0037F03C /* AppDelegate.swift */; };
		CE41467A1A1B923D0037F03C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE4146791A1B923D0037F03C /* ViewController.swift */; };
		CE41467D1A1B923D0037F03C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE41467B1A1B923D0037F03C /* Main.storyboard */; };
		CE41467F1A1B923D0037F03C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = CE41467E1A1B923D0037F03C /* Images.xcassets */; };
		CE4146821A1B923D0037F03C /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE4146801A1B923D0037F03C /* LaunchScreen.xib */; };
		CE41469E1A1B944D0037F03C /* RAMFrameItemAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469A1A1B944D0037F03C /* RAMFrameItemAnimation.swift */; };
		CE41469F1A1B944D0037F03C /* RAMTransitionItemAnimations.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469C1A1B944D0037F03C /* RAMTransitionItemAnimations.swift */; };
		CE4146A01A1B944D0037F03C /* RAMItemAnimationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE41469D1A1B944D0037F03C /* RAMItemAnimationProtocol.swift */; };
		CE90A8401A1C7C14002D8931 /* RAMAnimatedTabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A83F1A1C7C14002D8931 /* RAMAnimatedTabBarController.swift */; };
		CE90A8431A1C8DD3002D8931 /* RAMRotationAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A8421A1C8DD3002D8931 /* RAMRotationAnimation.swift */; };
		CE90A8791A1CE200002D8931 /* RAMBounceAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE90A8781A1CE200002D8931 /* RAMBounceAnimation.swift */; };
		F3E056BE1A2DD57600F33DDA /* RAMFumeAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3E056BD1A2DD57600F33DDA /* RAMFumeAnimation.swift */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		5A1F33BE2126AA3D004B8735 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = CE41466A1A1B923D0037F03C /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = CE4146711A1B923D0037F03C;
			remoteInfo = RAMAnimatedTabBarDemo;
		};
		84D4B7A21DB0D35500EE38C6 /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = CE41466A1A1B923D0037F03C /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 84D4B79C1DB0D35500EE38C6;
			remoteInfo = TabBarLib;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXCopyFilesBuildPhase section */
		8499D8F91D0069C6004B5B37 /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
				84D4B7A51DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework in Embed Frameworks */,
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		3950EDD72354950E0072BAAD /* RAMAnimatedTabBarItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RAMAnimatedTabBarItem.swift; sourceTree = "<group>"; };
		3950EDDB235497650072BAAD /* Collection+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Collection+Extensions.swift"; sourceTree = "<group>"; };
		5A1F33B92126AA3D004B8735 /* AnimatedTabBarTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnimatedTabBarTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		5A1F33BB2126AA3D004B8735 /* AnimatedTabBarTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatedTabBarTests.swift; sourceTree = "<group>"; };
		5A1F33BD2126AA3D004B8735 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		5A5D3FEF21B91D0700304986 /* RAMBadgeTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RAMBadgeTests.swift; sourceTree = "<group>"; };
		5ADAB949209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RAMAnimatedTabBarController+BottomLine.swift"; sourceTree = "<group>"; };
		849507001D05772B0005EC1A /* ToolsAnimation.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ToolsAnimation.plist; sourceTree = "<group>"; };
		84BC64211C22E4C800B89B79 /* RAMBadge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMBadge.swift; sourceTree = "<group>"; };
		84D4B79D1DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RAMAnimatedTabBarController.framework; sourceTree = BUILT_PRODUCTS_DIR; };
		84D4B79F1DB0D35500EE38C6 /* TabBarLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TabBarLib.h; sourceTree = "<group>"; };
		84D4B7A01DB0D35500EE38C6 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		CE4146721A1B923D0037F03C /* Animated Tab Bar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Animated Tab Bar.app"; sourceTree = BUILT_PRODUCTS_DIR; };
		CE4146761A1B923D0037F03C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		CE4146771A1B923D0037F03C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		CE4146791A1B923D0037F03C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
		CE41467C1A1B923D0037F03C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		CE41467E1A1B923D0037F03C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
		CE4146811A1B923D0037F03C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
		CE41469A1A1B944D0037F03C /* RAMFrameItemAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMFrameItemAnimation.swift; sourceTree = "<group>"; };
		CE41469C1A1B944D0037F03C /* RAMTransitionItemAnimations.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMTransitionItemAnimations.swift; sourceTree = "<group>"; };
		CE41469D1A1B944D0037F03C /* RAMItemAnimationProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMItemAnimationProtocol.swift; sourceTree = "<group>"; };
		CE90A83F1A1C7C14002D8931 /* RAMAnimatedTabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMAnimatedTabBarController.swift; sourceTree = "<group>"; };
		CE90A8421A1C8DD3002D8931 /* RAMRotationAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMRotationAnimation.swift; sourceTree = "<group>"; };
		CE90A8781A1CE200002D8931 /* RAMBounceAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMBounceAnimation.swift; sourceTree = "<group>"; };
		F3E056BD1A2DD57600F33DDA /* RAMFumeAnimation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RAMFumeAnimation.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		5A1F33B62126AA3D004B8735 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		84D4B7991DB0D35500EE38C6 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CE41466F1A1B923D0037F03C /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				84D4B7A41DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		3950EDDA2354974D0072BAAD /* Utilities */ = {
			isa = PBXGroup;
			children = (
				3950EDDB235497650072BAAD /* Collection+Extensions.swift */,
			);
			path = Utilities;
			sourceTree = "<group>";
		};
		5A1F33BA2126AA3D004B8735 /* AnimatedTabBarTests */ = {
			isa = PBXGroup;
			children = (
				5A1F33BB2126AA3D004B8735 /* AnimatedTabBarTests.swift */,
				5A1F33BD2126AA3D004B8735 /* Info.plist */,
				5A5D3FEF21B91D0700304986 /* RAMBadgeTests.swift */,
			);
			path = AnimatedTabBarTests;
			sourceTree = "<group>";
		};
		5AC42AE5210AFA110009889F /* BottomLine */ = {
			isa = PBXGroup;
			children = (
				5ADAB949209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift */,
			);
			path = BottomLine;
			sourceTree = "<group>";
		};
		84BC64201C22E41F00B89B79 /* RAMBadge */ = {
			isa = PBXGroup;
			children = (
				84BC64211C22E4C800B89B79 /* RAMBadge.swift */,
			);
			path = RAMBadge;
			sourceTree = "<group>";
		};
		84D4B79E1DB0D35500EE38C6 /* TabBarLib */ = {
			isa = PBXGroup;
			children = (
				84D4B79F1DB0D35500EE38C6 /* TabBarLib.h */,
				84D4B7A01DB0D35500EE38C6 /* Info.plist */,
			);
			path = TabBarLib;
			sourceTree = "<group>";
		};
		CE4146691A1B923D0037F03C = {
			isa = PBXGroup;
			children = (
				CE4146741A1B923D0037F03C /* RAMAnimatedTabBarDemo */,
				84D4B79E1DB0D35500EE38C6 /* TabBarLib */,
				5A1F33BA2126AA3D004B8735 /* AnimatedTabBarTests */,
				CE4146731A1B923D0037F03C /* Products */,
			);
			sourceTree = "<group>";
		};
		CE4146731A1B923D0037F03C /* Products */ = {
			isa = PBXGroup;
			children = (
				CE4146721A1B923D0037F03C /* Animated Tab Bar.app */,
				84D4B79D1DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework */,
				5A1F33B92126AA3D004B8735 /* AnimatedTabBarTests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		CE4146741A1B923D0037F03C /* RAMAnimatedTabBarDemo */ = {
			isa = PBXGroup;
			children = (
				CE90A8441A1CB1A2002D8931 /* Resources */,
				CE4146971A1B94170037F03C /* RAMAnimatedTabBarControlller */,
				CE4146771A1B923D0037F03C /* AppDelegate.swift */,
				CE4146791A1B923D0037F03C /* ViewController.swift */,
				CE41467B1A1B923D0037F03C /* Main.storyboard */,
				CE41467E1A1B923D0037F03C /* Images.xcassets */,
				CE4146801A1B923D0037F03C /* LaunchScreen.xib */,
				CE4146751A1B923D0037F03C /* Supporting Files */,
			);
			path = RAMAnimatedTabBarDemo;
			sourceTree = "<group>";
		};
		CE4146751A1B923D0037F03C /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				CE4146761A1B923D0037F03C /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		CE4146971A1B94170037F03C /* RAMAnimatedTabBarControlller */ = {
			isa = PBXGroup;
			children = (
				3950EDDA2354974D0072BAAD /* Utilities */,
				5AC42AE5210AFA110009889F /* BottomLine */,
				84BC64201C22E41F00B89B79 /* RAMBadge */,
				CE90A83F1A1C7C14002D8931 /* RAMAnimatedTabBarController.swift */,
				3950EDD72354950E0072BAAD /* RAMAnimatedTabBarItem.swift */,
				CE4146981A1B944D0037F03C /* Animations */,
				CE41469D1A1B944D0037F03C /* RAMItemAnimationProtocol.swift */,
			);
			name = RAMAnimatedTabBarControlller;
			path = ../../RAMAnimatedTabBarController;
			sourceTree = "<group>";
		};
		CE4146981A1B944D0037F03C /* Animations */ = {
			isa = PBXGroup;
			children = (
				F3E056BC1A2DD37700F33DDA /* FumeAnimation */,
				CE90A8771A1CE171002D8931 /* BounceAnimation */,
				CE90A8411A1C8D69002D8931 /* RotationAnimation */,
				CE4146991A1B944D0037F03C /* FrameAnimation */,
				CE41469B1A1B944D0037F03C /* TransitionAniamtions */,
			);
			path = Animations;
			sourceTree = "<group>";
		};
		CE4146991A1B944D0037F03C /* FrameAnimation */ = {
			isa = PBXGroup;
			children = (
				CE41469A1A1B944D0037F03C /* RAMFrameItemAnimation.swift */,
			);
			path = FrameAnimation;
			sourceTree = "<group>";
		};
		CE41469B1A1B944D0037F03C /* TransitionAniamtions */ = {
			isa = PBXGroup;
			children = (
				CE41469C1A1B944D0037F03C /* RAMTransitionItemAnimations.swift */,
			);
			path = TransitionAniamtions;
			sourceTree = "<group>";
		};
		CE90A8411A1C8D69002D8931 /* RotationAnimation */ = {
			isa = PBXGroup;
			children = (
				CE90A8421A1C8DD3002D8931 /* RAMRotationAnimation.swift */,
			);
			path = RotationAnimation;
			sourceTree = "<group>";
		};
		CE90A8441A1CB1A2002D8931 /* Resources */ = {
			isa = PBXGroup;
			children = (
				849507001D05772B0005EC1A /* ToolsAnimation.plist */,
			);
			path = Resources;
			sourceTree = "<group>";
		};
		CE90A8771A1CE171002D8931 /* BounceAnimation */ = {
			isa = PBXGroup;
			children = (
				CE90A8781A1CE200002D8931 /* RAMBounceAnimation.swift */,
			);
			path = BounceAnimation;
			sourceTree = "<group>";
		};
		F3E056BC1A2DD37700F33DDA /* FumeAnimation */ = {
			isa = PBXGroup;
			children = (
				F3E056BD1A2DD57600F33DDA /* RAMFumeAnimation.swift */,
			);
			path = FumeAnimation;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXHeadersBuildPhase section */
		84D4B79A1DB0D35500EE38C6 /* Headers */ = {
			isa = PBXHeadersBuildPhase;
			buildActionMask = 2147483647;
			files = (
				84D4B7A11DB0D35500EE38C6 /* TabBarLib.h in Headers */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXHeadersBuildPhase section */

/* Begin PBXNativeTarget section */
		5A1F33B82126AA3D004B8735 /* AnimatedTabBarTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 5A1F33C22126AA3D004B8735 /* Build configuration list for PBXNativeTarget "AnimatedTabBarTests" */;
			buildPhases = (
				5A1F33B52126AA3D004B8735 /* Sources */,
				5A1F33B62126AA3D004B8735 /* Frameworks */,
				5A1F33B72126AA3D004B8735 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				5A1F33BF2126AA3D004B8735 /* PBXTargetDependency */,
			);
			name = AnimatedTabBarTests;
			productName = AnimatedTabBarTests;
			productReference = 5A1F33B92126AA3D004B8735 /* AnimatedTabBarTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
		84D4B79C1DB0D35500EE38C6 /* RAMAnimatedTabBarController */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 84D4B7A81DB0D35500EE38C6 /* Build configuration list for PBXNativeTarget "RAMAnimatedTabBarController" */;
			buildPhases = (
				84D4B7981DB0D35500EE38C6 /* Sources */,
				84D4B7991DB0D35500EE38C6 /* Frameworks */,
				84D4B79A1DB0D35500EE38C6 /* Headers */,
				84D4B79B1DB0D35500EE38C6 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = RAMAnimatedTabBarController;
			productName = TabBarLib;
			productReference = 84D4B79D1DB0D35500EE38C6 /* RAMAnimatedTabBarController.framework */;
			productType = "com.apple.product-type.framework";
		};
		CE4146711A1B923D0037F03C /* RAMAnimatedTabBarDemo */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = CE4146911A1B923D0037F03C /* Build configuration list for PBXNativeTarget "RAMAnimatedTabBarDemo" */;
			buildPhases = (
				CE41466E1A1B923D0037F03C /* Sources */,
				CE41466F1A1B923D0037F03C /* Frameworks */,
				CE4146701A1B923D0037F03C /* Resources */,
				8499D8F91D0069C6004B5B37 /* Embed Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
				84D4B7A31DB0D35500EE38C6 /* PBXTargetDependency */,
			);
			name = RAMAnimatedTabBarDemo;
			productName = RAMAnimatedTabBarDemo;
			productReference = CE4146721A1B923D0037F03C /* Animated Tab Bar.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		CE41466A1A1B923D0037F03C /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 0940;
				LastUpgradeCheck = 1020;
				ORGANIZATIONNAME = Ramotion;
				TargetAttributes = {
					5A1F33B82126AA3D004B8735 = {
						CreatedOnToolsVersion = 9.4;
						LastSwiftMigration = 1020;
						ProvisioningStyle = Automatic;
						TestTargetID = CE4146711A1B923D0037F03C;
					};
					84D4B79C1DB0D35500EE38C6 = {
						CreatedOnToolsVersion = 8.0;
						LastSwiftMigration = 1020;
						ProvisioningStyle = Automatic;
					};
					CE4146711A1B923D0037F03C = {
						CreatedOnToolsVersion = 6.1;
						LastSwiftMigration = 1020;
					};
				};
			};
			buildConfigurationList = CE41466D1A1B923D0037F03C /* Build configuration list for PBXProject "RAMAnimatedTabBarDemo" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = CE4146691A1B923D0037F03C;
			productRefGroup = CE4146731A1B923D0037F03C /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				CE4146711A1B923D0037F03C /* RAMAnimatedTabBarDemo */,
				84D4B79C1DB0D35500EE38C6 /* RAMAnimatedTabBarController */,
				5A1F33B82126AA3D004B8735 /* AnimatedTabBarTests */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		5A1F33B72126AA3D004B8735 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		84D4B79B1DB0D35500EE38C6 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CE4146701A1B923D0037F03C /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				849507011D05772B0005EC1A /* ToolsAnimation.plist in Resources */,
				CE41467D1A1B923D0037F03C /* Main.storyboard in Resources */,
				CE4146821A1B923D0037F03C /* LaunchScreen.xib in Resources */,
				CE41467F1A1B923D0037F03C /* Images.xcassets in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		5A1F33B52126AA3D004B8735 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				5A5D3FF021B91D0700304986 /* RAMBadgeTests.swift in Sources */,
				5A1F33BC2126AA3D004B8735 /* AnimatedTabBarTests.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		84D4B7981DB0D35500EE38C6 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				84D4B7A91DB0D37700EE38C6 /* RAMBadge.swift in Sources */,
				84D4B7AF1DB0D38B00EE38C6 /* RAMTransitionItemAnimations.swift in Sources */,
				5ADAB94B209B51E5006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift in Sources */,
				3950EDDD235497910072BAAD /* Collection+Extensions.swift in Sources */,
				84D4B7B01DB0D38F00EE38C6 /* RAMItemAnimationProtocol.swift in Sources */,
				3950EDD9235496AF0072BAAD /* RAMAnimatedTabBarItem.swift in Sources */,
				84D4B7AB1DB0D37F00EE38C6 /* RAMFumeAnimation.swift in Sources */,
				84D4B7AA1DB0D37B00EE38C6 /* RAMAnimatedTabBarController.swift in Sources */,
				84D4B7AC1DB0D38100EE38C6 /* RAMBounceAnimation.swift in Sources */,
				84D4B7AE1DB0D38700EE38C6 /* RAMFrameItemAnimation.swift in Sources */,
				84D4B7AD1DB0D38400EE38C6 /* RAMRotationAnimation.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		CE41466E1A1B923D0037F03C /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				CE41469E1A1B944D0037F03C /* RAMFrameItemAnimation.swift in Sources */,
				CE90A8401A1C7C14002D8931 /* RAMAnimatedTabBarController.swift in Sources */,
				CE41467A1A1B923D0037F03C /* ViewController.swift in Sources */,
				5ADAB94A209B0FA8006CCD85 /* RAMAnimatedTabBarController+BottomLine.swift in Sources */,
				CE90A8431A1C8DD3002D8931 /* RAMRotationAnimation.swift in Sources */,
				F3E056BE1A2DD57600F33DDA /* RAMFumeAnimation.swift in Sources */,
				CE41469F1A1B944D0037F03C /* RAMTransitionItemAnimations.swift in Sources */,
				3950EDDC235497650072BAAD /* Collection+Extensions.swift in Sources */,
				84BC64221C22E4C800B89B79 /* RAMBadge.swift in Sources */,
				3950EDD82354950E0072BAAD /* RAMAnimatedTabBarItem.swift in Sources */,
				CE4146A01A1B944D0037F03C /* RAMItemAnimationProtocol.swift in Sources */,
				CE4146781A1B923D0037F03C /* AppDelegate.swift in Sources */,
				CE90A8791A1CE200002D8931 /* RAMBounceAnimation.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		5A1F33BF2126AA3D004B8735 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = CE4146711A1B923D0037F03C /* RAMAnimatedTabBarDemo */;
			targetProxy = 5A1F33BE2126AA3D004B8735 /* PBXContainerItemProxy */;
		};
		84D4B7A31DB0D35500EE38C6 /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 84D4B79C1DB0D35500EE38C6 /* RAMAnimatedTabBarController */;
			targetProxy = 84D4B7A21DB0D35500EE38C6 /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin PBXVariantGroup section */
		CE41467B1A1B923D0037F03C /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				CE41467C1A1B923D0037F03C /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		CE4146801A1B923D0037F03C /* LaunchScreen.xib */ = {
			isa = PBXVariantGroup;
			children = (
				CE4146811A1B923D0037F03C /* Base */,
			);
			name = LaunchScreen.xib;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		5A1F33C02126AA3D004B8735 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				CODE_SIGN_STYLE = Automatic;
				DEBUG_INFORMATION_FORMAT = dwarf;
				GCC_C_LANGUAGE_STANDARD = gnu11;
				INFOPLIST_FILE = AnimatedTabBarTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.AnimatedTabBarTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Animated Tab Bar.app/Animated Tab Bar";
			};
			name = Debug;
		};
		5A1F33C12126AA3D004B8735 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				BUNDLE_LOADER = "$(TEST_HOST)";
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
				CLANG_ENABLE_OBJC_WEAK = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				CODE_SIGN_STYLE = Automatic;
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				GCC_C_LANGUAGE_STANDARD = gnu11;
				INFOPLIST_FILE = AnimatedTabBarTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.AnimatedTabBarTests;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_VERSION = 5.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Animated Tab Bar.app/Animated Tab Bar";
			};
			name = Release;
		};
		84D4B7A61DB0D35500EE38C6 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_SUSPICIOUS_MOVES = YES;
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
				CURRENT_PROJECT_VERSION = 1;
				DEBUG_INFORMATION_FORMAT = dwarf;
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = "";
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = TabBarLib/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.RAMAnimatedTabBarController;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
				SWIFT_VERSION = 5.0;
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Debug;
		};
		84D4B7A71DB0D35500EE38C6 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
				CLANG_WARN_SUSPICIOUS_MOVES = YES;
				CODE_SIGN_IDENTITY = "";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "";
				COPY_PHASE_STRIP = NO;
				CURRENT_PROJECT_VERSION = 1;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = "";
				DYLIB_COMPATIBILITY_VERSION = 1;
				DYLIB_CURRENT_VERSION = 1;
				DYLIB_INSTALL_NAME_BASE = "@rpath";
				INFOPLIST_FILE = TabBarLib/Info.plist;
				INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.RAMAnimatedTabBarController;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SKIP_INSTALL = YES;
				SWIFT_VERSION = 5.0;
				VERSIONING_SYSTEM = "apple-generic";
				VERSION_INFO_PREFIX = "";
			};
			name = Release;
		};
		CE41468F1A1B923D0037F03C /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 12.2;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 4.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		CE4146901A1B923D0037F03C /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = YES;
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 12.2;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
				SWIFT_VERSION = 4.0;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		CE4146921A1B923D0037F03C /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = "";
				INFOPLIST_FILE = RAMAnimatedTabBarDemo/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
				PRODUCT_NAME = "Animated Tab Bar";
				PROVISIONING_PROFILE = "";
				SWIFT_VERSION = 5.0;
			};
			name = Debug;
		};
		CE4146931A1B923D0037F03C /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				DEFINES_MODULE = YES;
				DEVELOPMENT_TEAM = "";
				INFOPLIST_FILE = RAMAnimatedTabBarDemo/Info.plist;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = com.ramotion.dev;
				PRODUCT_NAME = "Animated Tab Bar";
				PROVISIONING_PROFILE = "";
				SWIFT_VERSION = 5.0;
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		5A1F33C22126AA3D004B8735 /* Build configuration list for PBXNativeTarget "AnimatedTabBarTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				5A1F33C02126AA3D004B8735 /* Debug */,
				5A1F33C12126AA3D004B8735 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		84D4B7A81DB0D35500EE38C6 /* Build configuration list for PBXNativeTarget "RAMAnimatedTabBarController" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				84D4B7A61DB0D35500EE38C6 /* Debug */,
				84D4B7A71DB0D35500EE38C6 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		CE41466D1A1B923D0037F03C /* Build configuration list for PBXProject "RAMAnimatedTabBarDemo" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				CE41468F1A1B923D0037F03C /* Debug */,
				CE4146901A1B923D0037F03C /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		CE4146911A1B923D0037F03C /* Build configuration list for PBXNativeTarget "RAMAnimatedTabBarDemo" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				CE4146921A1B923D0037F03C /* Debug */,
				CE4146931A1B923D0037F03C /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = CE41466A1A1B923D0037F03C /* Project object */;
}


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "self:RAMAnimatedTabBarDemo.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded</key>
	<false/>
</dict>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/xcshareddata/xcschemes/RAMAnimatedTabBarController.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "1020"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "84D4B79C1DB0D35500EE38C6"
               BuildableName = "RAMAnimatedTabBarController.framework"
               BlueprintName = "RAMAnimatedTabBarController"
               ReferencedContainer = "container:RAMAnimatedTabBarDemo.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "5A1F33B82126AA3D004B8735"
               BuildableName = "AnimatedTabBarTests.xctest"
               BlueprintName = "AnimatedTabBarTests"
               ReferencedContainer = "container:RAMAnimatedTabBarDemo.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "84D4B79C1DB0D35500EE38C6"
            BuildableName = "RAMAnimatedTabBarController.framework"
            BlueprintName = "RAMAnimatedTabBarController"
            ReferencedContainer = "container:RAMAnimatedTabBarDemo.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "84D4B79C1DB0D35500EE38C6"
            BuildableName = "RAMAnimatedTabBarController.framework"
            BlueprintName = "RAMAnimatedTabBarController"
            ReferencedContainer = "container:RAMAnimatedTabBarDemo.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "84D4B79C1DB0D35500EE38C6"
            BuildableName = "RAMAnimatedTabBarController.framework"
            BlueprintName = "RAMAnimatedTabBarController"
            ReferencedContainer = "container:RAMAnimatedTabBarDemo.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: RAMAnimatedTabBarDemo/TabBarLib/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>FMWK</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleVersion</key>
	<string>$(CURRENT_PROJECT_VERSION)</string>
	<key>NSPrincipalClass</key>
	<string></string>
</dict>
</plist>


================================================
FILE: RAMAnimatedTabBarDemo/TabBarLib/TabBarLib.h
================================================
//
//  TabBarLib.h
//  TabBarLib
//
//  Created by Alex K. on 14/10/16.
//  Copyright © 2016 Ramotion. All rights reserved.
//

#import <UIKit/UIKit.h>

//! Project version number for TabBarLib.
FOUNDATION_EXPORT double TabBarLibVersionNumber;

//! Project version string for TabBarLib.
FOUNDATION_EXPORT const unsigned char TabBarLibVersionString[];

// In this header, you should import all the public headers of your framework using statements like #import <TabBarLib/PublicHeader.h>




================================================
FILE: README.md
================================================
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=animated-tab-bar"><img src="https://github.com/Ramotion/animated-tab-bar/blob/master/header.png"></a>

<a href="https://github.com/Ramotion/animated-tab-bar">
<img align="left" src="https://github.com/Ramotion/animated-tab-bar/blob/master/Screenshots/animatedTabBar.gif" width="480" height="360" /></a>

<p><h1 align="left">ANIMATED TAB BAR</h1></p>

<h4>Swift UI module library for adding animation to iOS tabbar items and icons.</h4>


___



<p><h6>We specialize in the designing and coding of custom UI for Mobile Apps and Websites.</h6>
<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=animated-tab-bar">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a>
</p>
<p><h6>Stay tuned for the latest updates:</h6>
<a href="https://goo.gl/rPFpid" >
<img src="https://i.imgur.com/ziSqeSo.png/" width="156" height="28"></a></p>

</br>

[![CocoaPods](https://img.shields.io/cocoapods/p/RAMAnimatedTabBarController.svg)](http://cocoapods.org/pods/RAMAnimatedTabBarController)
[![CocoaPods](https://img.shields.io/cocoapods/v/RAMAnimatedTabBarController.svg)](http://cocoapods.org/pods/RAMAnimatedTabBarController)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Ramotion/animated-tab-bar)
[![Swift 4.0](https://img.shields.io/badge/Swift-5.0-green.svg?style=flat)](https://developer.apple.com/swift/)
[![Twitter](https://img.shields.io/badge/Twitter-@Ramotion-blue.svg?style=flat)](http://twitter.com/Ramotion)
[![Travis](https://img.shields.io/travis/Ramotion/animated-tab-bar.svg)](https://travis-ci.org/Ramotion/animated-tab-bar)
[![Donate](https://img.shields.io/badge/Donate-PayPal-blue.svg)](https://paypal.me/Ramotion)

## Requirements

- iOS 9.0+
- Xcode 10.2

## Installation

Just add the RAMAnimatedTabBarController folder to your project.

or use [CocoaPods](https://cocoapods.org) with Podfile:
``` ruby
pod 'RAMAnimatedTabBarController'
```

or [Carthage](https://github.com/Carthage/Carthage) users can simply add to their `Cartfile`:
```
github "Ramotion/animated-tab-bar"
```

or [Swift Package Manager](https://swift.org/package-manager/) 


## Usage

1. Create a new UITabBarController in your storyboard or nib.

2. Set the class of the UITabBarController to RAMAnimatedTabBarController in your Storyboard or nib.

3. For each UITabBarItem, set the class to RAMAnimatedTabBarItem.

4. Add a custom image icon for each RAMAnimatedTabBarItem

5. Add animation for each RAMAnimatedTabBarItem :
   * drag and drop an NSObject item into your ViewController
   * set its class to ANIMATION_CLASS (where ANIMATION_CLASS is the class name of the animation you want to use)
   * connect the outlet animation in RAMAnimatedTabBarItem to your ANIMATION_CLASS
   [Demonstration video for step 5](http://vimeo.com/112390386)


## Included Animations

* RAMBounceAnimation
* RAMLeftRotationAnimation
* RAMRightRotationAnimation
* RAMFlipLeftTransitionItemAnimations
* RAMFlipRightTransitionItemAnimations
* RAMFlipTopTransitionItemAnimations
* RAMFlipBottomTransitionItemAnimations
* RAMFrameItemAnimation
* RAMFumeAnimation

## Creating Custom Animations
1. Create a new class which inherits from RAMItemAnimation:

  ``` swift
     class NewAnimation : RAMItemAnimation
  ```
2. Implement the methods in RAMItemAnimationProtocol:


  ``` swift
    // method call when Tab Bar Item is selected
    override func playAnimation(icon: UIImageView, textLabel: UILabel) {
      // add animation
    }
  ```  
  ``` swift
    // method call when Tab Bar Item is deselected
    override func deselectAnimation(icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {
      // add animation
    }
  ```    
  ``` swift
    // method call when TabBarController did load
    override func selectedState(icon: UIImageView, textLabel: UILabel) {
      // set selected state  
    }
  ```

3. Example:

``` swift
import RAMAnimatedTabBarController

class RAMBounceAnimation : RAMItemAnimation {

    override func playAnimation(_ icon: UIImageView, textLabel: UILabel) {
        playBounceAnimation(icon)
        textLabel.textColor = textSelectedColor
    }

    override func deselectAnimation(_ icon: UIImageView, textLabel: UILabel, defaultTextColor: UIColor, defaultIconColor: UIColor) {
        textLabel.textColor = defaultTextColor
    }

    override func selectedState(_ icon: UIImageView, textLabel: UILabel) {
        textLabel.textColor = textSelectedColor
    }

    func playBounceAnimation(_ icon : UIImageView) {

        let bounceAnimation = CAKeyframeAnimation(keyPath: "transform.scale")
        bounceAnimation.values = [1.0 ,1.4, 0.9, 1.15, 0.95, 1.02, 1.0]
        bounceAnimation.duration = TimeInterval(duration)
        bounceAnimation.calculationMode = kCAAnimationCubic

        icon.layer.add(bounceAnimation, forKey: "bounceAnimation")
    }
}
```


## 📄 License

Animated Tab Bar is released under the MIT license.
See [LICENSE](./LICENSE) for details.

This library is a part of a <a href="https://github.com/Ramotion/swift-ui-animation-components-and-libraries"><b>selection of our best UI open-source projects.</b></a>

If you use the open-source library in your project, please make sure to credit and backlink to www.ramotion.com

## 📱 Get the Showroom App for iOS to give it a try
Try this UI component and more like this in our iOS app. Contact us if interested.

<a href="https://itunes.apple.com/app/apple-store/id1182360240?pt=550053&ct=animated-tab-bar&mt=8" >
<img src="https://github.com/ramotion/gliding-collection/raw/master/app_store@2x.png" width="117" height="34"></a>

<a href="https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=animated-tab-bar">
<img src="https://github.com/ramotion/gliding-collection/raw/master/contact_our_team@2x.png" width="187" height="34"></a>
<br>
<br>


================================================
FILE: docs/Classes/RAMAnimatedTabBarController.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>RAMAnimatedTabBarController Class Reference</title>
    <link rel="stylesheet" type="text/css" href="../css/jazzy.css" />
    <link rel="stylesheet" type="text/css" href="../css/highlight.css" />
    <meta charset='utf-8'>
    <script src="../js/jquery.min.js" defer></script>
    <script src="../js/jazzy.js" defer></script>
    
  </head>
  <body>
    <a name="//apple_ref/swift/Class/RAMAnimatedTabBarController" class="dashAnchor"></a>
    <a title="RAMAnimatedTabBarController Class Reference"></a>
    <header>
      <div class="content-wrapper">
        <p><a href="../index.html">RAMAnimatedTabBarDemo Docs</a> (100% documented)</p>
      </div>
    </header>
    <div class="content-wrapper">
      <p id="breadcrumbs">
        <a href="../index.html">RAMAnimatedTabBarDemo Reference</a>
        <img id="carat" src="../img/carat.png" />
        RAMAnimatedTabBarController Class Reference
      </p>
    </div>
    <div class="content-wrapper">
      <nav class="sidebar">
        <ul class="nav-groups">
          <li class="nav-group-name">
            <a href="../Classes.html">Classes</a>
            <ul class="nav-group-tasks">
              <li class="nav-group-task">
                <a href="../Classes/RAMAnimatedTabBarController.html">RAMAnimatedTabBarController</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMAnimatedTabBarItem.html">RAMAnimatedTabBarItem</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMBounceAnimation.html">RAMBounceAnimation</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMFrameItemAnimation.html">RAMFrameItemAnimation</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMFumeAnimation.html">RAMFumeAnimation</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMItemAnimation.html">RAMItemAnimation</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMRotationAnimation.html">RAMRotationAnimation</a>
              </li>
              <li class="nav-group-task">
                <a href="../Classes/RAMTransitionItemAnimations.html">RAMTransitionItemAnimations</a>
              </li>
            </ul>
          </li>
        </ul>
      </nav>
      <article class="main-content">
        <section>
          <section class="section">
            <h1>RAMAnimatedTabBarController</h1>
              <div class="declaration">
                <div class="language">
                  <pre class="highlight"><code><span class="kd">public</span> <span class="kd">class</span> <span class="kt">RAMAnimatedTabBarController</span><span class="p">:</span> <span class="kt">UITabBarController</span></code></pre>

                </div>
              </div>
            <p>UITabBarController with item animations</p>

          </section>
          <section class="section task-group-section">
            <div class="task-group">
              <div class="task-name-container">
                <a name="/life%20circle"></a>
                <a name="//apple_ref/swift/Section/life circle" class="dashAnchor"></a>
                <a href="#/life%20circle">
                  <h3 class="section-name">life circle</h3>
                </a>
              </div>
              <ul>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT7nibNameGSqSS_6bundleGSqCSo8NSBundle__S0_"></a>
                    <a name="//apple_ref/swift/Method/init(nibName:bundle:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT7nibNameGSqSS_6bundleGSqCSo8NSBundle__S0_">init(nibName:bundle:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Returns a newly initialized view controller with the nib file in the specified bundle.</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">public</span> <span class="k">override</span> <span class="nf">init</span><span class="p">(</span><span class="n">nibName</span> <span class="nv">nibNameOrNil</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="n">bundle</span> <span class="nv">nibBundleOrNil</span><span class="p">:</span> <span class="kt">NSBundle</span><span class="p">?)</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>nibNameOrNil</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>The name of the nib file to associate with the view controller. The nib file name should not contain any leading path information. If you specify nil, the nibName property is set to nil.</p>

                                </div>
                              </td>
                            </tr>
                            <tr>
                              <td>
                                <code>
                                <em>nibBundleOrNil</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>The bundle in which to search for the nib file. This method looks for the nib file in the bundle&rsquo;s language-specific project directories first, followed by the Resources directory. If this parameter is nil, the method uses the heuristics described below to locate the nib file.</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                      <div>
                        <h4>Return Value</h4>
                        <p>A newly initialized RAMAnimatedTabBarController object.</p>

                      </div>
                    </section>
                  </div>
                </li>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT15viewControllersGSaCSo16UIViewController__S0_"></a>
                    <a name="//apple_ref/swift/Method/init(viewControllers:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT15viewControllersGSaCSo16UIViewController__S0_">init(viewControllers:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Returns a newly initialized view controller with the nib file in the specified bundle.</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">public</span> <span class="nf">init</span><span class="p">(</span><span class="nv">viewControllers</span><span class="p">:</span> <span class="p">[</span><span class="kt">UIViewController</span><span class="p">])</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>viewControllers</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>Sets the root view controllers of the tab bar controller.</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                      <div>
                        <h4>Return Value</h4>
                        <p>A newly initialized RAMAnimatedTabBarController object.</p>

                      </div>
                    </section>
                  </div>
                </li>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT5coderCSo7NSCoder_GSqS0__"></a>
                    <a name="//apple_ref/swift/Method/init(coder:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarControllercFT5coderCSo7NSCoder_GSqS0__">init(coder:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Returns a newly initialized view controller with the nib file in the specified bundle.</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">required</span> <span class="kd">public</span> <span class="nf">init</span><span class="p">?(</span><span class="n">coder</span> <span class="nv">aDecoder</span><span class="p">:</span> <span class="kt">NSCoder</span><span class="p">)</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>coder</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>An unarchiver object.</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                      <div>
                        <h4>Return Value</h4>
                        <p>A newly initialized RAMAnimatedTabBarController object.</p>

                      </div>
                    </section>
                  </div>
                </li>
              </ul>
            </div>
            <div class="task-group">
              <ul>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController19changeSelectedColorFTCSo7UIColor17iconSelectedColorS1__T_"></a>
                    <a name="//apple_ref/swift/Method/changeSelectedColor(_:iconSelectedColor:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController19changeSelectedColorFTCSo7UIColor17iconSelectedColorS1__T_">changeSelectedColor(_:iconSelectedColor:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Change selected color for each UITabBarItem</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">changeSelectedColor</span><span class="p">(</span><span class="nv">textSelectedColor</span><span class="p">:</span><span class="kt">UIColor</span><span class="p">,</span> <span class="nv">iconSelectedColor</span><span class="p">:</span><span class="kt">UIColor</span><span class="p">)</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>textSelectedColor</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>set new color for text</p>

                                </div>
                              </td>
                            </tr>
                            <tr>
                              <td>
                                <code>
                                <em>iconSelectedColor</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>set new color for icon</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                    </section>
                  </div>
                </li>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController21animationTabBarHiddenFSbT_"></a>
                    <a name="//apple_ref/swift/Method/animationTabBarHidden(_:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController21animationTabBarHiddenFSbT_">animationTabBarHidden(_:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Hide UITabBarController</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">animationTabBarHidden</span><span class="p">(</span><span class="nv">isHidden</span><span class="p">:</span><span class="kt">Bool</span><span class="p">)</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>isHidden</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>A Boolean indicating whether the UITabBarController is displayed</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                    </section>
                  </div>
                </li>
                <li class="item">
                  <div>
                    <code>
                    <a name="/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController14setSelectIndexFT4fromSi2toSi_T_"></a>
                    <a name="//apple_ref/swift/Method/setSelectIndex(from:to:)" class="dashAnchor"></a>
                    <a class="token" href="#/s:FC21RAMAnimatedTabBarDemo27RAMAnimatedTabBarController14setSelectIndexFT4fromSi2toSi_T_">setSelectIndex(from:to:)</a>
                    </code>
                  </div>
                  <div class="height-container">
                    <div class="pointer-container"></div>
                    <section class="section">
                      <div class="pointer"></div>
                      <div class="abstract">
                        <p>Selected UITabBarItem with animaton</p>

                      </div>
                      <div class="declaration">
                        <h4>Declaration</h4>
                        <div class="language">
                          <p class="aside-title">Swift</p>
                          <pre class="highlight"><code><span class="kd">public</span> <span class="kd">func</span> <span class="nf">setSelectIndex</span><span class="p">(</span><span class="n">from</span> <span class="nv">from</span><span class="p">:</span> <span class="kt">Int</span><span class="p">,</span> <span class="nv">to</span><span class="p">:</span> <span class="kt">Int</span><span class="p">)</span></code></pre>

                        </div>
                      </div>
                      <div>
                        <h4>Parameters</h4>
                        <table class="graybox">
                          <tbody>
                            <tr>
                              <td>
                                <code>
                                <em>from</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>Index for unselected animation</p>

                                </div>
                              </td>
                            </tr>
                            <tr>
                              <td>
                                <code>
                                <em>to</em>
                                </code>
                              </td>
                              <td>
                                <div>
                                  <p>Index for selected animation</p>

                                </div>
                              </td>
                            </tr>
                          </tbody>
                        </table>
                      </div>
                    </section>
                  </div>
                </li>
              </ul>
            </div>
          </section>
        </section>
        <section id="footer">
          <p>&copy; 2016 <a class="link" href="" target="_blank" rel="external">AlexKalinkin</a>. All rights reserved. (Last updated: 2016-06-10)</p>
          <p>Generated by <a class="link" href="https://github.com/realm/jazzy" target="_blank" rel="external">jazzy ♪♫ v0.5.0</a>, a <a class="link" href="http://realm.io" target="_blank" rel="external">Realm</a> project.</p>
        </section>
      </article>
    </div>
  </body>
</div>
</html>


=======================
Download .txt
gitextract_ozh3a0j9/

├── .gitignore
├── .swift-version
├── .travis.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── Package.swift
├── RAMAnimatedTabBarController/
│   ├── Animations/
│   │   ├── BounceAnimation/
│   │   │   └── RAMBounceAnimation.swift
│   │   ├── FrameAnimation/
│   │   │   └── RAMFrameItemAnimation.swift
│   │   ├── FumeAnimation/
│   │   │   └── RAMFumeAnimation.swift
│   │   ├── RotationAnimation/
│   │   │   └── RAMRotationAnimation.swift
│   │   └── TransitionAniamtions/
│   │       └── RAMTransitionItemAnimations.swift
│   ├── BottomLine/
│   │   └── RAMAnimatedTabBarController+BottomLine.swift
│   ├── RAMAnimatedTabBarController.swift
│   ├── RAMAnimatedTabBarItem.swift
│   ├── RAMBadge/
│   │   └── RAMBadge.swift
│   ├── RAMItemAnimationProtocol.swift
│   └── Utilities/
│       └── Collection+Extensions.swift
├── RAMAnimatedTabBarController.podspec
├── RAMAnimatedTabBarDemo/
│   ├── AnimatedTabBarTests/
│   │   ├── AnimatedTabBarTests.swift
│   │   ├── Info.plist
│   │   └── RAMBadgeTests.swift
│   ├── RAMAnimatedTabBarDemo/
│   │   ├── AppDelegate.swift
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.xib
│   │   │   └── Main.storyboard
│   │   ├── Images.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   ├── Settings_icon/
│   │   │   │   └── Settings.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Tools/
│   │   │   │   ├── Tools_00028.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00029.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00030.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00031.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00032.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00033.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00034.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00035.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00036.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00037.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00038.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00039.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00040.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00041.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00042.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00043.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00044.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00045.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00046.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00047.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00048.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00049.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00050.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00051.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00052.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00053.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00054.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00055.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00056.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00057.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00058.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00059.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00060.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00061.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00062.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00063.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Tools_00064.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── Tools_00065.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── drop/
│   │   │   │   └── drop.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── icon_pin.imageset/
│   │   │   │   └── Contents.json
│   │   │   └── icon_user.imageset/
│   │   │       └── Contents.json
│   │   ├── Info.plist
│   │   ├── Resources/
│   │   │   └── ToolsAnimation.plist
│   │   └── ViewController.swift
│   ├── RAMAnimatedTabBarDemo.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   ├── contents.xcworkspacedata
│   │   │   └── xcshareddata/
│   │   │       ├── IDEWorkspaceChecks.plist
│   │   │       └── WorkspaceSettings.xcsettings
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── RAMAnimatedTabBarController.xcscheme
│   └── TabBarLib/
│       ├── Info.plist
│       └── TabBarLib.h
├── README.md
└── docs/
    ├── Classes/
    │   ├── RAMAnimatedTabBarController.html
    │   ├── RAMAnimatedTabBarItem.html
    │   ├── RAMBounceAnimation.html
    │   ├── RAMFrameItemAnimation.html
    │   ├── RAMFumeAnimation.html
    │   ├── RAMItemAnimation.html
    │   ├── RAMRotationAnimation.html
    │   └── RAMTransitionItemAnimations.html
    ├── Classes.html
    ├── css/
    │   ├── highlight.css
    │   └── jazzy.css
    ├── docsets/
    │   ├── RAMAnimatedTabBarDemo.docset/
    │   │   └── Contents/
    │   │       ├── Info.plist
    │   │       └── Resources/
    │   │           ├── Documents/
    │   │           │   ├── Classes/
    │   │           │   │   ├── RAMAnimatedTabBarController.html
    │   │           │   │   ├── RAMAnimatedTabBarItem.html
    │   │           │   │   ├── RAMBounceAnimation.html
    │   │           │   │   ├── RAMFrameItemAnimation.html
    │   │           │   │   ├── RAMFumeAnimation.html
    │   │           │   │   ├── RAMItemAnimation.html
    │   │           │   │   ├── RAMRotationAnimation.html
    │   │           │   │   └── RAMTransitionItemAnimations.html
    │   │           │   ├── Classes.html
    │   │           │   ├── css/
    │   │           │   │   ├── highlight.css
    │   │           │   │   └── jazzy.css
    │   │           │   ├── index.html
    │   │           │   ├── js/
    │   │           │   │   └── jazzy.js
    │   │           │   └── undocumented.txt
    │   │           └── docSet.dsidx
    │   └── RAMAnimatedTabBarDemo.tgz
    ├── index.html
    ├── js/
    │   └── jazzy.js
    └── undocumented.txt
Condensed preview — 110 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (562K chars).
[
  {
    "path": ".gitignore",
    "chars": 690,
    "preview": "# Xcode\n#\nbuild/\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectivev3\n!defau"
  },
  {
    "path": ".swift-version",
    "chars": 4,
    "preview": "4.2\n"
  },
  {
    "path": ".travis.yml",
    "chars": 224,
    "preview": "osx_image: xcode10.2\nlanguage: objective-c\nxcode_sdk: iphonesimulator12.1\n\nxcode_project: RAMAnimatedTabBarDemo/RAMAnima"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 3475,
    "preview": "# Contributing to a Project\nNow that you’ve found the material for understanding the project, here is how you can take a"
  },
  {
    "path": "LICENSE",
    "chars": 1076,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Ramotion\n\nPermission is hereby granted, free of charge, to any person obtainin"
  },
  {
    "path": "Package.swift",
    "chars": 1630,
    "preview": "// swift-tools-version:5.1\n//\n//  Package.swift\n//\n//  Copyright (c) Ramotion Inc. (https://www.ramotion.com/)\n//\n//  Pe"
  },
  {
    "path": "RAMAnimatedTabBarController/Animations/BounceAnimation/RAMBounceAnimation.swift",
    "chars": 3698,
    "preview": "//  RAMBounceAnimation.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is hereby"
  },
  {
    "path": "RAMAnimatedTabBarController/Animations/FrameAnimation/RAMFrameItemAnimation.swift",
    "chars": 4947,
    "preview": "//  RAMFrameItemAnimation.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is her"
  },
  {
    "path": "RAMAnimatedTabBarController/Animations/FumeAnimation/RAMFumeAnimation.swift",
    "chars": 5935,
    "preview": "\n//  RAMFumeAnimation.swift\n//\n// Copyright (c) 12/2/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is hereby g"
  },
  {
    "path": "RAMAnimatedTabBarController/Animations/RotationAnimation/RAMRotationAnimation.swift",
    "chars": 4578,
    "preview": "//  RAMRotationAnimation.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is here"
  },
  {
    "path": "RAMAnimatedTabBarController/Animations/TransitionAniamtions/RAMTransitionItemAnimations.swift",
    "chars": 4415,
    "preview": "//  RAMTransitionItemAnimations.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission "
  },
  {
    "path": "RAMAnimatedTabBarController/BottomLine/RAMAnimatedTabBarController+BottomLine.swift",
    "chars": 3827,
    "preview": "// Copyright (c) 03/05/2018. Ramotion Inc. (http://ramotion.com)\n//\n// Permission is hereby granted, free of charge, to "
  },
  {
    "path": "RAMAnimatedTabBarController/RAMAnimatedTabBarController.swift",
    "chars": 12446,
    "preview": "//  RAMAnimatedTabBarController.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission "
  },
  {
    "path": "RAMAnimatedTabBarController/RAMAnimatedTabBarItem.swift",
    "chars": 4495,
    "preview": "//  RAMAnimatedTabBarItem.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is her"
  },
  {
    "path": "RAMAnimatedTabBarController/RAMBadge/RAMBadge.swift",
    "chars": 4079,
    "preview": "//  RAMBadge.swift\n//\n// Copyright (c) 17/12/15 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is hereby granted, "
  },
  {
    "path": "RAMAnimatedTabBarController/RAMItemAnimationProtocol.swift",
    "chars": 3747,
    "preview": "//  RAMItemAnimationProtocol.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is "
  },
  {
    "path": "RAMAnimatedTabBarController/Utilities/Collection+Extensions.swift",
    "chars": 2037,
    "preview": "//  Collection+Extensions.swift\n//\n// Copyright (c) 11/10/14 Ramotion Inc. (http://ramotion.com)\n//\n// Permission is her"
  },
  {
    "path": "RAMAnimatedTabBarController.podspec",
    "chars": 563,
    "preview": "Pod::Spec.new do |s|\n  s.name = 'RAMAnimatedTabBarController'\n  s.version = '5.2.0'\n  s.license = 'MIT'\n  s.summary = 'R"
  },
  {
    "path": "RAMAnimatedTabBarDemo/AnimatedTabBarTests/AnimatedTabBarTests.swift",
    "chars": 3838,
    "preview": "//\n//  AnimatedTabBarTests.swift\n//  AnimatedTabBarTests\n//\n//  Created by Alex K on 17/08/2018.\n//  Copyright © 2018 Ra"
  },
  {
    "path": "RAMAnimatedTabBarDemo/AnimatedTabBarTests/Info.plist",
    "chars": 701,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/AnimatedTabBarTests/RAMBadgeTests.swift",
    "chars": 529,
    "preview": "import XCTest\n@testable import Animated_Tab_Bar\n\nclass RAMBadgeTests: XCTestCase {\n    \n    var badge: RAMBadge!\n\n    ov"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/AppDelegate.swift",
    "chars": 467,
    "preview": "//\n//  AppDelegate.swift\n//  RAMAnimatedTabBarDemo\n//\n//  Created by Alex Kalinkin on 11/18/14.\n//  Copyright (c) 2014 R"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Base.lproj/LaunchScreen.xib",
    "chars": 3641,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Base.lproj/Main.storyboard",
    "chars": 22315,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2262,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"icon-40.png\",\n      \"scale\""
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Settings_icon/Settings.imageset/Contents.json",
    "chars": 399,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Settings_00208.png\"\n    },"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00028.imageset/Contents.json",
    "chars": 392,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00028.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00029.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00029.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00030.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00030.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00031.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00031.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00032.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00032.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00033.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00033.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00034.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00034.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00035.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00035.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00036.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00036.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00037.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00037.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00038.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00038.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00039.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00039.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00040.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00040.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00041.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00041.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00042.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00042.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00043.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00043.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00044.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00044.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00045.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00045.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00046.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00046.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00047.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00047.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00048.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00048.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00049.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00049.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00050.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00050.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00051.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00051.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00052.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00052.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00053.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00053.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00054.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00054.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00055.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00055.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00056.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00056.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00057.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00057.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00058.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00058.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00059.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00059.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00060.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00060.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00061.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00061.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00062.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00062.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00063.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00063.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00064.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00064.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/Tools/Tools_00065.imageset/Contents.json",
    "chars": 390,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"Tools_00065.png\"\n    },\n  "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/drop/drop.imageset/Contents.json",
    "chars": 368,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"drop.png\"\n    },\n    {\n   "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/icon_pin.imageset/Contents.json",
    "chars": 399,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"icon_pin_00160.png\"\n    },"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Images.xcassets/icon_user.imageset/Contents.json",
    "chars": 387,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\",\n      \"filename\" : \"user_00084.png\"\n    },\n   "
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Info.plist",
    "chars": 1495,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/Resources/ToolsAnimation.plist",
    "chars": 1330,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo/ViewController.swift",
    "chars": 521,
    "preview": "//\n//  ViewController.swift\n//  RAMAnimatedTabBarDemo\n//\n//  Created by Alex Kalinkin on 11/18/14.\n//  Copyright (c) 201"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.pbxproj",
    "chars": 36894,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 166,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:RAMAnimatedTabB"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 264,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/RAMAnimatedTabBarDemo.xcodeproj/xcshareddata/xcschemes/RAMAnimatedTabBarController.xcscheme",
    "chars": 3887,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1020\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "RAMAnimatedTabBarDemo/TabBarLib/Info.plist",
    "chars": 753,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "RAMAnimatedTabBarDemo/TabBarLib/TabBarLib.h",
    "chars": 489,
    "preview": "//\n//  TabBarLib.h\n//  TabBarLib\n//\n//  Created by Alex K. on 14/10/16.\n//  Copyright © 2016 Ramotion. All rights reserv"
  },
  {
    "path": "README.md",
    "chars": 6096,
    "preview": "<a href=\"https://www.ramotion.com/agency/app-development/?utm_source=gthb&utm_medium=repo&utm_campaign=animated-tab-bar\""
  },
  {
    "path": "docs/Classes/RAMAnimatedTabBarController.html",
    "chars": 20898,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarController Class Reference</title>\n    <link rel=\""
  },
  {
    "path": "docs/Classes/RAMAnimatedTabBarItem.html",
    "chars": 15569,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarItem Class Reference</title>\n    <link rel=\"styles"
  },
  {
    "path": "docs/Classes/RAMBounceAnimation.html",
    "chars": 13938,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMBounceAnimation Class Reference</title>\n    <link rel=\"styleshee"
  },
  {
    "path": "docs/Classes/RAMFrameItemAnimation.html",
    "chars": 20205,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMFrameItemAnimation Class Reference</title>\n    <link rel=\"styles"
  },
  {
    "path": "docs/Classes/RAMFumeAnimation.html",
    "chars": 13913,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMFumeAnimation Class Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/Classes/RAMItemAnimation.html",
    "chars": 19106,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMItemAnimation Class Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/Classes/RAMRotationAnimation.html",
    "chars": 16809,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMRotationAnimation Class Reference</title>\n    <link rel=\"stylesh"
  },
  {
    "path": "docs/Classes/RAMTransitionItemAnimations.html",
    "chars": 15523,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMTransitionItemAnimations Class Reference</title>\n    <link rel=\""
  },
  {
    "path": "docs/Classes.html",
    "chars": 15967,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Classes  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/cs"
  },
  {
    "path": "docs/css/highlight.css",
    "chars": 4479,
    "preview": "/* Credit to https://gist.github.com/wataru420/2048287 */\n.highlight {\n  /* Comment */\n  /* Error */\n  /* Keyword */\n  /"
  },
  {
    "path": "docs/css/jazzy.css",
    "chars": 6565,
    "preview": "html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td {\n  background: transparent;\n  bord"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Info.plist",
    "chars": 640,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMAnimatedTabBarController.html",
    "chars": 20898,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarController Class Reference</title>\n    <link rel=\""
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMAnimatedTabBarItem.html",
    "chars": 15569,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarItem Class Reference</title>\n    <link rel=\"styles"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMBounceAnimation.html",
    "chars": 13938,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMBounceAnimation Class Reference</title>\n    <link rel=\"styleshee"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMFrameItemAnimation.html",
    "chars": 20205,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMFrameItemAnimation Class Reference</title>\n    <link rel=\"styles"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMFumeAnimation.html",
    "chars": 13913,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMFumeAnimation Class Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMItemAnimation.html",
    "chars": 19106,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMItemAnimation Class Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMRotationAnimation.html",
    "chars": 16809,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMRotationAnimation Class Reference</title>\n    <link rel=\"stylesh"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes/RAMTransitionItemAnimations.html",
    "chars": 15523,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMTransitionItemAnimations Class Reference</title>\n    <link rel=\""
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/Classes.html",
    "chars": 15967,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>Classes  Reference</title>\n    <link rel=\"stylesheet\" type=\"text/cs"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/css/highlight.css",
    "chars": 4479,
    "preview": "/* Credit to https://gist.github.com/wataru420/2048287 */\n.highlight {\n  /* Comment */\n  /* Error */\n  /* Keyword */\n  /"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/css/jazzy.css",
    "chars": 6565,
    "preview": "html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td {\n  background: transparent;\n  bord"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/index.html",
    "chars": 14818,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarDemo  Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/js/jazzy.js",
    "chars": 1182,
    "preview": "window.jazzy = {'docset': false}\nif (typeof window.dash != 'undefined') {\n  document.documentElement.className += ' dash"
  },
  {
    "path": "docs/docsets/RAMAnimatedTabBarDemo.docset/Contents/Resources/Documents/undocumented.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "docs/index.html",
    "chars": 14802,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <title>RAMAnimatedTabBarDemo  Reference</title>\n    <link rel=\"stylesheet\""
  },
  {
    "path": "docs/js/jazzy.js",
    "chars": 1182,
    "preview": "window.jazzy = {'docset': false}\nif (typeof window.dash != 'undefined') {\n  document.documentElement.className += ' dash"
  },
  {
    "path": "docs/undocumented.txt",
    "chars": 0,
    "preview": ""
  }
]

// ... and 2 more files (download for full content)

About this extraction

This page contains the full source code of the Ramotion/animated-tab-bar GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 110 files (510.4 KB), approximately 129.6k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!