├── .gitignore ├── .jazzy.yaml ├── CHANGELOG.md ├── Configurations └── IDETemplateMacros.plist ├── Demo ├── Application │ └── AppDelegate.swift └── UI │ ├── Launch │ └── Base.lproj │ │ └── LaunchScreen.storyboard │ └── Main │ ├── DemoCell.swift │ ├── MainView.swift │ └── MainViewController.swift ├── LICENSE ├── Package.swift ├── README.md ├── Sources └── ToosieSlide │ ├── UICollectionView+Extensions.swift │ ├── UICollectionViewCarouselLayout.swift │ └── UICollectionViewDelegateCarouselLayout.swift ├── Tests ├── LinuxMain.swift └── ToosieSlideTests │ ├── ToosieSlideTests.swift │ └── XCTestManifests.swift ├── ToosieSlide.podspec ├── ToosieSlideDemo.gif ├── ToosieSlideLogo.png ├── docs ├── 1.0.x │ ├── Classes.html │ ├── Classes │ │ └── UICollectionViewCarouselLayout.html │ ├── Extensions.html │ ├── Extensions │ │ └── UICollectionView.html │ ├── Protocols.html │ ├── Protocols │ │ └── UICollectionViewDelegateCarouselLayout.html │ ├── Typealiases.html │ ├── badge.svg │ ├── css │ │ ├── highlight.css │ │ └── jazzy.css │ ├── docsets │ │ ├── ToosieSlide.docset │ │ │ └── Contents │ │ │ │ └── Resources │ │ │ │ ├── Documents │ │ │ │ ├── Classes.html │ │ │ │ ├── Classes │ │ │ │ │ └── UICollectionViewCarouselLayout.html │ │ │ │ ├── Extensions.html │ │ │ │ ├── Extensions │ │ │ │ │ └── UICollectionView.html │ │ │ │ ├── Protocols.html │ │ │ │ ├── Protocols │ │ │ │ │ └── UICollectionViewDelegateCarouselLayout.html │ │ │ │ ├── Typealiases.html │ │ │ │ ├── badge.svg │ │ │ │ ├── css │ │ │ │ │ ├── highlight.css │ │ │ │ │ └── jazzy.css │ │ │ │ ├── img │ │ │ │ │ ├── carat.png │ │ │ │ │ ├── dash.png │ │ │ │ │ └── gh.png │ │ │ │ ├── index.html │ │ │ │ ├── js │ │ │ │ │ ├── jazzy.js │ │ │ │ │ └── jquery.min.js │ │ │ │ ├── search.json │ │ │ │ └── undocumented.json │ │ │ │ └── docSet.dsidx │ │ └── ToosieSlide.tgz │ ├── img │ │ ├── carat.png │ │ ├── dash.png │ │ └── gh.png │ ├── index.html │ ├── js │ │ ├── jazzy.js │ │ └── jquery.min.js │ ├── search.json │ └── undocumented.json └── 1.1.x │ ├── Classes.html │ ├── Classes │ └── UICollectionViewCarouselLayout.html │ ├── Extensions.html │ ├── Extensions │ └── UICollectionView.html │ ├── Protocols.html │ ├── Protocols │ └── UICollectionViewDelegateCarouselLayout.html │ ├── Typealiases.html │ ├── badge.svg │ ├── css │ ├── highlight.css │ └── jazzy.css │ ├── docsets │ ├── ToosieSlide.docset │ │ └── Contents │ │ │ └── Resources │ │ │ ├── Documents │ │ │ ├── Classes.html │ │ │ ├── Classes │ │ │ │ └── UICollectionViewCarouselLayout.html │ │ │ ├── Extensions.html │ │ │ ├── Extensions │ │ │ │ └── UICollectionView.html │ │ │ ├── Protocols.html │ │ │ ├── Protocols │ │ │ │ └── UICollectionViewDelegateCarouselLayout.html │ │ │ ├── Typealiases.html │ │ │ ├── css │ │ │ │ ├── highlight.css │ │ │ │ └── jazzy.css │ │ │ ├── img │ │ │ │ ├── carat.png │ │ │ │ ├── dash.png │ │ │ │ └── gh.png │ │ │ ├── index.html │ │ │ ├── js │ │ │ │ ├── jazzy.js │ │ │ │ └── jquery.min.js │ │ │ └── search.json │ │ │ └── docSet.dsidx │ └── ToosieSlide.tgz │ ├── img │ ├── carat.png │ ├── dash.png │ └── gh.png │ ├── index.html │ ├── js │ ├── jazzy.js │ └── jquery.min.js │ ├── search.json │ └── undocumented.json ├── project.yml └── setup.sh /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # build/ 3 | *.xcworkspace 4 | *.xcodeproj 5 | *.pbxuser 6 | !default.pbxuser 7 | *.mode1v3 8 | !default.mode1v3 9 | *.mode2v3 10 | !default.mode2v3 11 | *.perspectivev3 12 | !default.perspectivev3 13 | xcuserdata 14 | *.xccheckout 15 | *.moved-aside 16 | DerivedData 17 | *.xcuserstate 18 | .DS_Store 19 | .idea 20 | Pods/ 21 | Carthage/ 22 | /build 23 | Info.plist 24 | 25 | # Project Specific 26 | TestApp 27 | -------------------------------------------------------------------------------- /.jazzy.yaml: -------------------------------------------------------------------------------- 1 | author: Firas Safa a.k.a. The Inked Engineer 2 | author_url: https://theinkedengineer.com 3 | copyright: TheInkedEngineer 4 | readme: README.md 5 | module: ToosieSlide 6 | github_url: https://github.com/TheInkedEngineer/ 7 | github_file_prefix: https://github.com/TheInkedEngineer/blob/master 8 | module_version: 1.1.0 9 | xcodebuild_arguments: [clean,build,-scheme,ToosieSlide] 10 | output: docs/1.1.x 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # CHANGELOG 2 | 3 | All relative changes will be documented in this file. \ 4 | `ToosieSlide` adheres to [Semantic Versioning](https://semver.org). 5 | 6 | *** 7 | ## 1.1.x 8 | ### May 11, 2020 9 | 10 | #### 1.1.1 11 | * Fix a bug where scrolling to a cell index via code, resulted in wrong offset. 12 | 13 | ### April 29, 2020 14 | 15 | #### 1.1.0 16 | * `focusedItemHeightScaleFactor` was replaced by `focusedItemScaleFactor` and instead of resizing the cell's height, a `transform` is applied to the cell. 17 | 18 | ## 1.0.x 19 | ### April 23, 2020 20 | 21 | #### 1.0.1 22 | * Fix a bug where when `UICollectionView` is subclassed, layout invalidation did not work properly. 23 | 24 | #### 1.0.0 25 | * First major release 26 | * Add support for automatic cell resize 27 | * Add support to cell alpha change when not focused anymore. 28 | 29 | ## 0.1.x 30 | ### April 16, 2020 31 | 32 | #### 0.1.1 33 | * Changed approach on how to center cell in middle. 34 | 35 | #### 0.1.0 36 | * Initial release 37 | 38 | -------------------------------------------------------------------------------- /Configurations/IDETemplateMacros.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | FILEHEADER 6 | 7 | // Toosie Slide 8 | // 9 | 10 | -------------------------------------------------------------------------------- /Demo/Application/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import UIKit 6 | 7 | @UIApplicationMain 8 | class AppDelegate: UIResponder, UIApplicationDelegate { 9 | 10 | var window: UIWindow? 11 | 12 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 13 | 14 | self.window = self.window ?? UIWindow(frame: UIScreen.main.bounds) 15 | guard let window = self.window else { return false } 16 | 17 | let mainVC = MainViewController() 18 | window.rootViewController = mainVC 19 | window.makeKeyAndVisible() 20 | 21 | return true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Demo/UI/Launch/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Demo/UI/Main/DemoCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import UIKit 6 | 7 | class DemoCell: UICollectionViewCell { 8 | 9 | /// The unique identifier of the cell. 10 | static let identifier = String(describing: DemoCell.self) 11 | /// The height of the card cell. 12 | static let height: CGFloat = 0.66 * DemoCell.width 13 | /// The width of the card cell. 14 | static let width: CGFloat = 295 15 | 16 | override init(frame: CGRect) { 17 | super.init(frame: frame) 18 | 19 | style() 20 | } 21 | 22 | required init?(coder: NSCoder) { 23 | fatalError("init(coder:) has not been implemented") 24 | } 25 | 26 | func style() { 27 | backgroundColor = .black 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Demo/UI/Main/MainView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import ToosieSlide 6 | import UIKit 7 | 8 | class MainView: UIView { 9 | 10 | // MARK: - UIElements 11 | 12 | private let button = UIButton() 13 | 14 | lazy var collection: UICollectionView = { 15 | let carouselFlow = UICollectionViewCarouselLayout() 16 | carouselFlow.itemSize = CGSize(width: DemoCell.width, height: DemoCell.height) 17 | carouselFlow.minimumLineSpacing = 50 18 | let collection = UICollectionView(collectionViewCarouselLayout: carouselFlow) 19 | collection.register(DemoCell.self, forCellWithReuseIdentifier: DemoCell.identifier) 20 | return collection 21 | }() 22 | 23 | // MARK: - Init 24 | 25 | override init(frame: CGRect) { 26 | super.init(frame: frame) 27 | 28 | configure() 29 | style() 30 | update() 31 | layout() 32 | } 33 | 34 | required init?(coder: NSCoder) { 35 | super.init(coder: coder) 36 | 37 | configure() 38 | style() 39 | update() 40 | layout() 41 | } 42 | 43 | // MARK: - CSUL 44 | 45 | func configure() { 46 | addSubview(collection) 47 | addSubview(button) 48 | 49 | collection.dataSource = self 50 | collection.delegate = self 51 | 52 | button.addTarget(self, action: #selector(scrollToCell), for: .touchUpInside) 53 | } 54 | 55 | func style() { 56 | backgroundColor = .white 57 | button.setTitle("scroll to random cell", for: .normal) 58 | button.setTitleColor(.blue, for: .normal) 59 | collection.backgroundColor = .clear 60 | collection.showsHorizontalScrollIndicator = false 61 | } 62 | 63 | func update() {} 64 | 65 | func layout() { 66 | collection.translatesAutoresizingMaskIntoConstraints = false 67 | collection.centerYAnchor.constraint(equalTo: centerYAnchor).isActive = true 68 | collection.leadingAnchor.constraint(equalTo: leadingAnchor).isActive = true 69 | collection.trailingAnchor.constraint(equalTo: trailingAnchor).isActive = true 70 | collection.heightAnchor.constraint(equalToConstant: 300).isActive = true 71 | 72 | button.translatesAutoresizingMaskIntoConstraints = false 73 | button.topAnchor.constraint(equalTo: collection.bottomAnchor, constant: 40).isActive = true 74 | button.centerXAnchor.constraint(equalTo: collection.centerXAnchor).isActive = true 75 | button.heightAnchor.constraint(equalToConstant: 40).isActive = true 76 | } 77 | } 78 | 79 | // MARK: - Action 80 | 81 | extension MainView { 82 | @objc func scrollToCell() { 83 | let randomInt = Int.random(in: 0..<8) 84 | print("scroll to cell \(randomInt)") 85 | collection.scrollToCell(at: randomInt) 86 | } 87 | } 88 | 89 | // MARK: - Data Source 90 | 91 | extension MainView: UICollectionViewDataSource { 92 | func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 93 | 8 94 | } 95 | 96 | func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 97 | collectionView.dequeueReusableCell(withReuseIdentifier: DemoCell.identifier, for: indexPath) as? DemoCell ?? UICollectionViewCell() 98 | } 99 | } 100 | 101 | extension MainView: UICollectionViewDelegateCarouselLayout { 102 | func collectionView(_ collectionView: UICollectionView, willDisplayCellAt cellIndex: CellIndex) { 103 | print("Will Display Cell at \(cellIndex)") 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /Demo/UI/Main/MainViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import UIKit 6 | 7 | class MainViewController: UIViewController { 8 | override func loadView() { 9 | view = MainView() 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.2 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "ToosieSlide", 8 | products: [ 9 | // Products define the executables and libraries produced by a package, and make them visible to other packages. 10 | .library( 11 | name: "ToosieSlide", 12 | targets: ["ToosieSlide"]), 13 | ], 14 | dependencies: [ 15 | // Dependencies declare other packages that this package depends on. 16 | // .package(url: /* package url */, from: "1.0.0"), 17 | ], 18 | targets: [ 19 | // Targets are the basic building blocks of a package. A target can define a module or a test suite. 20 | // Targets can depend on other targets in this package, and on products in packages which this package depends on. 21 | .target( 22 | name: "ToosieSlide", 23 | dependencies: []), 24 | .testTarget( 25 | name: "ToosieSlideTests", 26 | dependencies: ["ToosieSlide"]), 27 | ] 28 | ) 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Toosie Slide Logo 3 |

4 | 5 | ![Documentation](https://theinkedengineer.github.io/ToosieSlide/docs/1.1.x/badge.svg) 6 | [![Twitter](https://img.shields.io/twitter/url/https/theinkedgineer.svg?label=TheInkedgineer&style=social)](https://twitter.com/theinkedgineer) 7 | # ToosieSlide 8 | 9 | `ToosieSlide` is a library that offers a custom flow layout that simulates a paginated collection view, with the cell always staying in the middle. In other words, a carousel. 10 | In addtion `ToosieSlide` supports automatic cell resizing and alpha difference between focused and unfocused cells. 11 | 12 | `ToosieSlide` is fully documented [**here**](https://theinkedengineer.github.io/ToosieSlide/docs/1.1.x/index.html) 13 | 14 | Unless you have been living under a rock or born in 2030, `ToosieSlide` gets its name and its logo is inspired by `Drake`'s [**Toosie Slide**](https://www.youtube.com/watch?v=xWggTb45brM) 15 | 16 | Here is what it looks like: 17 | 18 | Toosie Slide Demo 19 | 20 | ## 1. Requirements and Compatibility 21 | 22 | - iOS 10+ 23 | - XCode 11 24 | - Swift 5.1+ 25 | 26 | ## 2. Installation 27 | 28 | ### Cocoapods 29 | 30 | Add the following line to your `Podfile` 31 | 32 | ` pod 'ToosieSlide', '~> 1.1'` 33 | 34 | ### Swift Package Manager 35 | 36 | Add the following to you `Package.swift` 37 | 38 | ``` 39 | dependencies: [ 40 | .package(url: "https://github.com/TheInkedEngineer/ToosieSlide.git", .upToNextMajor(from: "1.1.1")) 41 | ] 42 | ``` 43 | ## 3. Code Example 44 | 45 | ### Using `UICollectionViewCarouselLayout` 46 | 47 | ```swift 48 | lazy var collection: UICollectionView = { 49 | let carouselFlow = UICollectionViewCarouselLayout() 50 | carouselFlow.itemSize = CGSize(width: DemoCell.width, height: DemoCell.height) 51 | carouselFlow.minimumLineSpacing = 10 52 | let collection = UICollectionView(collectionViewCarouselLayout: carouselFlow) 53 | collection.register(DemoCell.self, forCellWithReuseIdentifier: DemoCell.identifier) 54 | return collection 55 | }() 56 | ``` 57 | 58 | ### Customizing `UICollectionViewCarouselLayout` 59 | 60 | ```swift 61 | let carouselFlow = UICollectionViewCarouselLayout() 62 | carouselfFlow.lowestVelocitySensitivity = 0.3 63 | carouselfFlow.focusedItemScaleFactor = 1 64 | carouselfFlow.focusedItemAlphaValue = 1 65 | carouselfFlow.nonFocusedItemsScaleFactor = 0.5 66 | carouselfFlow.nonFocusedItemsAlphaValue = 0.7 67 | ``` 68 | 69 | 70 | ## 4. Roadmap 71 | 72 | - support continuous swiping 73 | 74 | ## 5. Contribution 75 | 76 | **Working on your first Pull Request?** You can learn how from this *free* series [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) 77 | 78 | ## Generate the project 79 | 80 | To generate this project locally, you need [xcodegen](https://github.com/yonaskolb/XcodeGen). It is a great tool to customize a project and generate it on the go. 81 | 82 | You can either install it manually following their steps, or just run my `setup.sh` script. It automatically installs [Homebrew](https://brew.sh) if it is missing, installs `xcodegen`, removes existing (if present) `.xcodeproj`, run `xcodegen` and moves configuratiom files to their appropriate place. 83 | 84 | -------------------------------------------------------------------------------- /Sources/ToosieSlide/UICollectionView+Extensions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import UIKit 6 | 7 | public extension UICollectionView { 8 | /// A convenient initializer to instantiate a `UICollectionView` and configure it with a `UICollectionViewCarouselLayout` 9 | /// The `decelerationRate` of the cell is automatically set to `.fast` 10 | /// - Parameters: 11 | /// - frame: The CGRect frame to assign to the `UICollectionView` when creating it. 12 | /// - collectionViewCarouselLayout: The `UICollectionViewCarouselLayout` instance to use when instantiating the `UICollectionView`. 13 | convenience init(frame: CGRect = .zero, collectionViewCarouselLayout: UICollectionViewCarouselLayout) { 14 | self.init(frame: frame, collectionViewLayout: collectionViewCarouselLayout) 15 | decelerationRate = UIScrollView.DecelerationRate.fast 16 | } 17 | 18 | /// Returns an instance of `collectionViewLayout` down casted to `CarouselCollectionViewFlowLayout`. 19 | var carouselFlowLayout: UICollectionViewCarouselLayout { 20 | collectionViewLayout as! UICollectionViewCarouselLayout 21 | } 22 | 23 | /// Scrolls the CollectionView to a given cell index. 24 | /// 25 | /// If the passed index is grater than the number of items in the collection, the scroll stops at the last item. 26 | /// - Parameters: 27 | /// - index: The index of desired cell. Should be a value greater than or equal to 0. 28 | /// - animated: Whether or not to animate the scroll. 29 | func scrollToCell(at index: CellIndex, animated: Bool = true) { 30 | assert(index >= 0, "`index` cannot be negative.") 31 | 32 | // check if delegate allows it. check if section not empty 33 | guard 34 | (delegate as? UICollectionViewDelegateCarouselLayout)?.collectionView(self, shouldDisplayCellAt: index) != false, 35 | numberOfItems(inSection: 0) > 0 36 | else { 37 | return 38 | } 39 | 40 | // make sure index don't overflow 41 | let index = min(index, numberOfItems(inSection: 0) - 1) 42 | // get new offset 43 | let finalOffset = CGFloat(index) * (carouselFlowLayout.itemSize.width + carouselFlowLayout.minimumLineSpacing) 44 | // update visible cell 45 | carouselFlowLayout.currentVisibleCellIndex = index 46 | // navigate to offset 47 | setContentOffset(CGPoint(x: finalOffset, y: contentOffset.y), animated: animated) 48 | // update the layout 49 | carouselFlowLayout.invalidateLayout() 50 | } 51 | 52 | /// Returns the visible cell object at the specified `CellIndex`. 53 | /// - Parameter index: The `CellIndex` that specifies the item number of the cell. 54 | /// - Returns: The cell object at the corresponding index path or nil if the cell is not visible or indexPath is out of range. 55 | func cellForItem(at index: CellIndex) -> UICollectionViewCell? { 56 | cellForItem(at: IndexPath(item: index, section: 0)) 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /Sources/ToosieSlide/UICollectionViewDelegateCarouselLayout.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Toosie Slide 3 | // 4 | 5 | import UIKit 6 | 7 | /// The ``UICollectionViewDelegateFlowLayout` protocol defines methods that lets you know when and what cell will and is currently being displayed. 8 | /// Methods in this protocol are optional. 9 | /// This protocol conforms to `UICollectionViewDelegateFlowLayout`. 10 | public protocol UICollectionViewDelegateCarouselLayout: UICollectionViewDelegateFlowLayout { 11 | /// Asks the delegate if the cell at a given `CellIndex` should been shown on screen. 12 | /// 13 | /// This method will only be invoked when the scrolling stops. 14 | /// - Parameters: 15 | /// - collectionView: The collection view calling this method. 16 | /// - shouldDisplayCellAt: The `CellIndex` of the cell to be displayed. 17 | func collectionView(_ collectionView: UICollectionView, shouldDisplayCellAt cellIndex: CellIndex) -> Bool 18 | 19 | /// Tells the delegate that the cell at a given `CellIndex` will be shown on screen. 20 | /// 21 | /// This is meant to replace `func collectionView(UICollectionView, willDisplay: UICollectionViewCell, forItemAt: IndexPath)`. 22 | /// The default methods messes up the `IndexPath` when an incomplete snap takes place. 23 | /// This method will only be invoked if the layout's `currentVisibleCell` value changes. 24 | /// - Parameters: 25 | /// - collectionView: The collection view calling this method. 26 | /// - willShowCellAt: The `CellIndex` of the cell being displayed. 27 | func collectionView(_ collectionView: UICollectionView, willDisplayCellAt cellIndex: CellIndex) 28 | } 29 | 30 | public extension UICollectionViewDelegateCarouselLayout { 31 | func collectionView(_ collectionView: UICollectionView, shouldDisplayCellAt cellIndex: CellIndex) -> Bool { true } 32 | func collectionView(_ collectionView: UICollectionView, willDisplayCellAt cellIndex: CellIndex) {} 33 | } 34 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | import ToosieSlideTests 4 | 5 | var tests = [XCTestCaseEntry]() 6 | tests += ToosieSlideTests.allTests() 7 | XCTMain(tests) 8 | -------------------------------------------------------------------------------- /Tests/ToosieSlideTests/ToosieSlideTests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import ToosieSlide 3 | 4 | final class ToosieSlideTests: XCTestCase { 5 | func testExample() { 6 | // This is an example of a functional test case. 7 | // Use XCTAssert and related functions to verify your tests produce the correct 8 | // results. 9 | XCTAssertEqual(ToosieSlide().text, "Hello, World!") 10 | } 11 | 12 | static var allTests = [ 13 | ("testExample", testExample), 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /Tests/ToosieSlideTests/XCTestManifests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | 3 | #if !canImport(ObjectiveC) 4 | public func allTests() -> [XCTestCaseEntry] { 5 | return [ 6 | testCase(ToosieSlideTests.allTests), 7 | ] 8 | } 9 | #endif 10 | -------------------------------------------------------------------------------- /ToosieSlide.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'ToosieSlide' 3 | s.version = "1.1.1" 4 | s.summary = 'A carousel layout provider for collection views' 5 | s.homepage = 'https://theinkedengineer.com' 6 | s.license = { :type => 'Apache License 2.0' } 7 | s.author = { 'Firas Safa' => 'firas@theinkedengineer.com' } 8 | s.source = { :git => 'https://github.com/TheInkedEngineer/ToosieSlide.git', :tag => s.version.to_s } 9 | 10 | s.swift_version = '5.2' 11 | 12 | s.ios.deployment_target = '10.0' 13 | 14 | s.ios.source_files = [ 15 | 'Sources/**/*.swift' 16 | ] 17 | 18 | end 19 | -------------------------------------------------------------------------------- /ToosieSlideDemo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/ToosieSlideDemo.gif -------------------------------------------------------------------------------- /ToosieSlideLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/ToosieSlideLogo.png -------------------------------------------------------------------------------- /docs/1.0.x/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Classes

69 |

The following classes are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection. 89 | In addition UICollectionViewCarouselLayout offers the possibility to resize the non focused cells and change their alpha while scrolling. 90 | For the proper functioning of this flow layout, collection view’s decelerationRate should be set to fast.

    91 | 92 |

    For the proper functioning of UICollectionViewCarouselLayout you are required to set the item size, either using the convenience init(itemSize: CGSize) 93 | or by manually calling layout.itemSize and setting its value. 94 | Using func collectionView(_: UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize will not work 95 | Because a concrete fixed item size is needed to be able to calculate the various insets.

    96 | 97 | See more 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    open class UICollectionViewCarouselLayout : UICollectionViewFlowLayout
    104 | 105 |
    106 |
    107 |
    108 | Show on GitHub 109 |
    110 |
    111 |
    112 |
  • 113 |
114 |
115 |
116 |
117 | 121 |
122 |
123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /docs/1.0.x/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Extensions

69 |

The following extensions are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionView 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 | 89 | See more 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public extension UICollectionView
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
103 |
104 |
105 |
106 | 110 |
111 |
112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/1.0.x/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Protocols

69 |

The following protocols are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewDelegateCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed. 89 | Methods in this protocol are optional. 90 | This protocol conforms to UICollectionViewDelegateFlowLayout.

    91 | 92 | See more 93 |
    94 |
    95 |

    Declaration

    96 |
    97 |

    Swift

    98 |
    public protocol UICollectionViewDelegateCarouselLayout : UICollectionViewDelegateFlowLayout
    99 | 100 |
    101 |
    102 |
    103 | Show on GitHub 104 |
    105 |
    106 |
    107 |
  • 108 |
109 |
110 |
111 |
112 | 116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/1.0.x/Typealiases.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Type Aliases Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Type Aliases

69 |

The following type aliases are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | CellIndex 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A type alias to simulate the idea of a cell index.

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public typealias CellIndex = Int
    96 | 97 |
    98 |
    99 |
    100 | Show on GitHub 101 |
    102 |
    103 |
    104 |
  • 105 |
106 |
107 |
108 |
109 | 113 |
114 |
115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/1.0.x/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/1.0.x/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/1.0.x/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 2; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 2; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | .main-content .section-name p { 173 | margin-bottom: inherit; 174 | line-height: inherit; } 175 | .main-content .section-name code { 176 | background-color: inherit; 177 | padding: inherit; 178 | color: inherit; } 179 | 180 | .section { 181 | padding: 0 25px; } 182 | 183 | .highlight { 184 | background-color: #eee; 185 | padding: 10px 12px; 186 | border: 1px solid #e2e2e2; 187 | border-radius: 4px; 188 | overflow-x: auto; } 189 | 190 | .declaration .highlight { 191 | overflow-x: initial; 192 | padding: 0 40px 40px 0; 193 | margin-bottom: -25px; 194 | background-color: transparent; 195 | border: none; } 196 | 197 | .section-name { 198 | margin: 0; 199 | margin-left: 18px; } 200 | 201 | .task-group-section { 202 | padding-left: 6px; 203 | border-top: 1px solid #e2e2e2; } 204 | 205 | .task-group { 206 | padding-top: 0px; } 207 | 208 | .task-name-container a[name]:before { 209 | content: ""; 210 | display: block; 211 | padding-top: 70px; 212 | margin: -70px 0 0; } 213 | 214 | .section-name-container { 215 | position: relative; 216 | display: inline-block; } 217 | .section-name-container .section-name-link { 218 | position: absolute; 219 | top: 0; 220 | left: 0; 221 | bottom: 0; 222 | right: 0; 223 | margin-bottom: 0; } 224 | .section-name-container .section-name { 225 | position: relative; 226 | pointer-events: none; 227 | z-index: 1; } 228 | .section-name-container .section-name a { 229 | pointer-events: auto; } 230 | 231 | .item { 232 | padding-top: 8px; 233 | width: 100%; 234 | list-style-type: none; } 235 | .item a[name]:before { 236 | content: ""; 237 | display: block; 238 | padding-top: 70px; 239 | margin: -70px 0 0; } 240 | .item code { 241 | background-color: transparent; 242 | padding: 0; } 243 | .item .token, .item .direct-link { 244 | padding-left: 3px; 245 | margin-left: 15px; 246 | font-size: 11.9px; 247 | transition: all 300ms; } 248 | .item .token-open { 249 | margin-left: 0px; } 250 | .item .discouraged { 251 | text-decoration: line-through; } 252 | .item .declaration-note { 253 | font-size: .85em; 254 | color: gray; 255 | font-style: italic; } 256 | 257 | .pointer-container { 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -23px; 260 | padding-bottom: 13px; 261 | position: relative; 262 | width: 110%; } 263 | 264 | .pointer { 265 | background: #f9f9f9; 266 | border-left: 1px solid #e2e2e2; 267 | border-top: 1px solid #e2e2e2; 268 | height: 12px; 269 | left: 21px; 270 | top: -7px; 271 | -webkit-transform: rotate(45deg); 272 | -moz-transform: rotate(45deg); 273 | -o-transform: rotate(45deg); 274 | transform: rotate(45deg); 275 | position: absolute; 276 | width: 12px; } 277 | 278 | .height-container { 279 | display: none; 280 | left: -25px; 281 | padding: 0 25px; 282 | position: relative; 283 | width: 100%; 284 | overflow: hidden; } 285 | .height-container .section { 286 | background: #f9f9f9; 287 | border-bottom: 1px solid #e2e2e2; 288 | left: -25px; 289 | position: relative; 290 | width: 100%; 291 | padding-top: 10px; 292 | padding-bottom: 5px; } 293 | 294 | .aside, .language { 295 | padding: 6px 12px; 296 | margin: 12px 0; 297 | border-left: 5px solid #dddddd; 298 | overflow-y: hidden; } 299 | .aside .aside-title, .language .aside-title { 300 | font-size: 9px; 301 | letter-spacing: 2px; 302 | text-transform: uppercase; 303 | padding-bottom: 0; 304 | margin: 0; 305 | color: #aaa; 306 | -webkit-user-select: none; } 307 | .aside p:last-child, .language p:last-child { 308 | margin-bottom: 0; } 309 | 310 | .language { 311 | border-left: 5px solid #cde9f4; } 312 | .language .aside-title { 313 | color: #4b8afb; } 314 | 315 | .aside-warning, .aside-deprecated, .aside-unavailable { 316 | border-left: 5px solid #ff6666; } 317 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 318 | color: #ff0000; } 319 | 320 | .graybox { 321 | border-collapse: collapse; 322 | width: 100%; } 323 | .graybox p { 324 | margin: 0; 325 | word-break: break-word; 326 | min-width: 50px; } 327 | .graybox td { 328 | border: 1px solid #e2e2e2; 329 | padding: 5px 25px 5px 10px; 330 | vertical-align: middle; } 331 | .graybox tr td:first-of-type { 332 | text-align: right; 333 | padding: 7px; 334 | vertical-align: top; 335 | word-break: normal; 336 | width: 40px; } 337 | 338 | .slightly-smaller { 339 | font-size: 0.9em; } 340 | 341 | #footer { 342 | position: relative; 343 | top: 10px; 344 | bottom: 0px; 345 | margin-left: 25px; } 346 | #footer p { 347 | margin: 0; 348 | color: #aaa; 349 | font-size: 0.8em; } 350 | 351 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 352 | display: none; } 353 | 354 | html.dash .main-content { 355 | width: 980px; 356 | margin-left: 0; 357 | border: none; 358 | width: 100%; 359 | top: 0; 360 | padding-bottom: 0; } 361 | 362 | html.dash .height-container { 363 | display: block; } 364 | 365 | html.dash .item .token { 366 | margin-left: 0; } 367 | 368 | html.dash .content-wrapper { 369 | width: auto; } 370 | 371 | html.dash #footer { 372 | position: static; } 373 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Classes

69 |

The following classes are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection. 89 | In addition UICollectionViewCarouselLayout offers the possibility to resize the non focused cells and change their alpha while scrolling. 90 | For the proper functioning of this flow layout, collection view’s decelerationRate should be set to fast.

    91 | 92 |

    For the proper functioning of UICollectionViewCarouselLayout you are required to set the item size, either using the convenience init(itemSize: CGSize) 93 | or by manually calling layout.itemSize and setting its value. 94 | Using func collectionView(_: UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize will not work 95 | Because a concrete fixed item size is needed to be able to calculate the various insets.

    96 | 97 | See more 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    open class UICollectionViewCarouselLayout : UICollectionViewFlowLayout
    104 | 105 |
    106 |
    107 |
    108 | Show on GitHub 109 |
    110 |
    111 |
    112 |
  • 113 |
114 |
115 |
116 |
117 | 121 |
122 |
123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Extensions

69 |

The following extensions are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionView 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 | 89 | See more 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public extension UICollectionView
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
103 |
104 |
105 |
106 | 110 |
111 |
112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Protocols

69 |

The following protocols are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewDelegateCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed. 89 | Methods in this protocol are optional. 90 | This protocol conforms to UICollectionViewDelegateFlowLayout.

    91 | 92 | See more 93 |
    94 |
    95 |

    Declaration

    96 |
    97 |

    Swift

    98 |
    public protocol UICollectionViewDelegateCarouselLayout : UICollectionViewDelegateFlowLayout
    99 | 100 |
    101 |
    102 |
    103 | Show on GitHub 104 |
    105 |
    106 |
    107 |
  • 108 |
109 |
110 |
111 |
112 | 116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Typealiases.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Type Aliases Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.0.1 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Type Aliases

69 |

The following type aliases are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | CellIndex 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A type alias to simulate the idea of a cell index.

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public typealias CellIndex = Int
    96 | 97 |
    98 |
    99 |
    100 | Show on GitHub 101 |
    102 |
    103 |
    104 |
  • 105 |
106 |
107 |
108 |
109 | 113 |
114 |
115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 2; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 2; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | .main-content .section-name p { 173 | margin-bottom: inherit; 174 | line-height: inherit; } 175 | .main-content .section-name code { 176 | background-color: inherit; 177 | padding: inherit; 178 | color: inherit; } 179 | 180 | .section { 181 | padding: 0 25px; } 182 | 183 | .highlight { 184 | background-color: #eee; 185 | padding: 10px 12px; 186 | border: 1px solid #e2e2e2; 187 | border-radius: 4px; 188 | overflow-x: auto; } 189 | 190 | .declaration .highlight { 191 | overflow-x: initial; 192 | padding: 0 40px 40px 0; 193 | margin-bottom: -25px; 194 | background-color: transparent; 195 | border: none; } 196 | 197 | .section-name { 198 | margin: 0; 199 | margin-left: 18px; } 200 | 201 | .task-group-section { 202 | padding-left: 6px; 203 | border-top: 1px solid #e2e2e2; } 204 | 205 | .task-group { 206 | padding-top: 0px; } 207 | 208 | .task-name-container a[name]:before { 209 | content: ""; 210 | display: block; 211 | padding-top: 70px; 212 | margin: -70px 0 0; } 213 | 214 | .section-name-container { 215 | position: relative; 216 | display: inline-block; } 217 | .section-name-container .section-name-link { 218 | position: absolute; 219 | top: 0; 220 | left: 0; 221 | bottom: 0; 222 | right: 0; 223 | margin-bottom: 0; } 224 | .section-name-container .section-name { 225 | position: relative; 226 | pointer-events: none; 227 | z-index: 1; } 228 | .section-name-container .section-name a { 229 | pointer-events: auto; } 230 | 231 | .item { 232 | padding-top: 8px; 233 | width: 100%; 234 | list-style-type: none; } 235 | .item a[name]:before { 236 | content: ""; 237 | display: block; 238 | padding-top: 70px; 239 | margin: -70px 0 0; } 240 | .item code { 241 | background-color: transparent; 242 | padding: 0; } 243 | .item .token, .item .direct-link { 244 | padding-left: 3px; 245 | margin-left: 15px; 246 | font-size: 11.9px; 247 | transition: all 300ms; } 248 | .item .token-open { 249 | margin-left: 0px; } 250 | .item .discouraged { 251 | text-decoration: line-through; } 252 | .item .declaration-note { 253 | font-size: .85em; 254 | color: gray; 255 | font-style: italic; } 256 | 257 | .pointer-container { 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -23px; 260 | padding-bottom: 13px; 261 | position: relative; 262 | width: 110%; } 263 | 264 | .pointer { 265 | background: #f9f9f9; 266 | border-left: 1px solid #e2e2e2; 267 | border-top: 1px solid #e2e2e2; 268 | height: 12px; 269 | left: 21px; 270 | top: -7px; 271 | -webkit-transform: rotate(45deg); 272 | -moz-transform: rotate(45deg); 273 | -o-transform: rotate(45deg); 274 | transform: rotate(45deg); 275 | position: absolute; 276 | width: 12px; } 277 | 278 | .height-container { 279 | display: none; 280 | left: -25px; 281 | padding: 0 25px; 282 | position: relative; 283 | width: 100%; 284 | overflow: hidden; } 285 | .height-container .section { 286 | background: #f9f9f9; 287 | border-bottom: 1px solid #e2e2e2; 288 | left: -25px; 289 | position: relative; 290 | width: 100%; 291 | padding-top: 10px; 292 | padding-bottom: 5px; } 293 | 294 | .aside, .language { 295 | padding: 6px 12px; 296 | margin: 12px 0; 297 | border-left: 5px solid #dddddd; 298 | overflow-y: hidden; } 299 | .aside .aside-title, .language .aside-title { 300 | font-size: 9px; 301 | letter-spacing: 2px; 302 | text-transform: uppercase; 303 | padding-bottom: 0; 304 | margin: 0; 305 | color: #aaa; 306 | -webkit-user-select: none; } 307 | .aside p:last-child, .language p:last-child { 308 | margin-bottom: 0; } 309 | 310 | .language { 311 | border-left: 5px solid #cde9f4; } 312 | .language .aside-title { 313 | color: #4b8afb; } 314 | 315 | .aside-warning, .aside-deprecated, .aside-unavailable { 316 | border-left: 5px solid #ff6666; } 317 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 318 | color: #ff0000; } 319 | 320 | .graybox { 321 | border-collapse: collapse; 322 | width: 100%; } 323 | .graybox p { 324 | margin: 0; 325 | word-break: break-word; 326 | min-width: 50px; } 327 | .graybox td { 328 | border: 1px solid #e2e2e2; 329 | padding: 5px 25px 5px 10px; 330 | vertical-align: middle; } 331 | .graybox tr td:first-of-type { 332 | text-align: right; 333 | padding: 7px; 334 | vertical-align: top; 335 | word-break: normal; 336 | width: 40px; } 337 | 338 | .slightly-smaller { 339 | font-size: 0.9em; } 340 | 341 | #footer { 342 | position: relative; 343 | top: 10px; 344 | bottom: 0px; 345 | margin-left: 25px; } 346 | #footer p { 347 | margin: 0; 348 | color: #aaa; 349 | font-size: 0.8em; } 350 | 351 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 352 | display: none; } 353 | 354 | html.dash .main-content { 355 | width: 980px; 356 | margin-left: 0; 357 | border: none; 358 | width: 100%; 359 | top: 0; 360 | padding-bottom: 0; } 361 | 362 | html.dash .height-container { 363 | display: block; } 364 | 365 | html.dash .item .token { 366 | margin-left: 0; } 367 | 368 | html.dash .content-wrapper { 369 | width: auto; } 370 | 371 | html.dash #footer { 372 | position: static; } 373 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/search.json: -------------------------------------------------------------------------------- 1 | {"Typealiases.html#/s:11ToosieSlide9CellIndexa":{"name":"CellIndex","abstract":"

A type alias to simulate the idea of a cell index.

"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_19shouldDisplayCellAtSbSo0cD0C_SitF":{"name":"collectionView(_:shouldDisplayCellAt:)","abstract":"

Asks the delegate if the cell at a given CellIndex should been shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_17willDisplayCellAtySo0cD0C_SitF":{"name":"collectionView(_:willDisplayCellAt:)","abstract":"

Tells the delegate that the cell at a given CellIndex will be shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html":{"name":"UICollectionViewDelegateCarouselLayout","abstract":"

The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed."},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE5frame010collectionB14CarouselLayoutABSo6CGRectV_AC0abgH0Ctcfc":{"name":"init(frame:collectionViewCarouselLayout:)","abstract":"

A convenient initializer to instantiate a UICollectionView and configure it with a UICollectionViewCarouselLayout","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE18carouselFlowLayoutAC0ab8CarouselG0Cvp":{"name":"carouselFlowLayout","abstract":"

Returns an instance of collectionViewLayout down casted to CarouselCollectionViewFlowLayout.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE12scrollToCell2at8animatedySi_SbtF":{"name":"scrollToCell(at:animated:)","abstract":"

Scrolls the CollectionView to a given cell index.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE11cellForItem2atSo0aB4CellCSgSi_tF":{"name":"cellForItem(at:)","abstract":"

Returns the visible cell object at the specified CellIndex.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html":{"name":"UICollectionView"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25lowestVelocitySensitivity12CoreGraphics7CGFloatVvp":{"name":"lowestVelocitySensitivity","abstract":"

The lowest absolute velocity that should invoke a change of cells.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC23currentVisibleCellIndexSivp":{"name":"currentVisibleCellIndex","abstract":"

The cell currently being displayed for the user.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC28focusedItemHeightScaleFactor12CoreGraphics7CGFloatVvp":{"name":"focusedItemHeightScaleFactor","abstract":"

The scale factor to apply to the focused cell’s height. Defaults to 1.0.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC21focusedItemAlphaValue12CoreGraphics7CGFloatVvp":{"name":"focusedItemAlphaValue","abstract":"

The alpha value of the lone focused cell. This defaults to 1.0.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC26nonFocusedItemsScaleFactor12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsScaleFactor","abstract":"

The scale factor to apply to the non focused cells’ height. Defaults to 0.8.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25nonFocusedItemsAlphaValue12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsAlphaValue","abstract":"

The alpha value of the non focused cells. This defaults to 0.5.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC13currentOffset12CoreGraphics7CGFloatVvp":{"name":"currentOffset","abstract":"

The current content offset of the visible cell from the section inset..

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)itemSize":{"name":"itemSize","abstract":"

The CGSize of the single item inside the cell.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)scrollDirection":{"name":"scrollDirection","abstract":"

The UICollectionView.ScrollDirection of the collection.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)init":{"name":"init()","abstract":"

Initializes the flow layout with a .horizontal scroll direction.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC8itemSizeACSo6CGSizeV_tcfc":{"name":"init(itemSize:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction, and sets the itemSize of the single element.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction using the NSCoder.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"

Invalidates the current layout and triggers a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"

Returns the layout attributes for all of the cells and views in the specified rectangle.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"

Asks the layout object if the new bounds require a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)prepareLayout":{"name":"prepare()","abstract":"

Updates the current layout if collection view size have changed.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)targetContentOffsetForProposedContentOffset:withScrollingVelocity:":{"name":"targetContentOffset(forProposedContentOffset:withScrollingVelocity:)","abstract":"

Returns the point at which to stop scrolling.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html":{"name":"UICollectionViewCarouselLayout","abstract":"

A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection."},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/TheInkedEngineer/Code/TheInkedEngineer/ToosieSlide" 6 | } -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/docsets/ToosieSlide.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/1.0.x/docsets/ToosieSlide.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/docsets/ToosieSlide.tgz -------------------------------------------------------------------------------- /docs/1.0.x/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/img/carat.png -------------------------------------------------------------------------------- /docs/1.0.x/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/img/dash.png -------------------------------------------------------------------------------- /docs/1.0.x/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.0.x/img/gh.png -------------------------------------------------------------------------------- /docs/1.0.x/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/1.0.x/search.json: -------------------------------------------------------------------------------- 1 | {"Typealiases.html#/s:11ToosieSlide9CellIndexa":{"name":"CellIndex","abstract":"

A type alias to simulate the idea of a cell index.

"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_19shouldDisplayCellAtSbSo0cD0C_SitF":{"name":"collectionView(_:shouldDisplayCellAt:)","abstract":"

Asks the delegate if the cell at a given CellIndex should been shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_17willDisplayCellAtySo0cD0C_SitF":{"name":"collectionView(_:willDisplayCellAt:)","abstract":"

Tells the delegate that the cell at a given CellIndex will be shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html":{"name":"UICollectionViewDelegateCarouselLayout","abstract":"

The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed."},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE5frame010collectionB14CarouselLayoutABSo6CGRectV_AC0abgH0Ctcfc":{"name":"init(frame:collectionViewCarouselLayout:)","abstract":"

A convenient initializer to instantiate a UICollectionView and configure it with a UICollectionViewCarouselLayout","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE18carouselFlowLayoutAC0ab8CarouselG0Cvp":{"name":"carouselFlowLayout","abstract":"

Returns an instance of collectionViewLayout down casted to CarouselCollectionViewFlowLayout.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE12scrollToCell2at8animatedySi_SbtF":{"name":"scrollToCell(at:animated:)","abstract":"

Scrolls the CollectionView to a given cell index.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE11cellForItem2atSo0aB4CellCSgSi_tF":{"name":"cellForItem(at:)","abstract":"

Returns the visible cell object at the specified CellIndex.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html":{"name":"UICollectionView"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25lowestVelocitySensitivity12CoreGraphics7CGFloatVvp":{"name":"lowestVelocitySensitivity","abstract":"

The lowest absolute velocity that should invoke a change of cells.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC23currentVisibleCellIndexSivp":{"name":"currentVisibleCellIndex","abstract":"

The cell currently being displayed for the user.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC28focusedItemHeightScaleFactor12CoreGraphics7CGFloatVvp":{"name":"focusedItemHeightScaleFactor","abstract":"

The scale factor to apply to the focused cell’s height. Defaults to 1.0.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC21focusedItemAlphaValue12CoreGraphics7CGFloatVvp":{"name":"focusedItemAlphaValue","abstract":"

The alpha value of the lone focused cell. This defaults to 1.0.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC26nonFocusedItemsScaleFactor12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsScaleFactor","abstract":"

The scale factor to apply to the non focused cells’ height. Defaults to 0.8.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25nonFocusedItemsAlphaValue12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsAlphaValue","abstract":"

The alpha value of the non focused cells. This defaults to 0.5.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC13currentOffset12CoreGraphics7CGFloatVvp":{"name":"currentOffset","abstract":"

The current content offset of the visible cell from the section inset..

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)itemSize":{"name":"itemSize","abstract":"

The CGSize of the single item inside the cell.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)scrollDirection":{"name":"scrollDirection","abstract":"

The UICollectionView.ScrollDirection of the collection.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)init":{"name":"init()","abstract":"

Initializes the flow layout with a .horizontal scroll direction.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC8itemSizeACSo6CGSizeV_tcfc":{"name":"init(itemSize:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction, and sets the itemSize of the single element.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction using the NSCoder.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"

Invalidates the current layout and triggers a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"

Returns the layout attributes for all of the cells and views in the specified rectangle.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"

Asks the layout object if the new bounds require a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)prepareLayout":{"name":"prepare()","abstract":"

Updates the current layout if collection view size have changed.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)targetContentOffsetForProposedContentOffset:withScrollingVelocity:":{"name":"targetContentOffset(forProposedContentOffset:withScrollingVelocity:)","abstract":"

Returns the point at which to stop scrolling.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html":{"name":"UICollectionViewCarouselLayout","abstract":"

A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection."},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} -------------------------------------------------------------------------------- /docs/1.0.x/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/TheInkedEngineer/Code/TheInkedEngineer/ToosieSlide" 6 | } -------------------------------------------------------------------------------- /docs/1.1.x/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Classes

69 |

The following classes are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection. 89 | In addition UICollectionViewCarouselLayout offers the possibility to resize the non focused cells and change their alpha while scrolling. 90 | For the proper functioning of this flow layout, collection view’s decelerationRate should be set to fast.

    91 | 92 |

    For the proper functioning of UICollectionViewCarouselLayout you are required to set the item size, either using the convenience init(itemSize: CGSize) 93 | or by manually calling layout.itemSize and setting its value. 94 | Using func collectionView(_: UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize will not work 95 | Because a concrete fixed item size is needed to be able to calculate the various insets.

    96 | 97 | See more 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    open class UICollectionViewCarouselLayout : UICollectionViewFlowLayout
    104 | 105 |
    106 |
    107 |
    108 | Show on GitHub 109 |
    110 |
    111 |
    112 |
  • 113 |
114 |
115 |
116 |
117 | 121 |
122 |
123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /docs/1.1.x/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Extensions

69 |

The following extensions are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionView 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 | 89 | See more 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public extension UICollectionView
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
103 |
104 |
105 |
106 | 110 |
111 |
112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/1.1.x/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Protocols

69 |

The following protocols are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewDelegateCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed. 89 | Methods in this protocol are optional. 90 | This protocol conforms to UICollectionViewDelegateFlowLayout.

    91 | 92 | See more 93 |
    94 |
    95 |

    Declaration

    96 |
    97 |

    Swift

    98 |
    public protocol UICollectionViewDelegateCarouselLayout : UICollectionViewDelegateFlowLayout
    99 | 100 |
    101 |
    102 |
    103 | Show on GitHub 104 |
    105 |
    106 |
    107 |
  • 108 |
109 |
110 |
111 |
112 | 116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/1.1.x/Typealiases.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Type Aliases Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Type Aliases

69 |

The following type aliases are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | CellIndex 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A type alias to simulate the idea of a cell index.

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public typealias CellIndex = Int
    96 | 97 |
    98 |
    99 |
    100 | Show on GitHub 101 |
    102 |
    103 |
    104 |
  • 105 |
106 |
107 |
108 |
109 | 113 |
114 |
115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/1.1.x/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/1.1.x/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/1.1.x/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 2; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 2; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | .main-content .section-name p { 173 | margin-bottom: inherit; 174 | line-height: inherit; } 175 | .main-content .section-name code { 176 | background-color: inherit; 177 | padding: inherit; 178 | color: inherit; } 179 | 180 | .section { 181 | padding: 0 25px; } 182 | 183 | .highlight { 184 | background-color: #eee; 185 | padding: 10px 12px; 186 | border: 1px solid #e2e2e2; 187 | border-radius: 4px; 188 | overflow-x: auto; } 189 | 190 | .declaration .highlight { 191 | overflow-x: initial; 192 | padding: 0 40px 40px 0; 193 | margin-bottom: -25px; 194 | background-color: transparent; 195 | border: none; } 196 | 197 | .section-name { 198 | margin: 0; 199 | margin-left: 18px; } 200 | 201 | .task-group-section { 202 | padding-left: 6px; 203 | border-top: 1px solid #e2e2e2; } 204 | 205 | .task-group { 206 | padding-top: 0px; } 207 | 208 | .task-name-container a[name]:before { 209 | content: ""; 210 | display: block; 211 | padding-top: 70px; 212 | margin: -70px 0 0; } 213 | 214 | .section-name-container { 215 | position: relative; 216 | display: inline-block; } 217 | .section-name-container .section-name-link { 218 | position: absolute; 219 | top: 0; 220 | left: 0; 221 | bottom: 0; 222 | right: 0; 223 | margin-bottom: 0; } 224 | .section-name-container .section-name { 225 | position: relative; 226 | pointer-events: none; 227 | z-index: 1; } 228 | .section-name-container .section-name a { 229 | pointer-events: auto; } 230 | 231 | .item { 232 | padding-top: 8px; 233 | width: 100%; 234 | list-style-type: none; } 235 | .item a[name]:before { 236 | content: ""; 237 | display: block; 238 | padding-top: 70px; 239 | margin: -70px 0 0; } 240 | .item code { 241 | background-color: transparent; 242 | padding: 0; } 243 | .item .token, .item .direct-link { 244 | padding-left: 3px; 245 | margin-left: 15px; 246 | font-size: 11.9px; 247 | transition: all 300ms; } 248 | .item .token-open { 249 | margin-left: 0px; } 250 | .item .discouraged { 251 | text-decoration: line-through; } 252 | .item .declaration-note { 253 | font-size: .85em; 254 | color: gray; 255 | font-style: italic; } 256 | 257 | .pointer-container { 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -23px; 260 | padding-bottom: 13px; 261 | position: relative; 262 | width: 110%; } 263 | 264 | .pointer { 265 | background: #f9f9f9; 266 | border-left: 1px solid #e2e2e2; 267 | border-top: 1px solid #e2e2e2; 268 | height: 12px; 269 | left: 21px; 270 | top: -7px; 271 | -webkit-transform: rotate(45deg); 272 | -moz-transform: rotate(45deg); 273 | -o-transform: rotate(45deg); 274 | transform: rotate(45deg); 275 | position: absolute; 276 | width: 12px; } 277 | 278 | .height-container { 279 | display: none; 280 | left: -25px; 281 | padding: 0 25px; 282 | position: relative; 283 | width: 100%; 284 | overflow: hidden; } 285 | .height-container .section { 286 | background: #f9f9f9; 287 | border-bottom: 1px solid #e2e2e2; 288 | left: -25px; 289 | position: relative; 290 | width: 100%; 291 | padding-top: 10px; 292 | padding-bottom: 5px; } 293 | 294 | .aside, .language { 295 | padding: 6px 12px; 296 | margin: 12px 0; 297 | border-left: 5px solid #dddddd; 298 | overflow-y: hidden; } 299 | .aside .aside-title, .language .aside-title { 300 | font-size: 9px; 301 | letter-spacing: 2px; 302 | text-transform: uppercase; 303 | padding-bottom: 0; 304 | margin: 0; 305 | color: #aaa; 306 | -webkit-user-select: none; } 307 | .aside p:last-child, .language p:last-child { 308 | margin-bottom: 0; } 309 | 310 | .language { 311 | border-left: 5px solid #cde9f4; } 312 | .language .aside-title { 313 | color: #4b8afb; } 314 | 315 | .aside-warning, .aside-deprecated, .aside-unavailable { 316 | border-left: 5px solid #ff6666; } 317 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 318 | color: #ff0000; } 319 | 320 | .graybox { 321 | border-collapse: collapse; 322 | width: 100%; } 323 | .graybox p { 324 | margin: 0; 325 | word-break: break-word; 326 | min-width: 50px; } 327 | .graybox td { 328 | border: 1px solid #e2e2e2; 329 | padding: 5px 25px 5px 10px; 330 | vertical-align: middle; } 331 | .graybox tr td:first-of-type { 332 | text-align: right; 333 | padding: 7px; 334 | vertical-align: top; 335 | word-break: normal; 336 | width: 40px; } 337 | 338 | .slightly-smaller { 339 | font-size: 0.9em; } 340 | 341 | #footer { 342 | position: relative; 343 | top: 10px; 344 | bottom: 0px; 345 | margin-left: 25px; } 346 | #footer p { 347 | margin: 0; 348 | color: #aaa; 349 | font-size: 0.8em; } 350 | 351 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 352 | display: none; } 353 | 354 | html.dash .main-content { 355 | width: 980px; 356 | margin-left: 0; 357 | border: none; 358 | width: 100%; 359 | top: 0; 360 | padding-bottom: 0; } 361 | 362 | html.dash .height-container { 363 | display: block; } 364 | 365 | html.dash .item .token { 366 | margin-left: 0; } 367 | 368 | html.dash .content-wrapper { 369 | width: auto; } 370 | 371 | html.dash #footer { 372 | position: static; } 373 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Classes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Classes Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Classes

69 |

The following classes are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection. 89 | In addition UICollectionViewCarouselLayout offers the possibility to resize the non focused cells and change their alpha while scrolling. 90 | For the proper functioning of this flow layout, collection view’s decelerationRate should be set to fast.

    91 | 92 |

    For the proper functioning of UICollectionViewCarouselLayout you are required to set the item size, either using the convenience init(itemSize: CGSize) 93 | or by manually calling layout.itemSize and setting its value. 94 | Using func collectionView(_: UICollectionView, layout: UICollectionViewLayout, sizeForItemAt: IndexPath) -> CGSize will not work 95 | Because a concrete fixed item size is needed to be able to calculate the various insets.

    96 | 97 | See more 98 |
    99 |
    100 |

    Declaration

    101 |
    102 |

    Swift

    103 |
    open class UICollectionViewCarouselLayout : UICollectionViewFlowLayout
    104 | 105 |
    106 |
    107 |
    108 | Show on GitHub 109 |
    110 |
    111 |
    112 |
  • 113 |
114 |
115 |
116 |
117 | 121 |
122 |
123 | 124 | 125 | 126 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Extensions.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Extensions Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Extensions

69 |

The following extensions are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionView 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 | 89 | See more 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public extension UICollectionView
    96 | 97 |
    98 |
    99 |
    100 |
    101 |
  • 102 |
103 |
104 |
105 |
106 | 110 |
111 |
112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Protocols.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Protocols Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Protocols

69 |

The following protocols are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | UICollectionViewDelegateCarouselLayout 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed. 89 | Methods in this protocol are optional. 90 | This protocol conforms to UICollectionViewDelegateFlowLayout.

    91 | 92 | See more 93 |
    94 |
    95 |

    Declaration

    96 |
    97 |

    Swift

    98 |
    public protocol UICollectionViewDelegateCarouselLayout : UICollectionViewDelegateFlowLayout
    99 | 100 |
    101 |
    102 |
    103 | Show on GitHub 104 |
    105 |
    106 |
    107 |
  • 108 |
109 |
110 |
111 |
112 | 116 |
117 |
118 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/Typealiases.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Type Aliases Reference 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 |

ToosieSlide 1.1.0 Docs (100% documented)

18 |

View on GitHub

19 |
20 |
21 |
22 | 27 |
28 |
29 | 65 |
66 |
67 |
68 |

Type Aliases

69 |

The following type aliases are available globally.

70 | 71 |
72 |
73 |
74 |
    75 |
  • 76 |
    77 | 78 | 79 | 80 | CellIndex 81 | 82 |
    83 |
    84 |
    85 |
    86 |
    87 |
    88 |

    A type alias to simulate the idea of a cell index.

    89 | 90 |
    91 |
    92 |

    Declaration

    93 |
    94 |

    Swift

    95 |
    public typealias CellIndex = Int
    96 | 97 |
    98 |
    99 |
    100 | Show on GitHub 101 |
    102 |
    103 |
    104 |
  • 105 |
106 |
107 |
108 |
109 | 113 |
114 |
115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /* Credit to https://gist.github.com/wataru420/2048287 */ 2 | .highlight { 3 | /* Comment */ 4 | /* Error */ 5 | /* Keyword */ 6 | /* Operator */ 7 | /* Comment.Multiline */ 8 | /* Comment.Preproc */ 9 | /* Comment.Single */ 10 | /* Comment.Special */ 11 | /* Generic.Deleted */ 12 | /* Generic.Deleted.Specific */ 13 | /* Generic.Emph */ 14 | /* Generic.Error */ 15 | /* Generic.Heading */ 16 | /* Generic.Inserted */ 17 | /* Generic.Inserted.Specific */ 18 | /* Generic.Output */ 19 | /* Generic.Prompt */ 20 | /* Generic.Strong */ 21 | /* Generic.Subheading */ 22 | /* Generic.Traceback */ 23 | /* Keyword.Constant */ 24 | /* Keyword.Declaration */ 25 | /* Keyword.Pseudo */ 26 | /* Keyword.Reserved */ 27 | /* Keyword.Type */ 28 | /* Literal.Number */ 29 | /* Literal.String */ 30 | /* Name.Attribute */ 31 | /* Name.Builtin */ 32 | /* Name.Class */ 33 | /* Name.Constant */ 34 | /* Name.Entity */ 35 | /* Name.Exception */ 36 | /* Name.Function */ 37 | /* Name.Namespace */ 38 | /* Name.Tag */ 39 | /* Name.Variable */ 40 | /* Operator.Word */ 41 | /* Text.Whitespace */ 42 | /* Literal.Number.Float */ 43 | /* Literal.Number.Hex */ 44 | /* Literal.Number.Integer */ 45 | /* Literal.Number.Oct */ 46 | /* Literal.String.Backtick */ 47 | /* Literal.String.Char */ 48 | /* Literal.String.Doc */ 49 | /* Literal.String.Double */ 50 | /* Literal.String.Escape */ 51 | /* Literal.String.Heredoc */ 52 | /* Literal.String.Interpol */ 53 | /* Literal.String.Other */ 54 | /* Literal.String.Regex */ 55 | /* Literal.String.Single */ 56 | /* Literal.String.Symbol */ 57 | /* Name.Builtin.Pseudo */ 58 | /* Name.Variable.Class */ 59 | /* Name.Variable.Global */ 60 | /* Name.Variable.Instance */ 61 | /* Literal.Number.Integer.Long */ } 62 | .highlight .c { 63 | color: #999988; 64 | font-style: italic; } 65 | .highlight .err { 66 | color: #a61717; 67 | background-color: #e3d2d2; } 68 | .highlight .k { 69 | color: #000000; 70 | font-weight: bold; } 71 | .highlight .o { 72 | color: #000000; 73 | font-weight: bold; } 74 | .highlight .cm { 75 | color: #999988; 76 | font-style: italic; } 77 | .highlight .cp { 78 | color: #999999; 79 | font-weight: bold; } 80 | .highlight .c1 { 81 | color: #999988; 82 | font-style: italic; } 83 | .highlight .cs { 84 | color: #999999; 85 | font-weight: bold; 86 | font-style: italic; } 87 | .highlight .gd { 88 | color: #000000; 89 | background-color: #ffdddd; } 90 | .highlight .gd .x { 91 | color: #000000; 92 | background-color: #ffaaaa; } 93 | .highlight .ge { 94 | color: #000000; 95 | font-style: italic; } 96 | .highlight .gr { 97 | color: #aa0000; } 98 | .highlight .gh { 99 | color: #999999; } 100 | .highlight .gi { 101 | color: #000000; 102 | background-color: #ddffdd; } 103 | .highlight .gi .x { 104 | color: #000000; 105 | background-color: #aaffaa; } 106 | .highlight .go { 107 | color: #888888; } 108 | .highlight .gp { 109 | color: #555555; } 110 | .highlight .gs { 111 | font-weight: bold; } 112 | .highlight .gu { 113 | color: #aaaaaa; } 114 | .highlight .gt { 115 | color: #aa0000; } 116 | .highlight .kc { 117 | color: #000000; 118 | font-weight: bold; } 119 | .highlight .kd { 120 | color: #000000; 121 | font-weight: bold; } 122 | .highlight .kp { 123 | color: #000000; 124 | font-weight: bold; } 125 | .highlight .kr { 126 | color: #000000; 127 | font-weight: bold; } 128 | .highlight .kt { 129 | color: #445588; } 130 | .highlight .m { 131 | color: #009999; } 132 | .highlight .s { 133 | color: #d14; } 134 | .highlight .na { 135 | color: #008080; } 136 | .highlight .nb { 137 | color: #0086B3; } 138 | .highlight .nc { 139 | color: #445588; 140 | font-weight: bold; } 141 | .highlight .no { 142 | color: #008080; } 143 | .highlight .ni { 144 | color: #800080; } 145 | .highlight .ne { 146 | color: #990000; 147 | font-weight: bold; } 148 | .highlight .nf { 149 | color: #990000; } 150 | .highlight .nn { 151 | color: #555555; } 152 | .highlight .nt { 153 | color: #000080; } 154 | .highlight .nv { 155 | color: #008080; } 156 | .highlight .ow { 157 | color: #000000; 158 | font-weight: bold; } 159 | .highlight .w { 160 | color: #bbbbbb; } 161 | .highlight .mf { 162 | color: #009999; } 163 | .highlight .mh { 164 | color: #009999; } 165 | .highlight .mi { 166 | color: #009999; } 167 | .highlight .mo { 168 | color: #009999; } 169 | .highlight .sb { 170 | color: #d14; } 171 | .highlight .sc { 172 | color: #d14; } 173 | .highlight .sd { 174 | color: #d14; } 175 | .highlight .s2 { 176 | color: #d14; } 177 | .highlight .se { 178 | color: #d14; } 179 | .highlight .sh { 180 | color: #d14; } 181 | .highlight .si { 182 | color: #d14; } 183 | .highlight .sx { 184 | color: #d14; } 185 | .highlight .sr { 186 | color: #009926; } 187 | .highlight .s1 { 188 | color: #d14; } 189 | .highlight .ss { 190 | color: #990073; } 191 | .highlight .bp { 192 | color: #999999; } 193 | .highlight .vc { 194 | color: #008080; } 195 | .highlight .vg { 196 | color: #008080; } 197 | .highlight .vi { 198 | color: #008080; } 199 | .highlight .il { 200 | color: #009999; } 201 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/css/jazzy.css: -------------------------------------------------------------------------------- 1 | html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { 2 | background: transparent; 3 | border: 0; 4 | margin: 0; 5 | outline: 0; 6 | padding: 0; 7 | vertical-align: baseline; } 8 | 9 | body { 10 | background-color: #f2f2f2; 11 | font-family: Helvetica, freesans, Arial, sans-serif; 12 | font-size: 14px; 13 | -webkit-font-smoothing: subpixel-antialiased; 14 | word-wrap: break-word; } 15 | 16 | h1, h2, h3 { 17 | margin-top: 0.8em; 18 | margin-bottom: 0.3em; 19 | font-weight: 100; 20 | color: black; } 21 | 22 | h1 { 23 | font-size: 2.5em; } 24 | 25 | h2 { 26 | font-size: 2em; 27 | border-bottom: 1px solid #e2e2e2; } 28 | 29 | h4 { 30 | font-size: 13px; 31 | line-height: 1.5; 32 | margin-top: 21px; } 33 | 34 | h5 { 35 | font-size: 1.1em; } 36 | 37 | h6 { 38 | font-size: 1.1em; 39 | color: #777; } 40 | 41 | .section-name { 42 | color: gray; 43 | display: block; 44 | font-family: Helvetica; 45 | font-size: 22px; 46 | font-weight: 100; 47 | margin-bottom: 15px; } 48 | 49 | pre, code { 50 | font: 0.95em Menlo, monospace; 51 | color: #777; 52 | word-wrap: normal; } 53 | 54 | p code, li code { 55 | background-color: #eee; 56 | padding: 2px 4px; 57 | border-radius: 4px; } 58 | 59 | a { 60 | color: #0088cc; 61 | text-decoration: none; } 62 | 63 | ul { 64 | padding-left: 15px; } 65 | 66 | li { 67 | line-height: 1.8em; } 68 | 69 | img { 70 | max-width: 100%; } 71 | 72 | blockquote { 73 | margin-left: 0; 74 | padding: 0 10px; 75 | border-left: 4px solid #ccc; } 76 | 77 | .content-wrapper { 78 | margin: 0 auto; 79 | width: 980px; } 80 | 81 | header { 82 | font-size: 0.85em; 83 | line-height: 26px; 84 | background-color: #414141; 85 | position: fixed; 86 | width: 100%; 87 | z-index: 2; } 88 | header img { 89 | padding-right: 6px; 90 | vertical-align: -4px; 91 | height: 16px; } 92 | header a { 93 | color: #fff; } 94 | header p { 95 | float: left; 96 | color: #999; } 97 | header .header-right { 98 | float: right; 99 | margin-left: 16px; } 100 | 101 | #breadcrumbs { 102 | background-color: #f2f2f2; 103 | height: 27px; 104 | padding-top: 17px; 105 | position: fixed; 106 | width: 100%; 107 | z-index: 2; 108 | margin-top: 26px; } 109 | #breadcrumbs #carat { 110 | height: 10px; 111 | margin: 0 5px; } 112 | 113 | .sidebar { 114 | background-color: #f9f9f9; 115 | border: 1px solid #e2e2e2; 116 | overflow-y: auto; 117 | overflow-x: hidden; 118 | position: fixed; 119 | top: 70px; 120 | bottom: 0; 121 | width: 230px; 122 | word-wrap: normal; } 123 | 124 | .nav-groups { 125 | list-style-type: none; 126 | background: #fff; 127 | padding-left: 0; } 128 | 129 | .nav-group-name { 130 | border-bottom: 1px solid #e2e2e2; 131 | font-size: 1.1em; 132 | font-weight: 100; 133 | padding: 15px 0 15px 20px; } 134 | .nav-group-name > a { 135 | color: #333; } 136 | 137 | .nav-group-tasks { 138 | margin-top: 5px; } 139 | 140 | .nav-group-task { 141 | font-size: 0.9em; 142 | list-style-type: none; 143 | white-space: nowrap; } 144 | .nav-group-task a { 145 | color: #888; } 146 | 147 | .main-content { 148 | background-color: #fff; 149 | border: 1px solid #e2e2e2; 150 | margin-left: 246px; 151 | position: absolute; 152 | overflow: hidden; 153 | padding-bottom: 20px; 154 | top: 70px; 155 | width: 734px; } 156 | .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { 157 | margin-bottom: 1em; } 158 | .main-content p { 159 | line-height: 1.8em; } 160 | .main-content section .section:first-child { 161 | margin-top: 0; 162 | padding-top: 0; } 163 | .main-content section .task-group-section .task-group:first-of-type { 164 | padding-top: 10px; } 165 | .main-content section .task-group-section .task-group:first-of-type .section-name { 166 | padding-top: 15px; } 167 | .main-content section .heading:before { 168 | content: ""; 169 | display: block; 170 | padding-top: 70px; 171 | margin: -70px 0 0; } 172 | .main-content .section-name p { 173 | margin-bottom: inherit; 174 | line-height: inherit; } 175 | .main-content .section-name code { 176 | background-color: inherit; 177 | padding: inherit; 178 | color: inherit; } 179 | 180 | .section { 181 | padding: 0 25px; } 182 | 183 | .highlight { 184 | background-color: #eee; 185 | padding: 10px 12px; 186 | border: 1px solid #e2e2e2; 187 | border-radius: 4px; 188 | overflow-x: auto; } 189 | 190 | .declaration .highlight { 191 | overflow-x: initial; 192 | padding: 0 40px 40px 0; 193 | margin-bottom: -25px; 194 | background-color: transparent; 195 | border: none; } 196 | 197 | .section-name { 198 | margin: 0; 199 | margin-left: 18px; } 200 | 201 | .task-group-section { 202 | padding-left: 6px; 203 | border-top: 1px solid #e2e2e2; } 204 | 205 | .task-group { 206 | padding-top: 0px; } 207 | 208 | .task-name-container a[name]:before { 209 | content: ""; 210 | display: block; 211 | padding-top: 70px; 212 | margin: -70px 0 0; } 213 | 214 | .section-name-container { 215 | position: relative; 216 | display: inline-block; } 217 | .section-name-container .section-name-link { 218 | position: absolute; 219 | top: 0; 220 | left: 0; 221 | bottom: 0; 222 | right: 0; 223 | margin-bottom: 0; } 224 | .section-name-container .section-name { 225 | position: relative; 226 | pointer-events: none; 227 | z-index: 1; } 228 | .section-name-container .section-name a { 229 | pointer-events: auto; } 230 | 231 | .item { 232 | padding-top: 8px; 233 | width: 100%; 234 | list-style-type: none; } 235 | .item a[name]:before { 236 | content: ""; 237 | display: block; 238 | padding-top: 70px; 239 | margin: -70px 0 0; } 240 | .item code { 241 | background-color: transparent; 242 | padding: 0; } 243 | .item .token, .item .direct-link { 244 | padding-left: 3px; 245 | margin-left: 15px; 246 | font-size: 11.9px; 247 | transition: all 300ms; } 248 | .item .token-open { 249 | margin-left: 0px; } 250 | .item .discouraged { 251 | text-decoration: line-through; } 252 | .item .declaration-note { 253 | font-size: .85em; 254 | color: gray; 255 | font-style: italic; } 256 | 257 | .pointer-container { 258 | border-bottom: 1px solid #e2e2e2; 259 | left: -23px; 260 | padding-bottom: 13px; 261 | position: relative; 262 | width: 110%; } 263 | 264 | .pointer { 265 | background: #f9f9f9; 266 | border-left: 1px solid #e2e2e2; 267 | border-top: 1px solid #e2e2e2; 268 | height: 12px; 269 | left: 21px; 270 | top: -7px; 271 | -webkit-transform: rotate(45deg); 272 | -moz-transform: rotate(45deg); 273 | -o-transform: rotate(45deg); 274 | transform: rotate(45deg); 275 | position: absolute; 276 | width: 12px; } 277 | 278 | .height-container { 279 | display: none; 280 | left: -25px; 281 | padding: 0 25px; 282 | position: relative; 283 | width: 100%; 284 | overflow: hidden; } 285 | .height-container .section { 286 | background: #f9f9f9; 287 | border-bottom: 1px solid #e2e2e2; 288 | left: -25px; 289 | position: relative; 290 | width: 100%; 291 | padding-top: 10px; 292 | padding-bottom: 5px; } 293 | 294 | .aside, .language { 295 | padding: 6px 12px; 296 | margin: 12px 0; 297 | border-left: 5px solid #dddddd; 298 | overflow-y: hidden; } 299 | .aside .aside-title, .language .aside-title { 300 | font-size: 9px; 301 | letter-spacing: 2px; 302 | text-transform: uppercase; 303 | padding-bottom: 0; 304 | margin: 0; 305 | color: #aaa; 306 | -webkit-user-select: none; } 307 | .aside p:last-child, .language p:last-child { 308 | margin-bottom: 0; } 309 | 310 | .language { 311 | border-left: 5px solid #cde9f4; } 312 | .language .aside-title { 313 | color: #4b8afb; } 314 | 315 | .aside-warning, .aside-deprecated, .aside-unavailable { 316 | border-left: 5px solid #ff6666; } 317 | .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { 318 | color: #ff0000; } 319 | 320 | .graybox { 321 | border-collapse: collapse; 322 | width: 100%; } 323 | .graybox p { 324 | margin: 0; 325 | word-break: break-word; 326 | min-width: 50px; } 327 | .graybox td { 328 | border: 1px solid #e2e2e2; 329 | padding: 5px 25px 5px 10px; 330 | vertical-align: middle; } 331 | .graybox tr td:first-of-type { 332 | text-align: right; 333 | padding: 7px; 334 | vertical-align: top; 335 | word-break: normal; 336 | width: 40px; } 337 | 338 | .slightly-smaller { 339 | font-size: 0.9em; } 340 | 341 | #footer { 342 | position: relative; 343 | top: 10px; 344 | bottom: 0px; 345 | margin-left: 25px; } 346 | #footer p { 347 | margin: 0; 348 | color: #aaa; 349 | font-size: 0.8em; } 350 | 351 | html.dash header, html.dash #breadcrumbs, html.dash .sidebar { 352 | display: none; } 353 | 354 | html.dash .main-content { 355 | width: 980px; 356 | margin-left: 0; 357 | border: none; 358 | width: 100%; 359 | top: 0; 360 | padding-bottom: 0; } 361 | 362 | html.dash .height-container { 363 | display: block; } 364 | 365 | html.dash .item .token { 366 | margin-left: 0; } 367 | 368 | html.dash .content-wrapper { 369 | width: auto; } 370 | 371 | html.dash #footer { 372 | position: static; } 373 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/Documents/search.json: -------------------------------------------------------------------------------- 1 | {"Typealiases.html#/s:11ToosieSlide9CellIndexa":{"name":"CellIndex","abstract":"

A type alias to simulate the idea of a cell index.

"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_19shouldDisplayCellAtSbSo0cD0C_SitF":{"name":"collectionView(_:shouldDisplayCellAt:)","abstract":"

Asks the delegate if the cell at a given CellIndex should been shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_17willDisplayCellAtySo0cD0C_SitF":{"name":"collectionView(_:willDisplayCellAt:)","abstract":"

Tells the delegate that the cell at a given CellIndex will be shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html":{"name":"UICollectionViewDelegateCarouselLayout","abstract":"

The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed."},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE5frame010collectionB14CarouselLayoutABSo6CGRectV_AC0abgH0Ctcfc":{"name":"init(frame:collectionViewCarouselLayout:)","abstract":"

A convenient initializer to instantiate a UICollectionView and configure it with a UICollectionViewCarouselLayout","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE18carouselFlowLayoutAC0ab8CarouselG0Cvp":{"name":"carouselFlowLayout","abstract":"

Returns an instance of collectionViewLayout down casted to CarouselCollectionViewFlowLayout.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE12scrollToCell2at8animatedySi_SbtF":{"name":"scrollToCell(at:animated:)","abstract":"

Scrolls the CollectionView to a given cell index.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE11cellForItem2atSo0aB4CellCSgSi_tF":{"name":"cellForItem(at:)","abstract":"

Returns the visible cell object at the specified CellIndex.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html":{"name":"UICollectionView"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25lowestVelocitySensitivity12CoreGraphics7CGFloatVvp":{"name":"lowestVelocitySensitivity","abstract":"

The lowest absolute velocity that should invoke a change of cells.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC23currentVisibleCellIndexSivp":{"name":"currentVisibleCellIndex","abstract":"

The cell currently being displayed for the user.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC22focusedItemScaleFactor12CoreGraphics7CGFloatVvp":{"name":"focusedItemScaleFactor","abstract":"

The scale factor to apply to the focused cell’ size. Defaults to 1.0.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC21focusedItemAlphaValue12CoreGraphics7CGFloatVvp":{"name":"focusedItemAlphaValue","abstract":"

The alpha value of the lone focused cell. This defaults to 1.0.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC26nonFocusedItemsScaleFactor12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsScaleFactor","abstract":"

The scale factor to apply to the non focused cells’ size. Defaults to 0.8.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25nonFocusedItemsAlphaValue12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsAlphaValue","abstract":"

The alpha value of the non focused cells. This defaults to 0.5.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC13currentOffset12CoreGraphics7CGFloatVvp":{"name":"currentOffset","abstract":"

The current content offset of the visible cell from the section inset..

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)itemSize":{"name":"itemSize","abstract":"

The CGSize of the single item inside the cell.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)scrollDirection":{"name":"scrollDirection","abstract":"

The UICollectionView.ScrollDirection of the collection.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)init":{"name":"init()","abstract":"

Initializes the flow layout with a .horizontal scroll direction.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC8itemSizeACSo6CGSizeV_tcfc":{"name":"init(itemSize:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction, and sets the itemSize of the single element.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction using the NSCoder.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"

Invalidates the current layout and triggers a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"

Returns the layout attributes for all of the cells and views in the specified rectangle.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"

Asks the layout object if the new bounds require a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)prepareLayout":{"name":"prepare()","abstract":"

Updates the current layout if collection view size have changed.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)targetContentOffsetForProposedContentOffset:withScrollingVelocity:":{"name":"targetContentOffset(forProposedContentOffset:withScrollingVelocity:)","abstract":"

Returns the point at which to stop scrolling.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html":{"name":"UICollectionViewCarouselLayout","abstract":"

A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection."},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/docsets/ToosieSlide.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/1.1.x/docsets/ToosieSlide.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/docsets/ToosieSlide.tgz -------------------------------------------------------------------------------- /docs/1.1.x/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/img/carat.png -------------------------------------------------------------------------------- /docs/1.1.x/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/img/dash.png -------------------------------------------------------------------------------- /docs/1.1.x/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheInkedEngineer/ToosieSlide/d1413d25d0ebb315291ada18e17c088e156b30cf/docs/1.1.x/img/gh.png -------------------------------------------------------------------------------- /docs/1.1.x/js/jazzy.js: -------------------------------------------------------------------------------- 1 | window.jazzy = {'docset': false} 2 | if (typeof window.dash != 'undefined') { 3 | document.documentElement.className += ' dash' 4 | window.jazzy.docset = true 5 | } 6 | if (navigator.userAgent.match(/xcode/i)) { 7 | document.documentElement.className += ' xcode' 8 | window.jazzy.docset = true 9 | } 10 | 11 | function toggleItem($link, $content) { 12 | var animationDuration = 300; 13 | $link.toggleClass('token-open'); 14 | $content.slideToggle(animationDuration); 15 | } 16 | 17 | function itemLinkToContent($link) { 18 | return $link.parent().parent().next(); 19 | } 20 | 21 | // On doc load + hash-change, open any targetted item 22 | function openCurrentItemIfClosed() { 23 | if (window.jazzy.docset) { 24 | return; 25 | } 26 | var $link = $(`.token[href="${location.hash}"]`); 27 | $content = itemLinkToContent($link); 28 | if ($content.is(':hidden')) { 29 | toggleItem($link, $content); 30 | } 31 | } 32 | 33 | $(openCurrentItemIfClosed); 34 | $(window).on('hashchange', openCurrentItemIfClosed); 35 | 36 | // On item link ('token') click, toggle its discussion 37 | $('.token').on('click', function(event) { 38 | if (window.jazzy.docset) { 39 | return; 40 | } 41 | var $link = $(this); 42 | toggleItem($link, itemLinkToContent($link)); 43 | 44 | // Keeps the document from jumping to the hash. 45 | var href = $link.attr('href'); 46 | if (history.pushState) { 47 | history.pushState({}, '', href); 48 | } else { 49 | location.hash = href; 50 | } 51 | event.preventDefault(); 52 | }); 53 | 54 | // Clicks on links to the current, closed, item need to open the item 55 | $("a:not('.token')").on('click', function() { 56 | if (location == this.href) { 57 | openCurrentItemIfClosed(); 58 | } 59 | }); 60 | -------------------------------------------------------------------------------- /docs/1.1.x/search.json: -------------------------------------------------------------------------------- 1 | {"Typealiases.html#/s:11ToosieSlide9CellIndexa":{"name":"CellIndex","abstract":"

A type alias to simulate the idea of a cell index.

"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_19shouldDisplayCellAtSbSo0cD0C_SitF":{"name":"collectionView(_:shouldDisplayCellAt:)","abstract":"

Asks the delegate if the cell at a given CellIndex should been shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html#/s:11ToosieSlide38UICollectionViewDelegateCarouselLayoutP010collectionD0_17willDisplayCellAtySo0cD0C_SitF":{"name":"collectionView(_:willDisplayCellAt:)","abstract":"

Tells the delegate that the cell at a given CellIndex will be shown on screen.

","parent_name":"UICollectionViewDelegateCarouselLayout"},"Protocols/UICollectionViewDelegateCarouselLayout.html":{"name":"UICollectionViewDelegateCarouselLayout","abstract":"

The `UICollectionViewDelegateFlowLayout protocol defines methods that lets you know when and what cell will and is currently being displayed."},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE5frame010collectionB14CarouselLayoutABSo6CGRectV_AC0abgH0Ctcfc":{"name":"init(frame:collectionViewCarouselLayout:)","abstract":"

A convenient initializer to instantiate a UICollectionView and configure it with a UICollectionViewCarouselLayout","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE18carouselFlowLayoutAC0ab8CarouselG0Cvp":{"name":"carouselFlowLayout","abstract":"

Returns an instance of collectionViewLayout down casted to CarouselCollectionViewFlowLayout.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE12scrollToCell2at8animatedySi_SbtF":{"name":"scrollToCell(at:animated:)","abstract":"

Scrolls the CollectionView to a given cell index.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html#/s:So16UICollectionViewC11ToosieSlideE11cellForItem2atSo0aB4CellCSgSi_tF":{"name":"cellForItem(at:)","abstract":"

Returns the visible cell object at the specified CellIndex.

","parent_name":"UICollectionView"},"Extensions/UICollectionView.html":{"name":"UICollectionView"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25lowestVelocitySensitivity12CoreGraphics7CGFloatVvp":{"name":"lowestVelocitySensitivity","abstract":"

The lowest absolute velocity that should invoke a change of cells.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC23currentVisibleCellIndexSivp":{"name":"currentVisibleCellIndex","abstract":"

The cell currently being displayed for the user.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC22focusedItemScaleFactor12CoreGraphics7CGFloatVvp":{"name":"focusedItemScaleFactor","abstract":"

The scale factor to apply to the focused cell’ size. Defaults to 1.0.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC21focusedItemAlphaValue12CoreGraphics7CGFloatVvp":{"name":"focusedItemAlphaValue","abstract":"

The alpha value of the lone focused cell. This defaults to 1.0.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC26nonFocusedItemsScaleFactor12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsScaleFactor","abstract":"

The scale factor to apply to the non focused cells’ size. Defaults to 0.8.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC25nonFocusedItemsAlphaValue12CoreGraphics7CGFloatVvp":{"name":"nonFocusedItemsAlphaValue","abstract":"

The alpha value of the non focused cells. This defaults to 0.5.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC13currentOffset12CoreGraphics7CGFloatVvp":{"name":"currentOffset","abstract":"

The current content offset of the visible cell from the section inset..

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)itemSize":{"name":"itemSize","abstract":"

The CGSize of the single item inside the cell.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(py)scrollDirection":{"name":"scrollDirection","abstract":"

The UICollectionView.ScrollDirection of the collection.","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)init":{"name":"init()","abstract":"

Initializes the flow layout with a .horizontal scroll direction.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/s:11ToosieSlide30UICollectionViewCarouselLayoutC8itemSizeACSo6CGSizeV_tcfc":{"name":"init(itemSize:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction, and sets the itemSize of the single element.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)initWithCoder:":{"name":"init(coder:)","abstract":"

Initializes the flow layout with a .horizontal scroll direction using the NSCoder.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)invalidateLayout":{"name":"invalidateLayout()","abstract":"

Invalidates the current layout and triggers a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)layoutAttributesForElementsInRect:":{"name":"layoutAttributesForElements(in:)","abstract":"

Returns the layout attributes for all of the cells and views in the specified rectangle.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)shouldInvalidateLayoutForBoundsChange:":{"name":"shouldInvalidateLayout(forBoundsChange:)","abstract":"

Asks the layout object if the new bounds require a layout update.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)prepareLayout":{"name":"prepare()","abstract":"

Updates the current layout if collection view size have changed.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html#/c:@M@ToosieSlide@objc(cs)UICollectionViewCarouselLayout(im)targetContentOffsetForProposedContentOffset:withScrollingVelocity:":{"name":"targetContentOffset(forProposedContentOffset:withScrollingVelocity:)","abstract":"

Returns the point at which to stop scrolling.

","parent_name":"UICollectionViewCarouselLayout"},"Classes/UICollectionViewCarouselLayout.html":{"name":"UICollectionViewCarouselLayout","abstract":"

A Custom UICollectionViewFlowLayout that simulates a carousel. That is a paginated collection view, with the focused item only in the center of the collection."},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Protocols.html":{"name":"Protocols","abstract":"

The following protocols are available globally.

"},"Typealiases.html":{"name":"Type Aliases","abstract":"

The following type aliases are available globally.

"}} -------------------------------------------------------------------------------- /docs/1.1.x/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/TheInkedEngineer/Code/TheInkedEngineer/ToosieSlide" 6 | } -------------------------------------------------------------------------------- /project.yml: -------------------------------------------------------------------------------- 1 | name: ToosieSlide 2 | 3 | options: 4 | minimumXcodeGenVersion: "2.11.0" 5 | indentWidth: 2 6 | tabWidth: 2 7 | deploymentTarget: 8 | iOS: "10.0" 9 | generateEmptyDirectories: true 10 | 11 | targets: 12 | ToosieSlide: 13 | type: framework 14 | platform: iOS 15 | attributes: 16 | ProvisioningStyle: Automatic 17 | sources: [Sources] 18 | info: 19 | path: Sources/Resources/Info.plist 20 | properties: 21 | CFBundleIdentifier: "$(PRODUCT_BUNDLE_IDENTIFIER)" 22 | CFBundleInfoDictionaryVersion: "6.0" 23 | CFBundleExecutable: "$(EXECUTABLE_NAME)" 24 | CFBundleName: "$(PRODUCT_NAME)" 25 | CFBundleDevelopmentRegion: "$(DEVELOPMENT_LANGUAGE)" 26 | CFBundleShortVersionString: "1.0.0" 27 | CFBundleVersion: "$(CURRENT_PROJECT_VERSION)" 28 | CFBundlePackageType: "FMWK" 29 | settings: 30 | TARGETED_DEVICE_FAMILY: 1 31 | PRODUCT_BUNDLE_IDENTIFIER: "com.theinkedengineer.toosieSlide" 32 | 33 | ToosieSlideDemo: 34 | type: application 35 | platform: iOS 36 | attributes: 37 | ProvisioningStyle: Automatic 38 | sources: [Demo] 39 | dependencies: 40 | - target: ToosieSlide 41 | info: 42 | path: Demo/Resources/Info.plist 43 | properties: 44 | CFBundleName: "ToosieSlideDemo" 45 | CFBundleDisplayName: "Toosie Slide" 46 | CFBundleIdentifier: "$(PRODUCT_BUNDLE_IDENTIFIER)" 47 | CFBundleInfoDictionaryVersion: "6.0" 48 | CFBundleExecutable: "$(EXECUTABLE_NAME)" 49 | CFBundleDevelopmentRegion: "$(DEVELOPMENT_LANGUAGE)" 50 | CFBundleShortVersionString: "1.0.0" 51 | CFBundleVersion: "1.0.0" 52 | CFBundlePackageType: "APPL" 53 | LSRequiresIPhoneOS: true 54 | UIRequiredDeviceCapabilities: ["armv7"] 55 | UISupportedInterfaceOrientations: ["UIInterfaceOrientationPortrait"] 56 | UILaunchStoryboardName: "LaunchScreen.storyboard" 57 | settings: 58 | TARGETED_DEVICE_FAMILY: 1 59 | PRODUCT_BUNDLE_IDENTIFIER: "com.theinkedengineer.toosieSlideDemo" 60 | -------------------------------------------------------------------------------- /setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | # Install Homebrew dependency manager 5 | if ! [[ -x "$(command -v brew)" ]]; then 6 | echo 'Homebrew is not installed.' >&2 7 | 8 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 9 | fi 10 | 11 | # Install XcodeGen to generate the xcodeproj. 12 | if ! [[ -x "$(command -v xcodegen)" ]]; then 13 | echo 'XcodeGen is not installed.' >&2 14 | 15 | brew install xcodegen 16 | fi 17 | 18 | # remove present .xcodeproj 19 | rm -rf ToosieSlide.xcodeproj 20 | 21 | # run xcodegen to generate new file 22 | xcodegen 23 | 24 | # move config files to right place 25 | cp Configurations/IDETemplateMacros.plist ToosieSlide.xcodeproj/xcshareddata/IDETemplateMacros.plist 26 | 27 | # if argument "open" passed, open the project 28 | if [[ $1 == "open" ]]; then 29 | open ToosieSlide.xcodeproj 30 | fi 31 | --------------------------------------------------------------------------------