├── .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 |
3 |
4 |
5 | 
6 | [](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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Classes Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Classes
69 | The following classes are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Extensions Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Extensions
69 | The following extensions are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
83 |
84 |
85 |
86 |
87 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Protocols Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Protocols
69 | The following protocols are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Type Aliases Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Type Aliases
69 | The following type aliases are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Classes Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Classes
69 | The following classes are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Extensions Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Extensions
69 | The following extensions are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
83 |
84 |
85 |
86 |
87 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Protocols Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Protocols
69 | The following protocols are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Type Aliases Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Type Aliases
69 | The following type aliases are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Classes Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Classes
69 | The following classes are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Extensions Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Extensions
69 | The following extensions are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
83 |
84 |
85 |
86 |
87 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Protocols Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Protocols
69 | The following protocols are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Type Aliases Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Type Aliases
69 | The following type aliases are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Classes Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Classes
69 | The following classes are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Extensions Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Extensions
69 | The following extensions are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
83 |
84 |
85 |
86 |
87 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Protocols Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Protocols
69 | The following protocols are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
21 |
22 |
23 | ToosieSlide Reference
24 |
25 | Type Aliases Reference
26 |
27 |
28 |
29 |
65 |
66 |
67 |
68 | Type Aliases
69 | The following type aliases are available globally.
70 |
71 |
72 |
73 |
74 |
75 |
76 |
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 |
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 |
--------------------------------------------------------------------------------