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>
[](http://cocoapods.org/pods/RAMAnimatedTabBarController)
[](http://cocoapods.org/pods/RAMAnimatedTabBarController)
[](https://github.com/Ramotion/animated-tab-bar)
[](https://developer.apple.com/swift/)
[](http://twitter.com/Ramotion)
[](https://travis-ci.org/Ramotion/animated-tab-bar)
[](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’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>© 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>
=======================
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.