Full Code of edekhayser/FrostedSidebar for AI

master 68b4ab4e44f4 cached
30 files
101.2 KB
28.3k tokens
1 requests
Download .txt
Repository: edekhayser/FrostedSidebar
Branch: master
Commit: 68b4ab4e44f4
Files: 30
Total size: 101.2 KB

Directory structure:
gitextract_4i9b7z9c/

├── CustomStuff/
│   └── LaunchScreen.storyboard
├── FrostedSidebar/
│   ├── AppDelegate.swift
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── FrostedSidebar.swift
│   ├── Info.plist
│   ├── Main.storyboard
│   ├── TabBarController.swift
│   └── ViewController.swift
├── FrostedSidebar.podspec
├── FrostedSidebar.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   ├── xcshareddata/
│   │   │   ├── FrostedSidebar.xccheckout
│   │   │   └── FrostedSidebar.xcscmblueprint
│   │   └── xcuserdata/
│   │       ├── Peng.xcuserdatad/
│   │       │   └── UserInterfaceState.xcuserstate
│   │       ├── czarlos.xcuserdatad/
│   │       │   └── UserInterfaceState.xcuserstate
│   │       └── evan.xcuserdatad/
│   │           ├── UserInterfaceState.xcuserstate
│   │           └── WorkspaceSettings.xcsettings
│   └── xcuserdata/
│       ├── Peng.xcuserdatad/
│       │   └── xcschemes/
│       │       ├── FrostedSidebar.xcscheme
│       │       └── xcschememanagement.plist
│       ├── czarlos.xcuserdatad/
│       │   └── xcschemes/
│       │       ├── FrostedSidebar.xcscheme
│       │       └── xcschememanagement.plist
│       └── evan.xcuserdatad/
│           ├── xcdebugger/
│           │   └── Breakpoints_v2.xcbkptlist
│           └── xcschemes/
│               ├── CustomStuff.xcscheme
│               └── xcschememanagement.plist
├── Images.xcassets/
│   ├── AppIcon.appiconset/
│   │   └── Contents.json
│   ├── Contents.json
│   └── burger.imageset/
│       └── Contents.json
├── LICENSE
├── LaunchScreen.storyboard
└── README.md

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

================================================
FILE: CustomStuff/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6211" systemVersion="14A298i" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6204"/>
    </dependencies>
    <scenes/>
</document>


================================================
FILE: FrostedSidebar/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  CustomStuff
//
//  Created by Evan Dekhayser on 7/9/14.
//  Copyright (c) 2014 Evan Dekhayser. All rights reserved.
//

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
	
	var window: UIWindow?
	
	func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
		return true
	}
	
	func applicationWillResignActive(_ application: UIApplication) {
		// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
		// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
	}
	
	func applicationDidEnterBackground(_ application: UIApplication) {
		// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
		// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
	}
	
	func applicationWillEnterForeground(_ application: UIApplication) {
		// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
	}
	
	func applicationDidBecomeActive(_ application: UIApplication) {
		// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
	}
	
	func applicationWillTerminate(_ application: UIApplication) {
		// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
	}
	
	
}



================================================
FILE: FrostedSidebar/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6185.7" systemVersion="13E28" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vXZ-lx-hvc">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6181.2"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="ufC-wZ-h7g">
            <objects>
                <viewController id="vXZ-lx-hvc" customClass="ViewController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
                        <viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="kh9-bI-dsS">
                        <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
                        <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleAspectFill" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="FMc-fA-TD3">
                                <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
                            </imageView>
                            <button opaque="NO" contentMode="scaleToFill" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="hMY-9x-B2C">
                                <rect key="frame" x="20" y="20" width="47" height="42"/>
                                <color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <state key="normal" image="burger.png"/>
                                <connections>
                                    <action selector="onBurger" destination="vXZ-lx-hvc" eventType="touchUpInside" id="Tic-LE-hHc"/>
                                </connections>
                            </button>
                        </subviews>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="FMc-fA-TD3" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" id="7AM-E3-2fy"/>
                            <constraint firstAttribute="bottom" secondItem="FMc-fA-TD3" secondAttribute="bottom" id="9tF-H3-T9s"/>
                            <constraint firstAttribute="trailing" secondItem="FMc-fA-TD3" secondAttribute="trailing" id="Um1-FV-8h7"/>
                            <constraint firstItem="FMc-fA-TD3" firstAttribute="top" secondItem="kh9-bI-dsS" secondAttribute="top" id="qIv-vN-ZgI"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
    <resources>
        <image name="Background.jpg" width="63" height="111"/>
        <image name="burger.png" width="19" height="17"/>
    </resources>
</document>


================================================
FILE: FrostedSidebar/FrostedSidebar.swift
================================================
//
//  FrostedSidebar.swift
//  CustomStuff
//
//  Created by Evan Dekhayser on 7/9/14.
//  Copyright (c) 2014 Evan Dekhayser. All rights reserved.
//

import UIKit
import QuartzCore

/**
 Delegate for FrostedSidebar.
*/
public protocol FrostedSidebarDelegate{
    /**
     Delegate method called when FrostedSidebar will show on screen.
     
     - Parameter sidebar: The sidebar that will be shown.
     - Parameter animated: If the sidebar will be animated.
    */
    func sidebar(_ sidebar: FrostedSidebar, willShowOnScreenAnimated animated: Bool)
    /**
     Delegate method called when FrostedSidebar was shown on screen.
     
     - Parameter sidebar: The sidebar that was shown.
     - Parameter animated: If the sidebar was animated.
     */
    func sidebar(_ sidebar: FrostedSidebar, didShowOnScreenAnimated animated: Bool)
    /**
     Delegate method called when FrostedSidebar will be dismissed.
     
     - Parameter sidebar: The sidebar that will be dismissed.
     - Parameter animated: If the sidebar will be animated.
     */
    func sidebar(_ sidebar: FrostedSidebar, willDismissFromScreenAnimated animated: Bool)
    /**
     Delegate method called when FrostedSidebar was dismissed.
     
     - Parameter sidebar: The sidebar that was dismissed.
     - Parameter animated: If the sidebar was animated.
     */
    func sidebar(_ sidebar: FrostedSidebar, didDismissFromScreenAnimated animated: Bool)
    /**
     Delegate method called when an item was tapped.
     
     - Parameter sidebar: The sidebar that's item was tapped.
     - Parameter index: The index of the tapped item.
     */
    func sidebar(_ sidebar: FrostedSidebar, didTapItemAtIndex index: Int)
    /**
     Delegate method called when an item was enabled.
     
     - Parameter sidebar: The sidebar that's item was tapped.
     - Parameter itemEnabled: The enabled status of the tapped item.
     - Parameter index: The index of the tapped item.
     */
    func sidebar(_ sidebar: FrostedSidebar, didEnable itemEnabled: Bool, itemAtIndex index: Int)
}

/**
 Instance representing the last-used FrostedSidebar in the app.
*/
var sharedSidebar: FrostedSidebar?

/**
 Selection behavior for FrostedSidebar.
*/
public enum SidebarItemSelectionStyle{
    /**
     No sidebar items are selected.
    */
    case none
    /**
     Only a single sidebar item is selected.
    */
    case single
    /**
     All sidebar items are selected at all times.
    */
    case all
}

/**
 Animated Sidebar.
*/
open class FrostedSidebar: UIViewController {
    
    //MARK: Public Properties
    /**
     The width of the sidebar.
    */
    open var width:                   CGFloat                     = 145.0
    /**
     If the sidebar should show from the right.
    */
    open var showFromRight:           Bool                        = false
    /**
     The speed at which the sidebar is presented/dismissed.
    */
    open var animationDuration:       CGFloat                     = 0.25
    /**
     The size of the sidebar items.
    */
    open var itemSize:                CGSize                      = CGSize(width: 90.0, height: 90.0)
    /**
     The background color of the sidebar items.
    */
    open var itemBackgroundColor:     UIColor                     = UIColor(white: 1, alpha: 0.25)
    /**
     The width of the ring around selected sidebar items.
    */
    open var borderWidth:             CGFloat                     = 2
    /**
     The sidebar's delegate.
    */
    open var delegate:                FrostedSidebarDelegate?     = nil
    /**
     A dictionary that holds the actions for each item index.
    */
    open var actionForIndex:          [Int : ()->()]              = [:]
    /**
     The indexes that are selected and have rings around them.
    */
    open var selectedIndices:         NSMutableIndexSet           = NSMutableIndexSet()
    /**
     If the sidebar should be positioned beneath a navigation bar that is on screen.
    */
    open var adjustForNavigationBar:  Bool                        = false
    /**
     Returns whether or not the sidebar is currently being displayed
    */
    open var isCurrentlyOpen:         Bool                        = false
    /**
     The selection style for the sidebar.
    */
    open var selectionStyle:          SidebarItemSelectionStyle   = .none{
        didSet{
            if case .all = selectionStyle{
                selectedIndices = NSMutableIndexSet(indexesIn: NSRange(location: 0, length: images.count))
            }
        }
    }
    
    //MARK: Private Properties
    
    fileprivate var contentView:            UIScrollView                = UIScrollView()
    fileprivate var blurView:               UIVisualEffectView          = UIVisualEffectView(effect: UIBlurEffect(style: .dark))
    fileprivate var dimView:                UIView                      = UIView()
    fileprivate var tapGesture:             UITapGestureRecognizer?     = nil
    fileprivate var images:                 [UIImage]                   = []
    fileprivate var borderColors:           [UIColor]?                  = nil
    fileprivate var itemViews:              [CalloutItem]               = []
    
    //MARK: Public Methods
    
    /**
     Returns an object initialized from data in a given unarchiver.
    */
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }
    
    /**
     Returns a sidebar initialized with the given data.
     
     - Parameter itemImages: The images that will be used for each item.
     - Parameter colors: The color of rings around each image.
     - Parameter selectionStyle: The selection style for the sidebar.
     
     - Precondition: `colors` is either `nil` or contains the same number of elements as `itemImages`.
    */
    public init(itemImages: [UIImage], colors: [UIColor]?, selectionStyle: SidebarItemSelectionStyle){
        contentView.alwaysBounceHorizontal = false
        contentView.alwaysBounceVertical = true
        contentView.bounces = true
        contentView.clipsToBounds = false
        contentView.showsHorizontalScrollIndicator = false
        contentView.showsVerticalScrollIndicator = false
        if let colors = colors{
            assert(itemImages.count == colors.count, "If item color are supplied, the itemImages and colors arrays must be of the same size.")
        }
        
        self.selectionStyle = selectionStyle
        borderColors = colors
        images = itemImages
        
        for (index, image) in images.enumerated(){
            let view = CalloutItem(index: index)
            view.clipsToBounds = true
            view.imageView.image = image
            contentView.addSubview(view)
            itemViews += [view]
            if let borderColors = borderColors{
                if selectedIndices.contains(index){
                    let color = borderColors[index]
                    view.layer.borderColor = color.cgColor
                }
            } else{
                view.layer.borderColor = UIColor.clear.cgColor
            }
        }
        
        super.init(nibName: nil, bundle: nil)
    }
    
    open override var shouldAutorotate : Bool {
        return true
    }
    
    open override var supportedInterfaceOrientations : UIInterfaceOrientationMask {
        return UIInterfaceOrientationMask.all
    }
    
    open override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        if isViewLoaded{
            dismissAnimated(false, completion: nil)
        }
    }
    
    open override func loadView() {
        super.loadView()
        view.backgroundColor = UIColor.clear
        view.addSubview(dimView)
        view.addSubview(blurView)
        view.addSubview(contentView)
        tapGesture = UITapGestureRecognizer(target: self, action: #selector(FrostedSidebar.handleTap(_:)))
        view.addGestureRecognizer(tapGesture!)
    }
    
    /**
     Shows the sidebar in a view controller.
     
     - Parameter viewController: The view controller in which to show the sidebar.
     - Parameter animated: If the sidebar should be animated.
    */
    open func showInViewController(_ viewController: UIViewController, animated: Bool){
        layoutItems()
        if let bar = sharedSidebar{
            bar.dismissAnimated(false, completion: nil)
        }
        
        delegate?.sidebar(self, willShowOnScreenAnimated: animated)
        
        sharedSidebar = self
        
        addToParentViewController(viewController, callingAppearanceMethods: true)
        view.frame = viewController.view.bounds
        
        dimView.backgroundColor = UIColor.black
        dimView.alpha = 0
        dimView.frame = view.bounds
        
        let parentWidth = view.bounds.size.width
        var contentFrame = view.bounds
        contentFrame.origin.x = showFromRight ? parentWidth : -width
        contentFrame.size.width = width
        contentView.frame = contentFrame
        contentView.contentOffset = CGPoint(x: 0, y: 0)
        layoutItems()
        
        var blurFrame = CGRect(x: showFromRight ? view.bounds.size.width : 0, y: 0, width: 0, height: view.bounds.size.height)
        blurView.frame = blurFrame
        blurView.contentMode = showFromRight ? UIViewContentMode.topRight : UIViewContentMode.topLeft
        blurView.clipsToBounds = true
        view.insertSubview(blurView, belowSubview: contentView)
        
        contentFrame.origin.x = showFromRight ? parentWidth - width : 0
        blurFrame.origin.x = contentFrame.origin.x
        blurFrame.size.width = width
        
        let animations: () -> () = {
            self.contentView.frame = contentFrame
            self.blurView.frame = blurFrame
            self.dimView.alpha = 0.25
        }
        let completion: (Bool) -> Void = { finished in
            if finished{
                self.delegate?.sidebar(self, didShowOnScreenAnimated: animated)
            }
        }
        
        if animated{
            UIView.animate(withDuration: TimeInterval(animationDuration), delay: 0, options: UIViewAnimationOptions(), animations: animations, completion: completion)
        } else{
            animations()
            completion(true)
        }
        
        for (index, item) in itemViews.enumerated(){
            item.layer.transform = CATransform3DMakeScale(0.3, 0.3, 1)
            item.alpha = 0
            item.originalBackgroundColor = itemBackgroundColor
            item.layer.borderWidth = borderWidth
            animateSpringWithView(item, idx: index, initDelay: animationDuration)
        }
        
        self.isCurrentlyOpen = true
    }
    
    /**
     Dismisses the sidebar.
     
     - Parameter animated: If the sidebar should be animated.
     - Parameter completion: Completion handler called when the sidebar is dismissed.
    */
    open func dismissAnimated(_ animated: Bool, completion: ((Bool) -> Void)?){
        let completionBlock: (Bool) -> Void = {finished in
            self.removeFromParentViewControllerCallingAppearanceMethods(true)
            self.delegate?.sidebar(self, didDismissFromScreenAnimated: true)
            self.layoutItems()
            if let completion = completion{
                completion(finished)
            }
        }
        delegate?.sidebar(self, willDismissFromScreenAnimated: animated)
        if animated{
            let parentWidth = view.bounds.size.width
            var contentFrame = contentView.frame
            contentFrame.origin.x = showFromRight ? parentWidth : -width
            var blurFrame = blurView.frame
            blurFrame.origin.x = showFromRight ? parentWidth : 0
            blurFrame.size.width = 0
            UIView.animate(withDuration: TimeInterval(animationDuration), delay: 0, options: UIViewAnimationOptions.beginFromCurrentState, animations: {
                self.contentView.frame = contentFrame
                self.blurView.frame = blurFrame
                self.dimView.alpha = 0
                }, completion: completionBlock)
        } else{
            completionBlock(true)
        }
        
        self.isCurrentlyOpen = false
    }
    
    /**
     Selects the item at the given index.
     
     - Parameter index: The index of the item to select.
    */
    open func selectItemAtIndex(_ index: Int){
        let didEnable = !selectedIndices.contains(index)
        if let borderColors = borderColors{
            let stroke = borderColors[index]
            let item = itemViews[index]
            if didEnable{
                if case .single = selectionStyle{
                    selectedIndices.removeAllIndexes()
                    for item in itemViews{
                        item.layer.borderColor = UIColor.clear.cgColor
                    }
                }
                item.layer.borderColor = stroke.cgColor
                
                let borderAnimation = CABasicAnimation(keyPath: "borderColor")
                borderAnimation.fromValue = UIColor.clear.cgColor
                borderAnimation.toValue = stroke.cgColor
                borderAnimation.duration = 0.5
                item.layer.add(borderAnimation, forKey: nil)
                selectedIndices.add(index)
                
            } else{
                if case .none = selectionStyle{
                        item.layer.borderColor = UIColor.clear.cgColor
                        selectedIndices.remove(index)
                }
            }
            let pathFrame = CGRect(x: -item.bounds.midX, y: -item.bounds.midY, width: item.bounds.size.width, height: item.bounds.size.height)
            let path = UIBezierPath(roundedRect: pathFrame, cornerRadius: item.layer.cornerRadius)
            let shapePosition = view.convert(item.center, from: contentView)
            let circleShape = CAShapeLayer()
            circleShape.path = path.cgPath
            circleShape.position = shapePosition
            circleShape.fillColor = UIColor.clear.cgColor
            circleShape.opacity = 0
            circleShape.strokeColor = stroke.cgColor
            circleShape.lineWidth = borderWidth
            view.layer.addSublayer(circleShape)
            
            let scaleAnimation = CABasicAnimation(keyPath: "transform.scale")
            scaleAnimation.fromValue = NSValue(caTransform3D: CATransform3DIdentity)
            scaleAnimation.toValue = NSValue(caTransform3D: CATransform3DMakeScale(2.5, 2.5, 1))
            let alphaAnimation = CABasicAnimation(keyPath: "opacity")
            alphaAnimation.fromValue = 1
            alphaAnimation.toValue = 0
            let animation = CAAnimationGroup()
            animation.animations = [scaleAnimation, alphaAnimation]
            animation.duration = 0.5
            animation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut)
            circleShape.add(animation, forKey: nil)
        }
        if let action = actionForIndex[index]{
            action()
        }
        delegate?.sidebar(self, didTapItemAtIndex: index)
        delegate?.sidebar(self, didEnable: didEnable, itemAtIndex: index)
    }
    
    //MARK: Private Classes
    
    fileprivate class CalloutItem: UIView{
        var imageView:              UIImageView                 = UIImageView()
        var itemIndex:              Int
        var originalBackgroundColor:UIColor? {
            didSet{
                backgroundColor = originalBackgroundColor
            }
        }
        
        required init?(coder aDecoder: NSCoder) {
            itemIndex = 0
            super.init(coder: aDecoder)
        }
        
        init(index: Int){
            imageView.backgroundColor = UIColor.clear
            imageView.contentMode = UIViewContentMode.scaleAspectFit
            itemIndex = index
            super.init(frame: CGRect.zero)
            addSubview(imageView)
        }
        
        override func layoutSubviews() {
            super.layoutSubviews()
            let inset: CGFloat = bounds.size.height/2
            imageView.frame = CGRect(x: 0, y: 0, width: inset, height: inset)
            imageView.center = CGPoint(x: inset, y: inset)
        }
        
        override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesBegan(touches, with: event)
            
            var r: CGFloat = 0, g: CGFloat = 0, b: CGFloat = 0, a: CGFloat = 0
            let darkenFactor: CGFloat = 0.3
            var darkerColor: UIColor
            if originalBackgroundColor != nil && originalBackgroundColor!.getRed(&r, green: &g, blue: &b, alpha: &a){
                darkerColor = UIColor(red: max(r - darkenFactor, 0), green: max(g - darkenFactor, 0), blue: max(b - darkenFactor, 0), alpha: a)
            } else if originalBackgroundColor != nil && originalBackgroundColor!.getWhite(&r, alpha: &a){
                darkerColor = UIColor(white: max(r - darkenFactor, 0), alpha: a)
            } else{
                darkerColor = UIColor.clear
                assert(false, "Item color should be RBG of White/Alpha in order to darken the button")
            }
            backgroundColor = darkerColor
        }
        
        override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesEnded(touches, with: event)
            backgroundColor = originalBackgroundColor
        }
        
        override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
            super.touchesCancelled(touches, with: event)
            backgroundColor = originalBackgroundColor
        }
        
    }
    
    //MARK: Private Methods
    
    fileprivate func animateSpringWithView(_ view: CalloutItem, idx: Int, initDelay: CGFloat){
        let delay: TimeInterval = TimeInterval(initDelay) + TimeInterval(idx) * 0.1
        UIView.animate(withDuration: 0.5,
            delay: delay,
            usingSpringWithDamping: 10.0,
            initialSpringVelocity: 50.0,
            options: UIViewAnimationOptions.beginFromCurrentState,
            animations: {
                view.layer.transform = CATransform3DIdentity
                view.alpha = 1
            },
            completion: nil)
    }
    
    @objc fileprivate func handleTap(_ recognizer: UITapGestureRecognizer){
        let location = recognizer.location(in: view)
        if !contentView.frame.contains(location){
            dismissAnimated(true, completion: nil)
        } else{
            let tapIndex = indexOfTap(recognizer.location(in: contentView))
            if let tapIndex = tapIndex{
                selectItemAtIndex(tapIndex)
            }
        }
    }
    
    fileprivate func layoutSubviews(){
        let x = showFromRight ? parent!.view.bounds.size.width - width : 0
        contentView.frame = CGRect(x: x, y: 0, width: width, height: parent!.view.bounds.size.height)
        blurView.frame = contentView.frame
        layoutItems()
    }
    
    fileprivate func layoutItems(){
        let leftPadding: CGFloat = (width - itemSize.width) / 2
        let topPadding: CGFloat = leftPadding
        for (index, item) in itemViews.enumerated(){
            let idx: CGFloat = adjustForNavigationBar ? CGFloat(index) + 0.5 : CGFloat(index)
            
            let frame = CGRect(x: leftPadding, y: topPadding*idx + itemSize.height*idx + topPadding, width:itemSize.width, height: itemSize.height)
            item.frame = frame
            item.layer.cornerRadius = frame.size.width / 2
            item.layer.borderColor = UIColor.clear.cgColor
            item.alpha = 0
            if selectedIndices.contains(index){
                if let borderColors = borderColors{
                    item.layer.borderColor = borderColors[index].cgColor
                }
            }
        }
        let itemCount = CGFloat(itemViews.count)
        if adjustForNavigationBar{
            contentView.contentSize = CGSize(width: 0, height: (itemCount + 0.5) * (itemSize.height + topPadding) + topPadding)
        } else {
            contentView.contentSize = CGSize(width: 0, height: itemCount * (itemSize.height + topPadding) + topPadding)
        }
    }
    
    fileprivate func indexOfTap(_ location: CGPoint) -> Int? {
        var index: Int?
        for (idx, item) in itemViews.enumerated(){
            if item.frame.contains(location){
                index = idx
                break
            }
        }
        return index
    }
    
    fileprivate func addToParentViewController(_ viewController: UIViewController, callingAppearanceMethods: Bool){
        if let _ = parent{
            removeFromParentViewControllerCallingAppearanceMethods(callingAppearanceMethods)
        }
        if callingAppearanceMethods{
            beginAppearanceTransition(true, animated: false)
        }
        viewController.addChildViewController(self)
        viewController.view.addSubview(view)
        didMove(toParentViewController: self)
        if callingAppearanceMethods{
            endAppearanceTransition()
        }
    }
    
    fileprivate func removeFromParentViewControllerCallingAppearanceMethods(_ callAppearanceMethods: Bool){
        
        if callAppearanceMethods{
            beginAppearanceTransition(false, animated: false)
        }
        willMove(toParentViewController: nil)
        view.removeFromSuperview()
        removeFromParentViewController()
        if callAppearanceMethods{
            endAppearanceTransition()
        }
    }
}


================================================
FILE: FrostedSidebar/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.1</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>2</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>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: FrostedSidebar/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="8164.2" systemVersion="15A235d" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="00u-vZ-mxX">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="8135.1"/>
        <capability name="Constraints to layout margins" minToolsVersion="6.0"/>
    </dependencies>
    <scenes>
        <!--Item-->
        <scene sceneID="qSd-5i-x6d">
            <objects>
                <viewController id="yFd-Pw-cF0" customClass="ViewController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="28J-8P-oJS"/>
                        <viewControllerLayoutGuide type="bottom" id="AhR-c2-Zoo"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="X4b-dZ-l1O">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="aXT-I8-4Vl">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <animations/>
                            </imageView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Sgi-LI-Rzr">
                                <rect key="frame" x="20" y="20" width="19" height="18"/>
                                <animations/>
                                <color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <state key="normal" image="burger"/>
                                <connections>
                                    <action selector="onBurger" destination="yFd-Pw-cF0" eventType="touchUpInside" id="5Az-vg-sfe"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View Controller 1" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="I6o-9F-JKU">
                                <rect key="frame" x="236" y="289" width="129" height="21"/>
                                <animations/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstAttribute="bottom" secondItem="aXT-I8-4Vl" secondAttribute="bottom" id="2Y8-C2-k4e"/>
                            <constraint firstAttribute="centerX" secondItem="I6o-9F-JKU" secondAttribute="centerX" id="F0s-cM-xdS"/>
                            <constraint firstItem="Sgi-LI-Rzr" firstAttribute="leading" secondItem="X4b-dZ-l1O" secondAttribute="leading" constant="20" id="IgQ-Tf-bIr"/>
                            <constraint firstItem="aXT-I8-4Vl" firstAttribute="leading" secondItem="X4b-dZ-l1O" secondAttribute="leading" id="Pai-eO-zfB"/>
                            <constraint firstItem="aXT-I8-4Vl" firstAttribute="top" secondItem="X4b-dZ-l1O" secondAttribute="top" id="aG0-wg-dfN"/>
                            <constraint firstAttribute="trailing" secondItem="aXT-I8-4Vl" secondAttribute="trailing" id="mA0-o5-49Q"/>
                            <constraint firstAttribute="centerY" secondItem="I6o-9F-JKU" secondAttribute="centerY" id="nfM-nB-vfF"/>
                            <constraint firstItem="Sgi-LI-Rzr" firstAttribute="top" secondItem="X4b-dZ-l1O" secondAttribute="top" constant="20" id="zVh-p0-qNa"/>
                        </constraints>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item" id="9eZ-lD-MBt"/>
                    <nil key="simulatedBottomBarMetrics"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Dvg-aq-5CD" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1334" y="-502"/>
        </scene>
        <!--View Controller-->
        <scene sceneID="lWc-99-BKQ">
            <objects>
                <viewController hidesBottomBarWhenPushed="YES" id="wsn-Gr-6uq" customClass="ViewController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="au1-Kd-8M0"/>
                        <viewControllerLayoutGuide type="bottom" id="ih7-Ly-jhN"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="DIn-Ba-Sh9">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="isk-Lh-N8p">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <animations/>
                            </imageView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Wsa-Mc-D9E">
                                <rect key="frame" x="20" y="40" width="19" height="18"/>
                                <animations/>
                                <color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <state key="normal" image="burger"/>
                                <connections>
                                    <action selector="onBurger" destination="wsn-Gr-6uq" eventType="touchUpInside" id="R1W-pZ-00J"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View Controller 2" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="IjJ-cb-LfY">
                                <rect key="frame" x="234" y="289" width="132" height="21"/>
                                <animations/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="Wsa-Mc-D9E" firstAttribute="top" secondItem="au1-Kd-8M0" secondAttribute="bottom" constant="20" id="3If-VF-oVs"/>
                            <constraint firstAttribute="trailing" secondItem="isk-Lh-N8p" secondAttribute="trailing" id="DpX-Jz-l1u"/>
                            <constraint firstAttribute="centerY" secondItem="IjJ-cb-LfY" secondAttribute="centerY" id="MNg-tq-Tfu"/>
                            <constraint firstItem="isk-Lh-N8p" firstAttribute="top" secondItem="DIn-Ba-Sh9" secondAttribute="top" id="SJS-BX-XlM"/>
                            <constraint firstAttribute="bottom" secondItem="isk-Lh-N8p" secondAttribute="bottom" id="aQL-lu-CWB"/>
                            <constraint firstItem="isk-Lh-N8p" firstAttribute="leading" secondItem="DIn-Ba-Sh9" secondAttribute="leading" id="cAg-9h-mxw"/>
                            <constraint firstAttribute="centerX" secondItem="IjJ-cb-LfY" secondAttribute="centerX" id="feb-QU-6NV"/>
                            <constraint firstItem="Wsa-Mc-D9E" firstAttribute="leading" secondItem="DIn-Ba-Sh9" secondAttribute="leading" constant="20" id="flN-dG-QF3"/>
                        </constraints>
                    </view>
                    <tabBarItem key="tabBarItem" title="" id="QNd-BW-RNS"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="4MC-Dr-mNV" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1334" y="171"/>
        </scene>
        <!--Item-->
        <scene sceneID="ZlK-Wb-2aS">
            <objects>
                <viewController id="VA2-Zc-qCQ" customClass="ViewController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="LDU-Sj-WQx"/>
                        <viewControllerLayoutGuide type="bottom" id="RWE-EN-EgE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="XSo-Uo-cvr">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="Kgs-SL-9NA">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <animations/>
                            </imageView>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View Controller 3" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ygk-EM-vOX">
                                <rect key="frame" x="234" y="289" width="132" height="21"/>
                                <animations/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="rOG-uS-t5o">
                                <rect key="frame" x="20" y="40" width="19" height="18"/>
                                <animations/>
                                <color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <state key="normal" image="burger"/>
                                <connections>
                                    <action selector="onBurger" destination="VA2-Zc-qCQ" eventType="touchUpInside" id="zth-Uy-7ja"/>
                                </connections>
                            </button>
                        </subviews>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="rOG-uS-t5o" firstAttribute="leading" secondItem="XSo-Uo-cvr" secondAttribute="leading" constant="20" id="1OT-N3-lgu"/>
                            <constraint firstItem="Kgs-SL-9NA" firstAttribute="top" secondItem="XSo-Uo-cvr" secondAttribute="top" id="9Wy-Kx-ZZ1"/>
                            <constraint firstItem="Kgs-SL-9NA" firstAttribute="leading" secondItem="XSo-Uo-cvr" secondAttribute="leading" id="Ceu-ZS-Bui"/>
                            <constraint firstAttribute="centerX" secondItem="ygk-EM-vOX" secondAttribute="centerX" id="DDR-cZ-UdU"/>
                            <constraint firstAttribute="centerY" secondItem="ygk-EM-vOX" secondAttribute="centerY" id="DTV-Qb-3W6"/>
                            <constraint firstItem="rOG-uS-t5o" firstAttribute="leading" secondItem="XSo-Uo-cvr" secondAttribute="leadingMargin" constant="20" id="MwS-ci-kD5"/>
                            <constraint firstItem="rOG-uS-t5o" firstAttribute="top" secondItem="LDU-Sj-WQx" secondAttribute="bottom" constant="20" id="P5N-2L-GDa"/>
                            <constraint firstAttribute="trailing" secondItem="Kgs-SL-9NA" secondAttribute="trailing" id="Ptf-6E-4D1"/>
                            <constraint firstItem="rOG-uS-t5o" firstAttribute="top" secondItem="LDU-Sj-WQx" secondAttribute="bottom" constant="20" id="dfl-V7-Bq2"/>
                            <constraint firstAttribute="bottom" secondItem="Kgs-SL-9NA" secondAttribute="bottom" id="kU2-2G-ws1"/>
                        </constraints>
                        <variation key="default">
                            <mask key="constraints">
                                <exclude reference="MwS-ci-kD5"/>
                                <exclude reference="P5N-2L-GDa"/>
                            </mask>
                        </variation>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item" id="prw-r2-Qt3"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="A23-rU-YIa" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1334" y="831"/>
        </scene>
        <!--Item-->
        <scene sceneID="7fk-0J-N8K">
            <objects>
                <viewController id="j5D-bS-emu" customClass="ViewController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="ZHE-c1-eli"/>
                        <viewControllerLayoutGuide type="bottom" id="STV-0o-JBn"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="FC5-nb-nic">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="GtQ-md-x7x">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <animations/>
                            </imageView>
                            <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="is7-xQ-eXG">
                                <rect key="frame" x="20" y="40" width="19" height="18"/>
                                <animations/>
                                <color key="tintColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/>
                                <state key="normal" image="burger"/>
                                <connections>
                                    <action selector="onBurger" destination="j5D-bS-emu" eventType="touchUpInside" id="0Sg-vK-b4g"/>
                                </connections>
                            </button>
                            <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="View Controller 4" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OxO-O2-uqr">
                                <rect key="frame" x="234" y="289" width="132" height="21"/>
                                <animations/>
                                <fontDescription key="fontDescription" type="system" pointSize="17"/>
                                <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
                                <nil key="highlightedColor"/>
                            </label>
                        </subviews>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstAttribute="centerX" secondItem="OxO-O2-uqr" secondAttribute="centerX" id="6I3-8m-zwG"/>
                            <constraint firstAttribute="bottom" secondItem="GtQ-md-x7x" secondAttribute="bottom" id="6Jg-xP-WeL"/>
                            <constraint firstItem="GtQ-md-x7x" firstAttribute="leading" secondItem="FC5-nb-nic" secondAttribute="leading" id="KsO-dD-Acu"/>
                            <constraint firstAttribute="centerY" secondItem="OxO-O2-uqr" secondAttribute="centerY" id="hhz-ZS-Ni6"/>
                            <constraint firstItem="is7-xQ-eXG" firstAttribute="leading" secondItem="FC5-nb-nic" secondAttribute="leading" constant="20" id="uSz-4m-dhT"/>
                            <constraint firstAttribute="trailing" secondItem="GtQ-md-x7x" secondAttribute="trailing" id="vTP-3a-KWb"/>
                            <constraint firstItem="GtQ-md-x7x" firstAttribute="top" secondItem="FC5-nb-nic" secondAttribute="top" id="xN4-sf-Dzv"/>
                            <constraint firstItem="is7-xQ-eXG" firstAttribute="top" secondItem="ZHE-c1-eli" secondAttribute="bottom" constant="20" id="zLW-jM-B9Z"/>
                        </constraints>
                    </view>
                    <tabBarItem key="tabBarItem" title="Item" id="YUj-YM-ftx"/>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="V5e-e7-PEY" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1336" y="1498"/>
        </scene>
        <!--Tab Bar Controller-->
        <scene sceneID="6Ie-Xz-3lW">
            <objects>
                <tabBarController automaticallyAdjustsScrollViewInsets="NO" id="00u-vZ-mxX" customClass="TabBarController" customModule="FrostedSidebar" customModuleProvider="target" sceneMemberID="viewController">
                    <toolbarItems/>
                    <nil key="simulatedBottomBarMetrics"/>
                    <tabBar key="tabBar" contentMode="scaleToFill" id="6jS-hB-otR">
                        <autoresizingMask key="autoresizingMask"/>
                        <animations/>
                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
                    </tabBar>
                    <connections>
                        <segue destination="yFd-Pw-cF0" kind="relationship" relationship="viewControllers" id="eca-4k-YIE"/>
                        <segue destination="wsn-Gr-6uq" kind="relationship" relationship="viewControllers" id="LdG-Bb-BD6"/>
                        <segue destination="VA2-Zc-qCQ" kind="relationship" relationship="viewControllers" id="J7P-wG-Q9u"/>
                        <segue destination="j5D-bS-emu" kind="relationship" relationship="viewControllers" id="Z6R-od-pNi"/>
                    </connections>
                </tabBarController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="JHs-JP-c1R" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="400" y="380"/>
        </scene>
    </scenes>
    <resources>
        <image name="Background.jpg" width="63" height="111"/>
        <image name="burger" width="19" height="17"/>
    </resources>
</document>


================================================
FILE: FrostedSidebar/TabBarController.swift
================================================
//
//  TabBarController.swift
//  FrostedSidebar
//
//  Created by Evan Dekhayser on 8/28/14.
//  Copyright (c) 2014 Evan Dekhayser. All rights reserved.
//

import UIKit

class TabBarController: UITabBarController, UITabBarControllerDelegate {
	
	var sidebar: FrostedSidebar!
	
	override func viewDidLoad() {
		super.viewDidLoad()
		delegate = self
		tabBar.isHidden = true
		
		moreNavigationController.navigationBar.isHidden = true
		
		sidebar = FrostedSidebar(itemImages: [
			UIImage(named: "gear")!,
			UIImage(named: "globe")!,
			UIImage(named: "profile")!,
			UIImage(named: "profile")!,
			UIImage(named: "profile")!,
			UIImage(named: "profile")!,
			UIImage(named: "star")!],
			colors: [
				UIColor(red: 240/255, green: 159/255, blue: 254/255, alpha: 1),
				UIColor(red: 255/255, green: 137/255, blue: 167/255, alpha: 1),
				UIColor(red: 126/255, green: 242/255, blue: 195/255, alpha: 1),
				UIColor(red: 126/255, green: 242/255, blue: 195/255, alpha: 1),
				UIColor(red: 126/255, green: 242/255, blue: 195/255, alpha: 1),
				UIColor(red: 126/255, green: 242/255, blue: 195/255, alpha: 1),
				UIColor(red: 119/255, green: 152/255, blue: 255/255, alpha: 1)],
			selectionStyle: .single)
		sidebar.actionForIndex = [
			0: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 0}) },
			1: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 1}) },
			2: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 2}) },
			3: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 3}) },
			4: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 4}) },
			5: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 5}) },
			6: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 6}) },
			7: {self.sidebar.dismissAnimated(true, completion: { finished in self.selectedIndex = 7}) }]
	}
	
}


================================================
FILE: FrostedSidebar/ViewController.swift
================================================
//
//  ViewController.swift
//  CustomStuff
//
//  Created by Evan Dekhayser on 7/9/14.
//  Copyright (c) 2014 Evan Dekhayser. All rights reserved.
//

import UIKit

class ViewController: UIViewController {
	
	override func viewDidLoad() {
		super.viewDidLoad()
	}
	
	@IBAction func onBurger() {
        (tabBarController as! TabBarController).sidebar.showInViewController(self, animated: true)
    }
}



================================================
FILE: FrostedSidebar.podspec
================================================
#
#  Be sure to run `pod spec lint FrostedSidebar.podspec' to ensure this is a
#  valid spec and to remove all comments including this before submitting the spec.
#
#  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html
#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/
#

Pod::Spec.new do |s|

  # ―――  Spec Metadata  ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  These will help people to find your library, and whilst it
  #  can feel like a chore to fill in it's definitely to your advantage. The
  #  summary should be tweet-length, and the description more in depth.
  #

  s.name         = "FrostedSidebar"
  s.version      = "1.1.0"
  s.summary      = "A translucent iOS animated sidebar written in Swift"

  # This description is used to generate tags and improve search results.
  #   * Think: What does it do? Why did you write it? What is the focus?
  #   * Try to keep it short, snappy and to the point.
  #   * Write the description between the DESC delimiters below.
  #   * Finally, don't worry about the indent, CocoaPods strips it!
  s.description  = <<-DESC
Swift translucent animated sidebar / hamburger menu using a UIVisualEffectView.
                   DESC

  s.homepage     = "https://github.com/edekhayser/FrostedSidebar"
  # s.screenshots  = "https://raw.githubusercontent.com/edekhayser/FrostedSidebar/master/entrance.gif", "https://raw.githubusercontent.com/edekhayser/FrostedSidebar/master/callouts.gif"


  # ―――  Spec License  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Licensing your code is important. See http://choosealicense.com for more info.
  #  CocoaPods will detect a license file if there is a named LICENSE*
  #  Popular ones are 'MIT', 'BSD' and 'Apache License, Version 2.0'.
  #

  s.license      = "MIT"
  # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }


  # ――― Author Metadata  ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Specify the authors of the library, with email addresses. Email addresses
  #  of the authors are extracted from the SCM log. E.g. $ git log. CocoaPods also
  #  accepts just a name if you'd rather not provide an email address.
  #
  #  Specify a social_media_url where others can refer to, for example a twitter
  #  profile URL.
  #

  s.author             = { "Evan Dekhayser" => "erdekhayser@gmail.com" }
  # Or just: s.author    = "Evan Dekhayser"
  # s.authors            = { "Evan Dekhayser" => "erdekhayser@gmail.com" }
  # s.social_media_url   = "http://twitter.com/Evan Dekhayser"

  # ――― Platform Specifics ――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  If this Pod runs only on iOS or OS X, then specify the platform and
  #  the deployment target. You can optionally include the target after the platform.
  #

  # s.platform     = :ios
  s.platform     = :ios, "8.0"

  #  When using multiple platforms
  # s.ios.deployment_target = "5.0"
  # s.osx.deployment_target = "10.7"
  # s.watchos.deployment_target = "2.0"
  # s.tvos.deployment_target = "9.0"


  # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Specify the location from where the source should be retrieved.
  #  Supports git, hg, bzr, svn and HTTP.
  #

  s.source       = { :git => "https://github.com/edekhayser/FrostedSidebar.git", :tag => "master" }


  # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  CocoaPods is smart about how it includes source code. For source files
  #  giving a folder will include any swift, h, m, mm, c & cpp files.
  #  For header files it will include any header in the folder.
  #  Not including the public_header_files will make all headers public.
  #

  s.source_files  = "Classes", "FrostedSidebar/FrostedSidebar.swift"
  # s.exclude_files = "Classes/Exclude"

  # s.public_header_files = "Classes/**/*.h"


  # ――― Resources ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  A list of resources included with the Pod. These are copied into the
  #  target bundle with a build phase script. Anything else will be cleaned.
  #  You can preserve files from being cleaned, please don't preserve
  #  non-essential files like tests, examples and documentation.
  #

  # s.resource  = "icon.png"
  # s.resources = "Resources/*.png"

  # s.preserve_paths = "FilesToSave", "MoreFilesToSave"


  # ――― Project Linking ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  Link your library with frameworks, or libraries. Libraries do not include
  #  the lib prefix of their name.
  #

  # s.framework  = "SomeFramework"
  # s.frameworks = "SomeFramework", "AnotherFramework"

  # s.library   = "iconv"
  # s.libraries = "iconv", "xml2"


  # ――― Project Settings ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  #
  #  If your library depends on compiler flags you can set them in the xcconfig hash
  #  where they will only apply to your library. If you depend on other Podspecs
  #  you can include multiple dependencies to ensure it works.

  # s.requires_arc = true

  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # s.dependency "JSONKit", "~> 1.4"

end


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

/* Begin PBXBuildFile section */
		2008D69D197021D300B89D6C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2008D69B197021D300B89D6C /* AppDelegate.swift */; };
		2008D69E197021D300B89D6C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2008D69C197021D300B89D6C /* ViewController.swift */; };
		2008D6A01970223100B89D6C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2008D69F1970223100B89D6C /* Main.storyboard */; };
		2008D6A61970231B00B89D6C /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2008D6A51970231B00B89D6C /* Images.xcassets */; };
		2066AEA3196DC14A001EE855 /* FrostedSidebar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2066AEA2196DC14A001EE855 /* FrostedSidebar.swift */; };
		20A1FAD919B4B1CE00208E92 /* TabBarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A1FAD819B4B1CE00208E92 /* TabBarController.swift */; };
		20B553BE19701F1F006165BF /* Background.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 20B553AF19701F1F006165BF /* Background.jpg */; };
		20B553BF19701F1F006165BF /* burger.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B019701F1F006165BF /* burger.png */; };
		20B553C019701F1F006165BF /* burger@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B119701F1F006165BF /* burger@2x.png */; };
		20B553C119701F1F006165BF /* click.gif in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B219701F1F006165BF /* click.gif */; };
		20B553C219701F1F006165BF /* gear.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B319701F1F006165BF /* gear.png */; };
		20B553C319701F1F006165BF /* gear@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B419701F1F006165BF /* gear@2x.png */; };
		20B553C419701F1F006165BF /* globe.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B519701F1F006165BF /* globe.png */; };
		20B553C519701F1F006165BF /* globe@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553B619701F1F006165BF /* globe@2x.png */; };
		20B553C919701F1F006165BF /* profile.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553BA19701F1F006165BF /* profile.png */; };
		20B553CA19701F1F006165BF /* profile@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553BB19701F1F006165BF /* profile@2x.png */; };
		20B553CB19701F1F006165BF /* star.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553BC19701F1F006165BF /* star.png */; };
		20B553CC19701F1F006165BF /* star@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 20B553BD19701F1F006165BF /* star@2x.png */; };
		20E0B9801B6A7A32002A3FED /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 20E0B97F1B6A7A32002A3FED /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		2008D69B197021D300B89D6C /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = FrostedSidebar/AppDelegate.swift; sourceTree = SOURCE_ROOT; };
		2008D69C197021D300B89D6C /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ViewController.swift; path = FrostedSidebar/ViewController.swift; sourceTree = SOURCE_ROOT; };
		2008D69F1970223100B89D6C /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = Main.storyboard; path = FrostedSidebar/Main.storyboard; sourceTree = SOURCE_ROOT; };
		2008D6A51970231B00B89D6C /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = SOURCE_ROOT; };
		2066AEA2196DC14A001EE855 /* FrostedSidebar.swift */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.swift; name = FrostedSidebar.swift; path = FrostedSidebar/FrostedSidebar.swift; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; wrapsLines = 1; };
		2081B66B1D4AE0E9004D3B04 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ../FrostedSidebar/Info.plist; sourceTree = "<group>"; };
		208E5DEE196DBE6F005653B3 /* FrostedSidebar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FrostedSidebar.app; sourceTree = BUILT_PRODUCTS_DIR; };
		20A1FAD819B4B1CE00208E92 /* TabBarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = TabBarController.swift; path = FrostedSidebar/TabBarController.swift; sourceTree = SOURCE_ROOT; };
		20B553AF19701F1F006165BF /* Background.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; name = Background.jpg; path = FrostedSidebar/Background.jpg; sourceTree = SOURCE_ROOT; };
		20B553B019701F1F006165BF /* burger.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = burger.png; path = FrostedSidebar/burger.png; sourceTree = SOURCE_ROOT; };
		20B553B119701F1F006165BF /* burger@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "burger@2x.png"; path = "FrostedSidebar/burger@2x.png"; sourceTree = SOURCE_ROOT; };
		20B553B219701F1F006165BF /* click.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; name = click.gif; path = FrostedSidebar/click.gif; sourceTree = SOURCE_ROOT; };
		20B553B319701F1F006165BF /* gear.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = gear.png; path = FrostedSidebar/gear.png; sourceTree = SOURCE_ROOT; };
		20B553B419701F1F006165BF /* gear@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "gear@2x.png"; path = "FrostedSidebar/gear@2x.png"; sourceTree = SOURCE_ROOT; };
		20B553B519701F1F006165BF /* globe.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = globe.png; path = FrostedSidebar/globe.png; sourceTree = SOURCE_ROOT; };
		20B553B619701F1F006165BF /* globe@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "globe@2x.png"; path = "FrostedSidebar/globe@2x.png"; sourceTree = SOURCE_ROOT; };
		20B553BA19701F1F006165BF /* profile.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = profile.png; path = FrostedSidebar/profile.png; sourceTree = SOURCE_ROOT; };
		20B553BB19701F1F006165BF /* profile@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "profile@2x.png"; path = "FrostedSidebar/profile@2x.png"; sourceTree = SOURCE_ROOT; };
		20B553BC19701F1F006165BF /* star.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = star.png; path = FrostedSidebar/star.png; sourceTree = SOURCE_ROOT; };
		20B553BD19701F1F006165BF /* star@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "star@2x.png"; path = "FrostedSidebar/star@2x.png"; sourceTree = SOURCE_ROOT; };
		20E0B97F1B6A7A32002A3FED /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = ../LaunchScreen.storyboard; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		208E5DEB196DBE6F005653B3 /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		208E5DE5196DBE6F005653B3 = {
			isa = PBXGroup;
			children = (
				2066AEA2196DC14A001EE855 /* FrostedSidebar.swift */,
				208E5DF0196DBE6F005653B3 /* FrostedSidebar */,
				208E5DEF196DBE6F005653B3 /* Products */,
			);
			sourceTree = "<group>";
		};
		208E5DEF196DBE6F005653B3 /* Products */ = {
			isa = PBXGroup;
			children = (
				208E5DEE196DBE6F005653B3 /* FrostedSidebar.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		208E5DF0196DBE6F005653B3 /* FrostedSidebar */ = {
			isa = PBXGroup;
			children = (
				20A1FAD819B4B1CE00208E92 /* TabBarController.swift */,
				2008D69B197021D300B89D6C /* AppDelegate.swift */,
				2008D69C197021D300B89D6C /* ViewController.swift */,
				2008D69F1970223100B89D6C /* Main.storyboard */,
				20E0B97F1B6A7A32002A3FED /* LaunchScreen.storyboard */,
				2008D6A51970231B00B89D6C /* Images.xcassets */,
				208E5DF1196DBE6F005653B3 /* Supporting Files */,
			);
			name = FrostedSidebar;
			path = CustomStuff;
			sourceTree = "<group>";
		};
		208E5DF1196DBE6F005653B3 /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				20B553AF19701F1F006165BF /* Background.jpg */,
				20B553B019701F1F006165BF /* burger.png */,
				20B553B119701F1F006165BF /* burger@2x.png */,
				20B553B219701F1F006165BF /* click.gif */,
				20B553B319701F1F006165BF /* gear.png */,
				20B553B419701F1F006165BF /* gear@2x.png */,
				20B553B519701F1F006165BF /* globe.png */,
				20B553B619701F1F006165BF /* globe@2x.png */,
				20B553BA19701F1F006165BF /* profile.png */,
				20B553BB19701F1F006165BF /* profile@2x.png */,
				20B553BC19701F1F006165BF /* star.png */,
				20B553BD19701F1F006165BF /* star@2x.png */,
				2081B66B1D4AE0E9004D3B04 /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		208E5DED196DBE6F005653B3 /* FrostedSidebar */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 208E5E0A196DBE6F005653B3 /* Build configuration list for PBXNativeTarget "FrostedSidebar" */;
			buildPhases = (
				208E5DEA196DBE6F005653B3 /* Sources */,
				208E5DEB196DBE6F005653B3 /* Frameworks */,
				208E5DEC196DBE6F005653B3 /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = FrostedSidebar;
			productName = CustomStuff;
			productReference = 208E5DEE196DBE6F005653B3 /* FrostedSidebar.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		208E5DE6196DBE6F005653B3 /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastSwiftUpdateCheck = 0700;
				LastUpgradeCheck = 0810;
				ORGANIZATIONNAME = "Evan Dekhayser";
				TargetAttributes = {
					208E5DED196DBE6F005653B3 = {
						CreatedOnToolsVersion = 6.0;
						DevelopmentTeam = 44SYMBLN5U;
						LastSwiftMigration = 0810;
					};
				};
			};
			buildConfigurationList = 208E5DE9196DBE6F005653B3 /* Build configuration list for PBXProject "FrostedSidebar" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 208E5DE5196DBE6F005653B3;
			productRefGroup = 208E5DEF196DBE6F005653B3 /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				208E5DED196DBE6F005653B3 /* FrostedSidebar */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		208E5DEC196DBE6F005653B3 /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				20B553BF19701F1F006165BF /* burger.png in Resources */,
				20B553C219701F1F006165BF /* gear.png in Resources */,
				20B553C519701F1F006165BF /* globe@2x.png in Resources */,
				20E0B9801B6A7A32002A3FED /* LaunchScreen.storyboard in Resources */,
				20B553C019701F1F006165BF /* burger@2x.png in Resources */,
				20B553CB19701F1F006165BF /* star.png in Resources */,
				2008D6A01970223100B89D6C /* Main.storyboard in Resources */,
				20B553C419701F1F006165BF /* globe.png in Resources */,
				20B553C119701F1F006165BF /* click.gif in Resources */,
				20B553BE19701F1F006165BF /* Background.jpg in Resources */,
				2008D6A61970231B00B89D6C /* Images.xcassets in Resources */,
				20B553C319701F1F006165BF /* gear@2x.png in Resources */,
				20B553CC19701F1F006165BF /* star@2x.png in Resources */,
				20B553C919701F1F006165BF /* profile.png in Resources */,
				20B553CA19701F1F006165BF /* profile@2x.png in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		208E5DEA196DBE6F005653B3 /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				2008D69E197021D300B89D6C /* ViewController.swift in Sources */,
				20A1FAD919B4B1CE00208E92 /* TabBarController.swift in Sources */,
				2008D69D197021D300B89D6C /* AppDelegate.swift in Sources */,
				2066AEA3196DC14A001EE855 /* FrostedSidebar.swift in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin XCBuildConfiguration section */
		208E5E08196DBE6F005653B3 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
				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 = 8.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
			};
			name = Debug;
		};
		208E5E09196DBE6F005653B3 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_CONSTANT_CONVERSION = 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_OBJC_ROOT_CLASS = YES_ERROR;
				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 = 8.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		208E5E0B196DBE6F005653B3 /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				INFOPLIST_FILE = "$(SRCROOT)/FrostedSidebar/Info.plist";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.xappox.${PRODUCT_NAME:rfc1034identifier}";
				PRODUCT_NAME = FrostedSidebar;
				PROVISIONING_PROFILE = "";
				SWIFT_VERSION = 3.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		208E5E0C196DBE6F005653B3 /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				INFOPLIST_FILE = "$(SRCROOT)/FrostedSidebar/Info.plist";
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				PRODUCT_BUNDLE_IDENTIFIER = "com.xappox.${PRODUCT_NAME:rfc1034identifier}";
				PRODUCT_NAME = FrostedSidebar;
				PROVISIONING_PROFILE = "";
				SWIFT_VERSION = 3.0;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		208E5DE9196DBE6F005653B3 /* Build configuration list for PBXProject "FrostedSidebar" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				208E5E08196DBE6F005653B3 /* Debug */,
				208E5E09196DBE6F005653B3 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		208E5E0A196DBE6F005653B3 /* Build configuration list for PBXNativeTarget "FrostedSidebar" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				208E5E0B196DBE6F005653B3 /* Debug */,
				208E5E0C196DBE6F005653B3 /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 208E5DE6196DBE6F005653B3 /* Project object */;
}


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


================================================
FILE: FrostedSidebar.xcodeproj/project.xcworkspace/xcshareddata/FrostedSidebar.xccheckout
================================================
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
	<false/>
	<key>IDESourceControlProjectIdentifier</key>
	<string>C9A96330-4869-44C2-A46D-9B9A56C40D87</string>
	<key>IDESourceControlProjectName</key>
	<string>FrostedSidebar</string>
	<key>IDESourceControlProjectOriginsDictionary</key>
	<dict>
		<key>4B4BAACA98DEB00554F1C47B8448075ADE3181B2</key>
		<string>https://github.com/edekhayser/UITableView-RowConvenience.git</string>
		<key>9DD84A14490C7232C05D5DFBA38001794CC46892</key>
		<string>https://github.com/edekhayser/FrostedSidebar.git</string>
	</dict>
	<key>IDESourceControlProjectPath</key>
	<string>FrostedSidebar.xcodeproj</string>
	<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
	<dict>
		<key>4B4BAACA98DEB00554F1C47B8448075ADE3181B2</key>
		<string>../../..</string>
		<key>9DD84A14490C7232C05D5DFBA38001794CC46892</key>
		<string>../..</string>
	</dict>
	<key>IDESourceControlProjectURL</key>
	<string>https://github.com/edekhayser/FrostedSidebar.git</string>
	<key>IDESourceControlProjectVersion</key>
	<integer>111</integer>
	<key>IDESourceControlProjectWCCIdentifier</key>
	<string>9DD84A14490C7232C05D5DFBA38001794CC46892</string>
	<key>IDESourceControlProjectWCConfigurations</key>
	<array>
		<dict>
			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
			<string>public.vcs.git</string>
			<key>IDESourceControlWCCIdentifierKey</key>
			<string>4B4BAACA98DEB00554F1C47B8448075ADE3181B2</string>
			<key>IDESourceControlWCCName</key>
			<string></string>
		</dict>
		<dict>
			<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
			<string>public.vcs.git</string>
			<key>IDESourceControlWCCIdentifierKey</key>
			<string>9DD84A14490C7232C05D5DFBA38001794CC46892</string>
			<key>IDESourceControlWCCName</key>
			<string>FrostedSidebar</string>
		</dict>
	</array>
</dict>
</plist>


================================================
FILE: FrostedSidebar.xcodeproj/project.xcworkspace/xcshareddata/FrostedSidebar.xcscmblueprint
================================================
{
  "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "9DD84A14490C7232C05D5DFBA38001794CC46892",
  "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {

  },
  "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
    "9DD84A14490C7232C05D5DFBA38001794CC46892" : 0,
    "4B4BAACA98DEB00554F1C47B8448075ADE3181B2" : 0
  },
  "DVTSourceControlWorkspaceBlueprintIdentifierKey" : "C9A96330-4869-44C2-A46D-9B9A56C40D87",
  "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
    "9DD84A14490C7232C05D5DFBA38001794CC46892" : "FrostedSidebar",
    "4B4BAACA98DEB00554F1C47B8448075ADE3181B2" : ""
  },
  "DVTSourceControlWorkspaceBlueprintNameKey" : "FrostedSidebar",
  "DVTSourceControlWorkspaceBlueprintVersion" : 203,
  "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "FrostedSidebar.xcodeproj",
  "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
    {
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/edekhayser\/UITableView-RowConvenience.git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "4B4BAACA98DEB00554F1C47B8448075ADE3181B2"
    },
    {
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/edekhayser\/FrostedSidebar.git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "9DD84A14490C7232C05D5DFBA38001794CC46892"
    }
  ]
}

================================================
FILE: FrostedSidebar.xcodeproj/project.xcworkspace/xcuserdata/evan.xcuserdatad/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>HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges</key>
	<true/>
	<key>SnapshotAutomaticallyBeforeSignificantChanges</key>
	<true/>
</dict>
</plist>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/Peng.xcuserdatad/xcschemes/FrostedSidebar.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0600"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DED196DBE6F005653B3"
               BuildableName = "FrostedSidebar.app"
               BlueprintName = "FrostedSidebar"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "NO"
            buildForArchiving = "NO"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DFF196DBE6F005653B3"
               BuildableName = "FrostedSidebarTests.xctest"
               BlueprintName = "FrostedSidebarTests"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES"
      buildConfiguration = "Debug">
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DFF196DBE6F005653B3"
               BuildableName = "FrostedSidebarTests.xctest"
               BlueprintName = "FrostedSidebarTests"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </TestAction>
   <LaunchAction
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      buildConfiguration = "Debug"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      buildConfiguration = "Release"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/Peng.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>
	<dict>
		<key>FrostedSidebar.xcscheme</key>
		<dict>
			<key>orderHint</key>
			<integer>0</integer>
		</dict>
	</dict>
	<key>SuppressBuildableAutocreation</key>
	<dict>
		<key>208E5DED196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
		<key>208E5DFF196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
	</dict>
</dict>
</plist>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/czarlos.xcuserdatad/xcschemes/FrostedSidebar.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0610"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DED196DBE6F005653B3"
               BuildableName = "FrostedSidebar.app"
               BlueprintName = "FrostedSidebar"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "NO"
            buildForArchiving = "NO"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DFF196DBE6F005653B3"
               BuildableName = "FrostedSidebarTests.xctest"
               BlueprintName = "FrostedSidebarTests"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      shouldUseLaunchSchemeArgsEnv = "YES"
      buildConfiguration = "Debug">
      <Testables>
         <TestableReference
            skipped = "NO">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DFF196DBE6F005653B3"
               BuildableName = "FrostedSidebarTests.xctest"
               BlueprintName = "FrostedSidebarTests"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
   </TestAction>
   <LaunchAction
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      buildConfiguration = "Debug"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      buildConfiguration = "Release"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/czarlos.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>
	<dict>
		<key>FrostedSidebar.xcscheme</key>
		<dict>
			<key>orderHint</key>
			<integer>0</integer>
		</dict>
	</dict>
	<key>SuppressBuildableAutocreation</key>
	<dict>
		<key>208E5DED196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
		<key>208E5DFF196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
	</dict>
</dict>
</plist>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Bucket
   type = "1"
   version = "2.0">
</Bucket>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcschemes/CustomStuff.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0730"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "208E5DED196DBE6F005653B3"
               BuildableName = "FrostedSidebar.app"
               BlueprintName = "FrostedSidebar"
               ReferencedContainer = "container:FrostedSidebar.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 = "208E5DFF196DBE6F005653B3"
               BuildableName = "FrostedSidebarTests.xctest"
               BlueprintName = "FrostedSidebarTests"
               ReferencedContainer = "container:FrostedSidebar.xcodeproj">
            </BuildableReference>
         </TestableReference>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.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">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Release"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "208E5DED196DBE6F005653B3"
            BuildableName = "FrostedSidebar.app"
            BlueprintName = "FrostedSidebar"
            ReferencedContainer = "container:FrostedSidebar.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcschemes/xcschememanagement.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>SchemeUserState</key>
	<dict>
		<key>CustomStuff.xcscheme</key>
		<dict>
			<key>orderHint</key>
			<integer>0</integer>
		</dict>
	</dict>
	<key>SuppressBuildableAutocreation</key>
	<dict>
		<key>208E5DED196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
		<key>208E5DFF196DBE6F005653B3</key>
		<dict>
			<key>primary</key>
			<true/>
		</dict>
	</dict>
</dict>
</plist>


================================================
FILE: Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "29x29",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "40x40",
      "scale" : "3x"
    },
    {
      "idiom" : "iphone",
      "size" : "57x57",
      "scale" : "1x"
    },
    {
      "idiom" : "iphone",
      "size" : "57x57",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "2x"
    },
    {
      "idiom" : "iphone",
      "size" : "60x60",
      "scale" : "3x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "29x29",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "40x40",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "50x50",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "50x50",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "72x72",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "72x72",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "1x"
    },
    {
      "idiom" : "ipad",
      "size" : "76x76",
      "scale" : "2x"
    },
    {
      "idiom" : "ipad",
      "size" : "83.5x83.5",
      "scale" : "2x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

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

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

Copyright (c) 2014 Evan Dekhayser

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: LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9059" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Llm-lL-Icb"/>
                        <viewControllerLayoutGuide type="bottom" id="xb3-aO-Qok"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Background.jpg" translatesAutoresizingMaskIntoConstraints="NO" id="PNW-Ig-4If">
                                <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                                <animations/>
                            </imageView>
                        </subviews>
                        <animations/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                        <constraints>
                            <constraint firstItem="PNW-Ig-4If" firstAttribute="leading" secondItem="Ze5-6b-2t3" secondAttribute="leading" id="6RD-g9-IW8"/>
                            <constraint firstItem="xb3-aO-Qok" firstAttribute="top" secondItem="PNW-Ig-4If" secondAttribute="bottom" id="ZmX-Yu-Egl"/>
                            <constraint firstItem="PNW-Ig-4If" firstAttribute="top" secondItem="Ze5-6b-2t3" secondAttribute="top" id="ufW-H7-oNT"/>
                            <constraint firstAttribute="trailing" secondItem="PNW-Ig-4If" secondAttribute="trailing" id="w9H-Xt-8mz"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
    <resources>
        <image name="Background.jpg" width="63" height="111"/>
    </resources>
</document>


================================================
FILE: README.md
================================================
FrostedSidebar
==============

Hamburger Menu using Swift and iOS 8 API's

Heavily influenced by @_ryannystrom's [RNFrostedSidebar](https://github.com/rnystrom/RNFrostedSidebar)

This implementation uses iOS 8's new UIVisualEffectView to apply the blur to the sidebar. Among other changes, this sidebar has a view that dims the background to shift the focus to the presented content.

<p align="center"><img title="Open and close animation" src="https://raw.githubusercontent.com/edekhayser/FrostedSidebar/master/entrance.gif"/></p>

The buttons have the same ring effect on click. The buttons are more customizable as I will go into later.

<p align="center"><img title="Button click animation" src="https://raw.githubusercontent.com/edekhayser/FrostedSidebar/master/callouts.gif"/></p>

##Usage##

In the example project, the sidebar is added quite easily.

Create a property in your UIViewController subclass.

```swift
var frostedSidebar: FrostedSidebar = FrostedSidebar(images: imageArray, colors: colorArray, selectionStyle: chosenSelectionStyle)
```

where `images` contains the icons for the buttons, `colors` contains the border colors for the icons, and `selectionStyle` is the sidebar items' selection behavior (either `.None`, `.Single`, or `.All`).

The `colors` parameter is optional, and can either be nil or be the same length as `images`.

The buttons can be set to use a closure when tapped using

```swift
frostedSidebar.actionForIndex[idx] = { /* actions */ }
```

To show the sidebar, use the following code in your view controller:

```swift
frostedSidebar.showInViewController( self, animated: true )
```

It can be dismissed in a similar way:

```swift
frostedSidebar.dismissAnimated(true, completion: nil)
```

The class that conforms to the FrostedSidebarDelegate must implement the following methods:
```swift
func sidebar(sidebar: FrostedSidebar, willShowOnScreenAnimated animated: Bool)
func sidebar(sidebar: FrostedSidebar, didShowOnScreenAnimated animated: Bool)
func sidebar(sidebar: FrostedSidebar, willDismissFromScreenAnimated animated: Bool)
func sidebar(sidebar: FrostedSidebar, didDismissFromScreenAnimated animated: Bool)
func sidebar(sidebar: FrostedSidebar, didTapItemAtIndex index: Int)
func sidebar(sidebar: FrostedSidebar, didEnable itemEnabled: Bool, itemAtIndex index: Int)
```

## Installation

#### CocoaPods
You can use [CocoaPods](http://cocoapods.org/) to install `FrostedSidebar` by adding it to your `Podfile`:

```ruby
platform :ios, '8.0'
use_frameworks!
pod 'FrostedSidebar'
```

To get the full benefits import `FrostedSidebar` wherever you import UIKit

``` swift
import UIKit
import FrostedSidebar
```
#### Manually
1. Download and drop ```FrostedSidebar.swift``` in your project.  
2. Congratulations!  

##Conclusion##

This would not be possible without the impressive work by Ryan Nystrom, and the great design by [Jakub Antalík on Dribbble](https://dribbble.com/shots/1194205-Sidebar-calendar-animation). 

Hopefully someone finds this useful!
Download .txt
gitextract_4i9b7z9c/

├── CustomStuff/
│   └── LaunchScreen.storyboard
├── FrostedSidebar/
│   ├── AppDelegate.swift
│   ├── Base.lproj/
│   │   └── Main.storyboard
│   ├── FrostedSidebar.swift
│   ├── Info.plist
│   ├── Main.storyboard
│   ├── TabBarController.swift
│   └── ViewController.swift
├── FrostedSidebar.podspec
├── FrostedSidebar.xcodeproj/
│   ├── project.pbxproj
│   ├── project.xcworkspace/
│   │   ├── contents.xcworkspacedata
│   │   ├── xcshareddata/
│   │   │   ├── FrostedSidebar.xccheckout
│   │   │   └── FrostedSidebar.xcscmblueprint
│   │   └── xcuserdata/
│   │       ├── Peng.xcuserdatad/
│   │       │   └── UserInterfaceState.xcuserstate
│   │       ├── czarlos.xcuserdatad/
│   │       │   └── UserInterfaceState.xcuserstate
│   │       └── evan.xcuserdatad/
│   │           ├── UserInterfaceState.xcuserstate
│   │           └── WorkspaceSettings.xcsettings
│   └── xcuserdata/
│       ├── Peng.xcuserdatad/
│       │   └── xcschemes/
│       │       ├── FrostedSidebar.xcscheme
│       │       └── xcschememanagement.plist
│       ├── czarlos.xcuserdatad/
│       │   └── xcschemes/
│       │       ├── FrostedSidebar.xcscheme
│       │       └── xcschememanagement.plist
│       └── evan.xcuserdatad/
│           ├── xcdebugger/
│           │   └── Breakpoints_v2.xcbkptlist
│           └── xcschemes/
│               ├── CustomStuff.xcscheme
│               └── xcschememanagement.plist
├── Images.xcassets/
│   ├── AppIcon.appiconset/
│   │   └── Contents.json
│   ├── Contents.json
│   └── burger.imageset/
│       └── Contents.json
├── LICENSE
├── LaunchScreen.storyboard
└── README.md
Condensed preview — 30 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (113K chars).
[
  {
    "path": "CustomStuff/LaunchScreen.storyboard",
    "chars": 448,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "FrostedSidebar/AppDelegate.swift",
    "chars": 2030,
    "preview": "//\n//  AppDelegate.swift\n//  CustomStuff\n//\n//  Created by Evan Dekhayser on 7/9/14.\n//  Copyright (c) 2014 Evan Dekhays"
  },
  {
    "path": "FrostedSidebar/Base.lproj/Main.storyboard",
    "chars": 3650,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "FrostedSidebar/FrostedSidebar.swift",
    "chars": 21576,
    "preview": "//\n//  FrostedSidebar.swift\n//  CustomStuff\n//\n//  Created by Evan Dekhayser on 7/9/14.\n//  Copyright (c) 2014 Evan Dekh"
  },
  {
    "path": "FrostedSidebar/Info.plist",
    "chars": 1266,
    "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": "FrostedSidebar/Main.storyboard",
    "chars": 21523,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "FrostedSidebar/TabBarController.swift",
    "chars": 2011,
    "preview": "//\n//  TabBarController.swift\n//  FrostedSidebar\n//\n//  Created by Evan Dekhayser on 8/28/14.\n//  Copyright (c) 2014 Eva"
  },
  {
    "path": "FrostedSidebar/ViewController.swift",
    "chars": 404,
    "preview": "//\n//  ViewController.swift\n//  CustomStuff\n//\n//  Created by Evan Dekhayser on 7/9/14.\n//  Copyright (c) 2014 Evan Dekh"
  },
  {
    "path": "FrostedSidebar.podspec",
    "chars": 5303,
    "preview": "#\n#  Be sure to run `pod spec lint FrostedSidebar.podspec' to ensure this is a\n#  valid spec and to remove all comments "
  },
  {
    "path": "FrostedSidebar.xcodeproj/project.pbxproj",
    "chars": 17793,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "FrostedSidebar.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 159,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:FrostedSidebar."
  },
  {
    "path": "FrostedSidebar.xcodeproj/project.xcworkspace/xcshareddata/FrostedSidebar.xccheckout",
    "chars": 2015,
    "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": "FrostedSidebar.xcodeproj/project.xcworkspace/xcshareddata/FrostedSidebar.xcscmblueprint",
    "chars": 1664,
    "preview": "{\n  \"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey\" : \"9DD84A14490C7232C05D5DFBA38001794CC46892\",\n  \"DVTS"
  },
  {
    "path": "FrostedSidebar.xcodeproj/project.xcworkspace/xcuserdata/evan.xcuserdatad/WorkspaceSettings.xcsettings",
    "chars": 332,
    "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": "FrostedSidebar.xcodeproj/xcuserdata/Peng.xcuserdatad/xcschemes/FrostedSidebar.xcscheme",
    "chars": 4276,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0600\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "FrostedSidebar.xcodeproj/xcuserdata/Peng.xcuserdatad/xcschemes/xcschememanagement.plist",
    "chars": 576,
    "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": "FrostedSidebar.xcodeproj/xcuserdata/czarlos.xcuserdatad/xcschemes/FrostedSidebar.xcscheme",
    "chars": 4276,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0610\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "FrostedSidebar.xcodeproj/xcuserdata/czarlos.xcuserdatad/xcschemes/xcschememanagement.plist",
    "chars": 576,
    "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": "FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist",
    "chars": 91,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Bucket\n   type = \"1\"\n   version = \"2.0\">\n</Bucket>\n"
  },
  {
    "path": "FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcschemes/CustomStuff.xcscheme",
    "chars": 3838,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0730\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "FrostedSidebar.xcodeproj/xcuserdata/evan.xcuserdatad/xcschemes/xcschememanagement.plist",
    "chars": 573,
    "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": "Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1743,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"size\" : \"29x29\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Images.xcassets/burger.imageset/Contents.json",
    "chars": 380,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"burger."
  },
  {
    "path": "LICENSE",
    "chars": 1080,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2014 Evan Dekhayser\n\nPermission is hereby granted, free of charge, to any person ob"
  },
  {
    "path": "LaunchScreen.storyboard",
    "chars": 2957,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "README.md",
    "chars": 3008,
    "preview": "FrostedSidebar\n==============\n\nHamburger Menu using Swift and iOS 8 API's\n\nHeavily influenced by @_ryannystrom's [RNFros"
  }
]

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

About this extraction

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

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

Copied to clipboard!