├── .gitignore
├── Cards
├── Cards.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Cards
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── image1.imageset
│ │ │ ├── Contents.json
│ │ │ └── iamge1.jpg
│ │ ├── image2.imageset
│ │ │ ├── Contents.json
│ │ │ └── image2.jpg
│ │ ├── image3.imageset
│ │ │ ├── Contents.json
│ │ │ └── image3.jpg
│ │ ├── image4.imageset
│ │ │ ├── Contents.json
│ │ │ └── image4.jpg
│ │ └── image5.imageset
│ │ │ ├── Contents.json
│ │ │ └── image5.jpg
│ ├── BannerCell
│ │ └── BannerViewCell.swift
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── CardCell
│ │ ├── CardACell.swift
│ │ ├── CardACell.xib
│ │ ├── CardBCell.swift
│ │ ├── CardBCell.xib
│ │ ├── CardCCell.swift
│ │ ├── CardCCell.xib
│ │ └── CardDCell.swift
│ ├── Info.plist
│ ├── MCardView
│ │ ├── CardLayout
│ │ │ ├── CardCell.swift
│ │ │ ├── CustomCardLayout.swift
│ │ │ └── CustomFlipTransition.swift
│ │ ├── CollectionViewCalculate.swift
│ │ ├── Extension
│ │ │ ├── UIView+Shadow.swift
│ │ │ └── UIviewController+Current.swift
│ │ └── MMCardCollectionView.swift
│ ├── SceneDelegate.swift
│ └── ViewController.swift
├── CardsTests
│ ├── CardsTests.swift
│ └── Info.plist
└── CardsUITests
│ ├── CardsUITests.swift
│ └── Info.plist
├── Drag
└── DragAndDrop-CollectionView
│ ├── DragAndDropInCollectionView.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
│ ├── DragAndDropInCollectionView
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── chrome.imageset
│ │ │ ├── Contents.json
│ │ │ └── chrome.png
│ │ ├── fade.imageset
│ │ │ ├── Contents.json
│ │ │ └── fade.png
│ │ ├── falseColor.imageset
│ │ │ ├── Contents.json
│ │ │ └── falseColor.png
│ │ ├── instant.imageset
│ │ │ ├── Contents.json
│ │ │ └── instant.png
│ │ ├── mono.imageset
│ │ │ ├── Contents.json
│ │ │ └── mono.png
│ │ ├── noir.imageset
│ │ │ ├── Contents.json
│ │ │ └── noir.png
│ │ ├── none.imageset
│ │ │ ├── Contents.json
│ │ │ └── none.png
│ │ ├── pin.imageset
│ │ │ ├── Contents.json
│ │ │ └── thumbtack-pushpin-2-hi.png
│ │ ├── process.imageset
│ │ │ ├── Contents.json
│ │ │ └── process.png
│ │ ├── sepia.imageset
│ │ │ ├── Contents.json
│ │ │ └── sepia.png
│ │ ├── texture.imageset
│ │ │ ├── Contents.json
│ │ │ └── grunge-texture-abstract-hd-wallpaper-2560x1440-8066.png
│ │ ├── tonal.imageset
│ │ │ ├── Contents.json
│ │ │ └── tonal.png
│ │ └── transfer.imageset
│ │ │ ├── Contents.json
│ │ │ └── transfer.png
│ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ ├── DragDropCollectionViewCell.swift
│ ├── DragDropViewController.swift
│ ├── EntryCtrl.swift
│ ├── Info.plist
│ └── Second
│ │ ├── Cells
│ │ ├── CollectionViewCell.swift
│ │ └── SupplementaryView.swift
│ │ └── SecondController.swift
│ └── DragDrop.gif
├── LICENSE
├── Parallax
├── JungleCup.xcodeproj
│ ├── project.pbxproj
│ └── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── JungleCup
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── icon-app-20@2x.png
│ │ ├── icon-app-20@3x.png
│ │ ├── icon-app-29@2x.png
│ │ ├── icon-app-29@3x copy.png
│ │ ├── icon-app-40@2x.png
│ │ ├── icon-app-40@3x.png
│ │ ├── icon-app-60@2x.png
│ │ └── icon-app-60@3x.png
│ ├── Contents.json
│ ├── giraffes
│ │ ├── Contents.json
│ │ ├── Giraffes-d1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-d1.jpg
│ │ ├── Giraffes-d2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-d2.jpg
│ │ ├── Giraffes-d3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-d3.jpg
│ │ ├── Giraffes-d4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-d4.jpg
│ │ ├── Giraffes-f1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-f1.jpg
│ │ ├── Giraffes-f2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-f2.jpg
│ │ ├── Giraffes-goalkeeper.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-goalkeeper.jpg
│ │ ├── Giraffes-m1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-m1.jpg
│ │ ├── Giraffes-m2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-m2.jpg
│ │ ├── Giraffes-m3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-m3.jpg
│ │ └── Giraffes-m4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Giraffes-m4.jpg
│ ├── header.imageset
│ │ ├── Contents.json
│ │ └── header.jpg
│ ├── owls
│ │ ├── Contents.json
│ │ ├── Owls-d1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-d1.jpg
│ │ ├── Owls-d2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-d2.jpg
│ │ ├── Owls-d3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-d3.jpg
│ │ ├── Owls-d4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-d4.jpg
│ │ ├── Owls-f1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-f1.jpg
│ │ ├── Owls-f2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-f2.jpg
│ │ ├── Owls-goalkeeper.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-goalkeeper.jpg
│ │ ├── Owls-m1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-m1.jpg
│ │ ├── Owls-m2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-m2.jpg
│ │ ├── Owls-m3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-m3.jpg
│ │ └── Owls-m4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Owls-m4.jpg
│ ├── parrots
│ │ ├── Contents.json
│ │ ├── Parrots-d1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-d1.png
│ │ ├── Parrots-d2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-d2.jpg
│ │ ├── Parrots-d3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-d3.jpg
│ │ ├── Parrots-d4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-d4.jpg
│ │ ├── Parrots-f1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-f1.jpg
│ │ ├── Parrots-f2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-f2.png
│ │ ├── Parrots-goalkeeper.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-goalkeeper.jpg
│ │ ├── Parrots-m1.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-m1.jpg
│ │ ├── Parrots-m2.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-m2.jpg
│ │ ├── Parrots-m3.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-m3.jpg
│ │ └── Parrots-m4.imageset
│ │ │ ├── Contents.json
│ │ │ └── Parrots-m4.jpg
│ ├── rw-logo.imageset
│ │ ├── Contents.json
│ │ └── Razewarelogo_1024.png
│ ├── rwdevcon-bg.imageset
│ │ ├── Contents.json
│ │ └── rwdevcon-bg.png
│ └── tigers
│ │ ├── Contents.json
│ │ ├── Tigers-d1.imageset
│ │ ├── Contents.json
│ │ └── Tigers-d1.jpg
│ │ ├── Tigers-d2.imageset
│ │ ├── Contents.json
│ │ └── Tigers-d2.jpg
│ │ ├── Tigers-d3.imageset
│ │ ├── Contents.json
│ │ └── Tigers-d3.jpg
│ │ ├── Tigers-d4.imageset
│ │ ├── Contents.json
│ │ └── Tigers-d4.jpg
│ │ ├── Tigers-f1.imageset
│ │ ├── Contents.json
│ │ └── Tigers-f1.jpg
│ │ ├── Tigers-f2.imageset
│ │ ├── Contents.json
│ │ └── Tigers-f2.jpg
│ │ ├── Tigers-goalkeeper.imageset
│ │ ├── Contents.json
│ │ └── Tigers-goalkeeper.jpg
│ │ ├── Tigers-m1.imageset
│ │ ├── Contents.json
│ │ └── Tigers-m1.jpg
│ │ ├── Tigers-m2.imageset
│ │ ├── Contents.json
│ │ └── Tigers-m2.jpg
│ │ ├── Tigers-m3.imageset
│ │ ├── Contents.json
│ │ └── Tigers-m3.jpg
│ │ └── Tigers-m4.imageset
│ │ ├── Contents.json
│ │ └── Tigers-m4.jpg
│ ├── Base.lproj
│ └── Main.storyboard
│ ├── Info.plist
│ ├── LaunchScreen.xib
│ └── Sources
│ ├── AppDelegate.swift
│ ├── Custom Layout
│ ├── CustomLayout.swift
│ ├── CustomLayoutAttributes.swift
│ └── CustomLayoutSettings.swift
│ ├── Mock Data
│ └── MockDataManager.swift
│ ├── Reusable Views
│ ├── Cell
│ │ └── PlayerCell.swift
│ ├── Header View
│ │ ├── HeaderView.swift
│ │ └── HeaderView.xib
│ ├── Menu View
│ │ ├── MenuView.swift
│ │ └── MenuView.xib
│ ├── Section Footer View
│ │ └── SectionFooterView.swift
│ └── Section Header View
│ │ └── SectionHeaderView.swift
│ └── View Controllers
│ └── JungleCupCollectionViewController.swift
├── README.md
├── Src
├── 1111.gif
├── _wwwweee.png
├── aaa.gif
└── custom-layout-parallax-gif-final.gif
└── easyStick
├── JungleCup.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── JungleCup
├── Assets.xcassets
├── AppIcon.appiconset
│ ├── Contents.json
│ ├── icon-app-20@2x.png
│ ├── icon-app-20@3x.png
│ ├── icon-app-29@2x.png
│ ├── icon-app-29@3x copy.png
│ ├── icon-app-40@2x.png
│ ├── icon-app-40@3x.png
│ ├── icon-app-60@2x.png
│ └── icon-app-60@3x.png
├── Contents.json
├── giraffes
│ ├── Contents.json
│ ├── Giraffes-d1.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-d1.jpg
│ ├── Giraffes-d2.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-d2.jpg
│ ├── Giraffes-d3.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-d3.jpg
│ ├── Giraffes-d4.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-d4.jpg
│ ├── Giraffes-f1.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-f1.jpg
│ ├── Giraffes-f2.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-f2.jpg
│ ├── Giraffes-goalkeeper.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-goalkeeper.jpg
│ ├── Giraffes-m1.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-m1.jpg
│ ├── Giraffes-m2.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-m2.jpg
│ ├── Giraffes-m3.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-m3.jpg
│ └── Giraffes-m4.imageset
│ │ ├── Contents.json
│ │ └── Giraffes-m4.jpg
├── header.imageset
│ ├── Contents.json
│ └── header.jpg
├── owls
│ ├── Contents.json
│ ├── Owls-d1.imageset
│ │ ├── Contents.json
│ │ └── Owls-d1.jpg
│ ├── Owls-d2.imageset
│ │ ├── Contents.json
│ │ └── Owls-d2.jpg
│ ├── Owls-d3.imageset
│ │ ├── Contents.json
│ │ └── Owls-d3.jpg
│ ├── Owls-d4.imageset
│ │ ├── Contents.json
│ │ └── Owls-d4.jpg
│ ├── Owls-f1.imageset
│ │ ├── Contents.json
│ │ └── Owls-f1.jpg
│ ├── Owls-f2.imageset
│ │ ├── Contents.json
│ │ └── Owls-f2.jpg
│ ├── Owls-goalkeeper.imageset
│ │ ├── Contents.json
│ │ └── Owls-goalkeeper.jpg
│ ├── Owls-m1.imageset
│ │ ├── Contents.json
│ │ └── Owls-m1.jpg
│ ├── Owls-m2.imageset
│ │ ├── Contents.json
│ │ └── Owls-m2.jpg
│ ├── Owls-m3.imageset
│ │ ├── Contents.json
│ │ └── Owls-m3.jpg
│ └── Owls-m4.imageset
│ │ ├── Contents.json
│ │ └── Owls-m4.jpg
├── parrots
│ ├── Contents.json
│ ├── Parrots-d1.imageset
│ │ ├── Contents.json
│ │ └── Parrots-d1.png
│ ├── Parrots-d2.imageset
│ │ ├── Contents.json
│ │ └── Parrots-d2.jpg
│ ├── Parrots-d3.imageset
│ │ ├── Contents.json
│ │ └── Parrots-d3.jpg
│ ├── Parrots-d4.imageset
│ │ ├── Contents.json
│ │ └── Parrots-d4.jpg
│ ├── Parrots-f1.imageset
│ │ ├── Contents.json
│ │ └── Parrots-f1.jpg
│ ├── Parrots-f2.imageset
│ │ ├── Contents.json
│ │ └── Parrots-f2.png
│ ├── Parrots-goalkeeper.imageset
│ │ ├── Contents.json
│ │ └── Parrots-goalkeeper.jpg
│ ├── Parrots-m1.imageset
│ │ ├── Contents.json
│ │ └── Parrots-m1.jpg
│ ├── Parrots-m2.imageset
│ │ ├── Contents.json
│ │ └── Parrots-m2.jpg
│ ├── Parrots-m3.imageset
│ │ ├── Contents.json
│ │ └── Parrots-m3.jpg
│ └── Parrots-m4.imageset
│ │ ├── Contents.json
│ │ └── Parrots-m4.jpg
├── rw-logo.imageset
│ ├── Contents.json
│ └── Razewarelogo_1024.png
├── rwdevcon-bg.imageset
│ ├── Contents.json
│ └── rwdevcon-bg.png
└── tigers
│ ├── Contents.json
│ ├── Tigers-d1.imageset
│ ├── Contents.json
│ └── Tigers-d1.jpg
│ ├── Tigers-d2.imageset
│ ├── Contents.json
│ └── Tigers-d2.jpg
│ ├── Tigers-d3.imageset
│ ├── Contents.json
│ └── Tigers-d3.jpg
│ ├── Tigers-d4.imageset
│ ├── Contents.json
│ └── Tigers-d4.jpg
│ ├── Tigers-f1.imageset
│ ├── Contents.json
│ └── Tigers-f1.jpg
│ ├── Tigers-f2.imageset
│ ├── Contents.json
│ └── Tigers-f2.jpg
│ ├── Tigers-goalkeeper.imageset
│ ├── Contents.json
│ └── Tigers-goalkeeper.jpg
│ ├── Tigers-m1.imageset
│ ├── Contents.json
│ └── Tigers-m1.jpg
│ ├── Tigers-m2.imageset
│ ├── Contents.json
│ └── Tigers-m2.jpg
│ ├── Tigers-m3.imageset
│ ├── Contents.json
│ └── Tigers-m3.jpg
│ └── Tigers-m4.imageset
│ ├── Contents.json
│ └── Tigers-m4.jpg
├── Base.lproj
└── Main.storyboard
├── Info.plist
├── LaunchScreen.xib
└── Sources
├── AppDelegate.swift
├── Custom Layout
├── CustomLayout.swift
├── CustomLayoutAttributes.swift
└── CustomLayoutSettings.swift
├── Mock Data
└── MockDataManager.swift
├── Reusable Views
├── Cell
│ └── PlayerCell.swift
├── Header View
│ ├── HeaderView.swift
│ └── HeaderView.xib
├── Menu View
│ ├── MenuView.swift
│ └── MenuView.xib
└── Section Header View
│ └── SectionHeaderView.swift
└── View Controllers
└── JungleCupCollectionViewController.swift
/.gitignore:
--------------------------------------------------------------------------------
1 | # OS X
2 | .DS_Store
3 |
4 | # Xcode
5 | build/
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 | *.xccheckout
16 | profile
17 | *.moved-aside
18 | DerivedData
19 | *.hmap
20 | *.ipa
21 |
22 | # Bundler
23 | .bundle
24 |
25 | Carthage
26 | # We recommend against adding the Pods directory to your .gitignore. However
27 | # you should judge for yourself, the pros and cons are mentioned at:
28 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
29 | #
30 | # Note: if you ignore the Pods directory, make sure to uncomment
31 | # `pod install` in .travis.yml
32 | #
33 | # Pods/
34 |
--------------------------------------------------------------------------------
/Cards/Cards.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Cards/Cards.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Cards/Cards/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Cards
4 | //
5 | // Created by Jz D on 2020/6/24.
6 | // Copyright © 2020 Jz D. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 |
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
17 | // Override point for customization after application launch.
18 | return true
19 | }
20 |
21 | // MARK: UISceneSession Lifecycle
22 |
23 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
24 | // Called when a new scene session is being created.
25 | // Use this method to select a configuration to create the new scene with.
26 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
27 | }
28 |
29 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
30 | // Called when the user discards a scene session.
31 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
32 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
33 | }
34 |
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "iamge1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image1.imageset/iamge1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Cards/Cards/Assets.xcassets/image1.imageset/iamge1.jpg
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "image2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image2.imageset/image2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Cards/Cards/Assets.xcassets/image2.imageset/image2.jpg
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "image3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image3.imageset/image3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Cards/Cards/Assets.xcassets/image3.imageset/image3.jpg
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "image4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image4.imageset/image4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Cards/Cards/Assets.xcassets/image4.imageset/image4.jpg
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image5.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "image5.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Cards/Cards/Assets.xcassets/image5.imageset/image5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Cards/Cards/Assets.xcassets/image5.imageset/image5.jpg
--------------------------------------------------------------------------------
/Cards/Cards/BannerCell/BannerViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BannerViewCell.swift
3 | // MMCardView
4 | //
5 | // Created by Millman YANG on 2017/7/4.
6 | // Copyright © 2017年 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BannerViewCell: UICollectionViewCell {
12 | @IBOutlet weak var imgView: UIImageView!
13 | @IBOutlet weak var labPath: UILabel!
14 | }
15 |
--------------------------------------------------------------------------------
/Cards/Cards/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 |
--------------------------------------------------------------------------------
/Cards/Cards/CardCell/CardACell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardACell.swift
3 | // MMCardView
4 | //
5 | // Created by MILLMAN on 2016/9/21.
6 | // Copyright © 2016年 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 |
12 | class CardACell: CardCell {
13 | @IBOutlet weak var labTitle:UILabel!
14 | @IBOutlet weak var txtView:UITextView!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/Cards/Cards/CardCell/CardBCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardBCell.swift
3 | // MMCardView
4 | //
5 | // Created by MILLMAN on 2016/9/21.
6 | // Copyright © 2016年 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 |
12 | class CardBCell: CardCell {
13 |
14 | @IBOutlet weak var imgV:UIImageView!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | imgV.layer.cornerRadius = 8.0
19 | imgV.clipsToBounds = true
20 | // Initialization code
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/Cards/Cards/CardCell/CardCCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardCCell.swift
3 | // MMCardView
4 | //
5 | // Created by MILLMAN on 2016/9/21.
6 | // Copyright © 2016年 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CardCCell: CardCell {
12 |
13 | private var callBack:(()->Void)?
14 |
15 | func clickCallBack(c:@escaping ()->Void) {
16 | self.callBack = c
17 | }
18 |
19 |
20 | override func awakeFromNib() {
21 | super.awakeFromNib()
22 | // Initialization code
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/Cards/Cards/CardCell/CardCCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/Cards/Cards/CardCell/CardDCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardDCell.swift
3 | // MMCardView
4 | //
5 | // Created by Millman YANG on 2017/6/21.
6 | // Copyright © 2017年 CocoaPods. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CardDCell: CardCell {
12 | override func awakeFromNib() {
13 | super.awakeFromNib()
14 | }
15 |
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/Cards/Cards/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 | UISceneConfigurations
28 |
29 | UIWindowSceneSessionRoleApplication
30 |
31 |
32 | UISceneConfigurationName
33 | Default Configuration
34 | UISceneDelegateClassName
35 | $(PRODUCT_MODULE_NAME).SceneDelegate
36 | UISceneStoryboardFile
37 | Main
38 |
39 |
40 |
41 |
42 | UILaunchStoryboardName
43 | LaunchScreen
44 | UIMainStoryboardFile
45 | Main
46 | UIRequiredDeviceCapabilities
47 |
48 | armv7
49 |
50 | UISupportedInterfaceOrientations
51 |
52 | UIInterfaceOrientationPortrait
53 | UIInterfaceOrientationLandscapeRight
54 | UIInterfaceOrientationLandscapeLeft
55 |
56 | UISupportedInterfaceOrientations~ipad
57 |
58 | UIInterfaceOrientationPortrait
59 | UIInterfaceOrientationPortraitUpsideDown
60 | UIInterfaceOrientationLandscapeLeft
61 | UIInterfaceOrientationLandscapeRight
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/Cards/Cards/MCardView/CardLayout/CardCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardCell.swift
3 | // Pods
4 | //
5 | // Created by MILLMAN on 2016/9/20.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | open class CardCell:UICollectionViewCell{
12 |
13 |
14 |
15 | var collectionV:UICollectionView!
16 | var reloadBlock:(()->Void)?
17 | var customCardLayout:CardLayoutAttributes?
18 |
19 |
20 |
21 | var originTouchY:CGFloat = 0.0
22 | var pangesture:UIPanGestureRecognizer?
23 |
24 |
25 |
26 |
27 | @objc func pan(rec:UIPanGestureRecognizer){
28 | let point = rec.location(in: collectionV)
29 | let shiftY:CGFloat = max(point.y - originTouchY, 0)
30 | switch rec.state {
31 | case .began:
32 | originTouchY = point.y
33 | case .changed:
34 | self.transform = CGAffineTransform(translationX: 0, y: shiftY)
35 | default:
36 | let isNeedReload = (shiftY > self.contentView.frame.height/3) ? true : false
37 | let resetY = (isNeedReload) ? self.contentView.bounds.height * 1.2 : 0
38 | UIView.animate(withDuration: 0.3, animations: {
39 | self.transform = CGAffineTransform(translationX: 0, y: resetY)
40 | }, completion: { (finish) in
41 | if let reload = self.reloadBlock , isNeedReload ,finish {
42 | reload()
43 | }
44 | })
45 | }
46 | }
47 |
48 | open override func awakeFromNib() {
49 |
50 | super.awakeFromNib()
51 |
52 | if pangesture == nil {
53 | pangesture = UIPanGestureRecognizer(target: self,action: #selector(CardCell.pan(rec:)))
54 | pangesture!.delegate = self
55 | self.addGestureRecognizer(pangesture!)
56 | }
57 |
58 | self.setShadow(offset: CGSize(width: 0, height: -2), radius: 8, opacity: 0.5)
59 | }
60 |
61 | open override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
62 | super.apply(layoutAttributes)
63 | layer.zPosition = CGFloat(layoutAttributes.zIndex)
64 | if let layout = layoutAttributes as? CardLayoutAttributes {
65 | customCardLayout = layout
66 | }
67 | }
68 | }
69 |
70 | extension CardCell:UIGestureRecognizerDelegate {
71 |
72 | open override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
73 |
74 | if let layout = customCardLayout , layout.isExpand {
75 | return layout.isExpand
76 | }
77 | return false
78 | }
79 |
80 | public func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
81 | if let layout = customCardLayout , layout.isExpand {
82 | return layout.isExpand
83 | }
84 | return false
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/Cards/Cards/MCardView/CardLayout/CustomFlipTransition.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CustomFlipTransition.swift
3 | // Pods
4 | //
5 | // Created by MILLMAN on 2016/9/21.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | enum TransitionMode{
12 | case present, dismiss
13 | }
14 |
15 | public
16 | class CustomFlipTransition: NSObject,UIViewControllerAnimatedTransitioning {
17 |
18 |
19 | var duration = 0.3
20 | var transitionMode = TransitionMode.present
21 |
22 | var cardView:UICollectionViewCell!
23 | var originalCardFrame = CGRect.zero
24 |
25 |
26 |
27 | lazy var blurView:UIVisualEffectView = {
28 | let blurEffect = UIBlurEffect(style: UIBlurEffect.Style.dark)
29 | let blurEffectView = UIVisualEffectView(effect: blurEffect)
30 | blurEffectView.alpha = 0.0
31 | return blurEffectView
32 | }()
33 |
34 | public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
35 | return duration
36 | }
37 |
38 | public func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
39 | let containerView = transitionContext.containerView
40 | let toView = transitionContext.view(forKey: .to)
41 | let fromView = transitionContext.view(forKey: .from)
42 | let viewRadius = self.cardView.layer.cornerRadius
43 |
44 | if self.transitionMode == .present {
45 |
46 | originalCardFrame = self.cardView.frame
47 | let toViewF = self.cardView.superview!.convert(self.cardView.frame, to: nil)
48 | toView?.frame = self.cardView.bounds
49 | toView?.layer.cornerRadius = viewRadius
50 | self.cardView.addSubview(toView!)
51 | self.blurView.frame = containerView.bounds
52 | self.blurView.alpha = 0.0
53 | containerView.addSubview(self.blurView)
54 |
55 | UIView.transition(with: self.cardView, duration: self.duration, options: [.transitionFlipFromRight,.curveEaseIn], animations: {
56 | self.cardView.frame = CGRect.init(x: self.originalCardFrame.origin.x, y: self.originalCardFrame.origin.y, width: toViewF.width, height: toViewF.height)
57 | }, completion: { (finish) in
58 | UIView.animate(withDuration: 0.2, animations: {
59 | self.blurView.alpha = 1.0
60 | })
61 | toView?.frame = toViewF
62 | toView?.removeFromSuperview()
63 | containerView.addSubview(toView!)
64 | transitionContext.completeTransition(true)
65 | })
66 | }
67 | else {
68 | self.cardView.isHidden = true
69 | let content = self.cardView.contentView
70 | let originalCrolor = content.backgroundColor
71 | content.backgroundColor = self.cardView.backgroundColor
72 | content.layer.cornerRadius = viewRadius
73 | fromView?.addSubview(content)
74 | UIView.transition(with: fromView!, duration: self.duration, options: [.transitionFlipFromLeft,.curveEaseInOut], animations: {
75 | self.blurView.alpha = 0.0
76 | }, completion: { (finish) in
77 | self.blurView.removeFromSuperview()
78 | content.backgroundColor = originalCrolor
79 | content.removeFromSuperview()
80 | self.cardView.addSubview(content)
81 | self.cardView.isHidden = false
82 | transitionContext.completeTransition(true)
83 | })
84 | }
85 | }
86 |
87 | public convenience init(duration:TimeInterval) {
88 | self.init()
89 | self.duration = duration
90 | }
91 | }
92 |
--------------------------------------------------------------------------------
/Cards/Cards/MCardView/CollectionViewCalculate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionViewCalculate.swift
3 | // Pods
4 | //
5 | // Created by Millman YANG on 2017/7/4.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | class CollectionViewCalculate: NSObject {
12 | fileprivate var sections = 0
13 | fileprivate var sectionItemsCount = [Int:Int]()
14 | var totalCount = 0
15 |
16 | unowned let collect: UICollectionView
17 | init(collect: UICollectionView) {
18 | self.collect = collect
19 | }
20 |
21 | func isNeedUpdate() -> Bool {
22 | var isUpdate = false
23 | totalCount = 0
24 | if self.sections != collect.numberOfSections {
25 | self.sections = collect.numberOfSections
26 | sectionItemsCount.removeAll()
27 | }
28 | (0.. UIViewController! {
14 | if((vc.presentedViewController) != nil){
15 | return UIViewController.findBestViewController(vc.presentedViewController!)
16 | }
17 |
18 | else if(vc.isKind(of: UISplitViewController.classForCoder())){
19 | let splite = vc as! UISplitViewController
20 | if(splite.viewControllers.count > 0){
21 | return UIViewController.findBestViewController(splite.viewControllers.last!)
22 | }
23 |
24 | else{
25 | return vc
26 | }
27 | }
28 |
29 | else if(vc.isKind(of:UINavigationController.classForCoder())){
30 | let svc = vc as! UINavigationController
31 | if(svc.viewControllers.count > 0){
32 | return UIViewController.findBestViewController(svc.topViewController!)
33 | }
34 | else{
35 | return vc
36 | }
37 | }
38 |
39 | else if(vc.isKind(of:UITabBarController.classForCoder())){
40 | if let svc = vc as? UITabBarController,let v = svc.viewControllers , v.count > 0{
41 | return UIViewController.findBestViewController(svc.selectedViewController!)
42 |
43 | } else{
44 | return vc
45 | }
46 | }
47 |
48 | else{
49 | return vc
50 | }
51 | }
52 |
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/Cards/Cards/MCardView/MMCardCollectionView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MMCardCollectionView.swift
3 | // Pods
4 | //
5 | // Created by Millman YANG on 2017/6/21.
6 | //
7 | //
8 |
9 | import UIKit
10 |
11 | public class MMCollectionView: UICollectionView {
12 | fileprivate var transition = CustomFlipTransition(duration: 0.5)
13 |
14 |
15 | required public init?(coder aDecoder: NSCoder) {
16 | super.init(coder: aDecoder)
17 | self.setup()
18 | }
19 |
20 | override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
21 | super.init(frame: frame, collectionViewLayout: layout)
22 | self.setup()
23 | }
24 |
25 | func setup() {
26 | self.delegate = self
27 | self.collectionViewLayout = CustomCardLayout()
28 |
29 | }
30 |
31 | override public var bounds: CGRect {
32 | didSet {
33 | if oldValue != bounds, bounds.size != .zero {
34 |
35 | if let l = collectionViewLayout as? CustomCardLayout{
36 | l.updateCellSize()
37 | }
38 |
39 | self.reloadData()
40 | }
41 | }
42 | }
43 |
44 |
45 | }
46 |
47 |
48 |
49 |
50 |
51 |
52 | extension MMCollectionView: UICollectionViewDelegate {
53 |
54 |
55 | public func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
56 | if let c = cell as? CardCell {
57 | c.collectionV = collectionView
58 | c.reloadBlock = {
59 | if let custom = collectionView.collectionViewLayout as? CustomCardLayout {
60 | custom.selectPath = nil
61 | }
62 | }
63 | c.isHidden = false
64 | }
65 |
66 | }
67 |
68 |
69 |
70 |
71 | public func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath){
72 |
73 | if let l = collectionView.collectionViewLayout as? CustomCardLayout{
74 | l.selectPath = indexPath
75 | }
76 | }
77 | }
78 |
79 | extension MMCollectionView: UIViewControllerTransitioningDelegate {
80 |
81 | public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? {
82 | transition.transitionMode = .present
83 | if let custom = collectionViewLayout as? CustomCardLayout, let path = custom.selectPath {
84 |
85 | transition.cardView = self.cellForItem(at: path)
86 | custom.isFullScreen = true
87 | }
88 | return transition
89 | }
90 |
91 | public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? {
92 | transition.transitionMode = .dismiss
93 | if let custom = collectionViewLayout as? CustomCardLayout {
94 | custom.isFullScreen = false
95 | }
96 | return transition
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Cards/Cards/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // Cards
4 | //
5 | // Created by Jz D on 2020/6/24.
6 | // Copyright © 2020 Jz D. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
12 |
13 | var window: UIWindow?
14 |
15 |
16 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
17 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
18 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
19 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
20 | guard let _ = (scene as? UIWindowScene) else { return }
21 | }
22 |
23 | func sceneDidDisconnect(_ scene: UIScene) {
24 | // Called as the scene is being released by the system.
25 | // This occurs shortly after the scene enters the background, or when its session is discarded.
26 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
27 | // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
28 | }
29 |
30 | func sceneDidBecomeActive(_ scene: UIScene) {
31 | // Called when the scene has moved from an inactive state to an active state.
32 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
33 | }
34 |
35 | func sceneWillResignActive(_ scene: UIScene) {
36 | // Called when the scene will move from an active state to an inactive state.
37 | // This may occur due to temporary interruptions (ex. an incoming phone call).
38 | }
39 |
40 | func sceneWillEnterForeground(_ scene: UIScene) {
41 | // Called as the scene transitions from the background to the foreground.
42 | // Use this method to undo the changes made on entering the background.
43 | }
44 |
45 | func sceneDidEnterBackground(_ scene: UIScene) {
46 | // Called as the scene transitions from the foreground to the background.
47 | // Use this method to save data, release shared resources, and store enough scene-specific state information
48 | // to restore the scene back to its current state.
49 | }
50 |
51 |
52 | }
53 |
54 |
--------------------------------------------------------------------------------
/Cards/Cards/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // MMCardView
4 | //
5 | // Created by Millman on 09/20/2016.
6 | // Copyright (c) 2016 Millman. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ViewController: UIViewController{
12 | var sectionData = [["CardA","CardB","CardC"],["CardB","CardB","CardB"],["CardC"],["CardD"]]
13 | @IBOutlet weak var cardCollection: MMCollectionView!
14 |
15 |
16 |
17 |
18 | override func viewDidLoad() {
19 | super.viewDidLoad()
20 | view.backgroundColor = UIColor.white
21 | cardCollection.dataSource = self
22 |
23 |
24 |
25 | cardCollection.register(UINib(nibName: "CardACell", bundle: nil), forCellWithReuseIdentifier: "CardA")
26 | cardCollection.register(UINib(nibName: "CardBCell", bundle: nil), forCellWithReuseIdentifier: "CardB")
27 | cardCollection.register(UINib(nibName: "CardCCell", bundle: nil), forCellWithReuseIdentifier: "CardC")
28 |
29 | if let layout = cardCollection.collectionViewLayout as? CustomCardLayout {
30 | layout.titleHeight = 100.0
31 | layout.bottomShowCount = 3
32 | layout.cardHeight = 300
33 |
34 | }
35 | }
36 |
37 |
38 |
39 |
40 |
41 | }
42 |
43 |
44 |
45 |
46 | extension ViewController: UICollectionViewDataSource{
47 | public func numberOfSections(in collectionView: UICollectionView) -> Int {
48 | return sectionData.count
49 | }
50 |
51 | public func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
52 | return sectionData[section].count
53 | }
54 | public func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
55 |
56 | let idenTifier = sectionData[indexPath.section][indexPath.row]
57 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: idenTifier, for: indexPath)
58 | switch cell {
59 | case let c as CardBCell:
60 | c.imgV.image = #imageLiteral(resourceName: "image1")
61 | default:
62 | break
63 | }
64 | return cell
65 | }
66 | }
67 |
68 |
--------------------------------------------------------------------------------
/Cards/CardsTests/CardsTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardsTests.swift
3 | // CardsTests
4 | //
5 | // Created by Jz D on 2020/6/24.
6 | // Copyright © 2020 Jz D. All rights reserved.
7 | //
8 |
9 | import XCTest
10 | @testable import Cards
11 |
12 | class CardsTests: XCTestCase {
13 |
14 | override func setUpWithError() throws {
15 | // Put setup code here. This method is called before the invocation of each test method in the class.
16 | }
17 |
18 | override func tearDownWithError() throws {
19 | // Put teardown code here. This method is called after the invocation of each test method in the class.
20 | }
21 |
22 | func testExample() throws {
23 | // This is an example of a functional test case.
24 | // Use XCTAssert and related functions to verify your tests produce the correct results.
25 | }
26 |
27 | func testPerformanceExample() throws {
28 | // This is an example of a performance test case.
29 | self.measure {
30 | // Put the code you want to measure the time of here.
31 | }
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/Cards/CardsTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Cards/CardsUITests/CardsUITests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CardsUITests.swift
3 | // CardsUITests
4 | //
5 | // Created by Jz D on 2020/6/24.
6 | // Copyright © 2020 Jz D. All rights reserved.
7 | //
8 |
9 | import XCTest
10 |
11 | class CardsUITests: XCTestCase {
12 |
13 | override func setUpWithError() throws {
14 | // Put setup code here. This method is called before the invocation of each test method in the class.
15 |
16 | // In UI tests it is usually best to stop immediately when a failure occurs.
17 | continueAfterFailure = false
18 |
19 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this.
20 | }
21 |
22 | override func tearDownWithError() throws {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | }
25 |
26 | func testExample() throws {
27 | // UI tests must launch the application that they test.
28 | let app = XCUIApplication()
29 | app.launch()
30 |
31 | // Use recording to get started writing UI tests.
32 | // Use XCTAssert and related functions to verify your tests produce the correct results.
33 | }
34 |
35 | func testLaunchPerformance() throws {
36 | if #available(macOS 10.15, iOS 13.0, tvOS 13.0, *) {
37 | // This measures how long it takes to launch your application.
38 | measure(metrics: [XCTOSSignpostMetric.applicationLaunch]) {
39 | XCUIApplication().launch()
40 | }
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Cards/CardsUITests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // DragAndDropInCollectionView
4 | //
5 | // Created by Payal Gupta on 06/11/17.
6 | // Copyright © 2017 Payal Gupta. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/chrome.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "chrome.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/chrome.imageset/chrome.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/chrome.imageset/chrome.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/fade.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "fade.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/fade.imageset/fade.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/fade.imageset/fade.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/falseColor.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "falseColor.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/falseColor.imageset/falseColor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/falseColor.imageset/falseColor.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/instant.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "instant.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/instant.imageset/instant.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/instant.imageset/instant.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/mono.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "mono.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/mono.imageset/mono.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/mono.imageset/mono.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/noir.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "noir.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/noir.imageset/noir.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/noir.imageset/noir.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/none.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "none.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/none.imageset/none.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/none.imageset/none.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/pin.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "thumbtack-pushpin-2-hi.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/pin.imageset/thumbtack-pushpin-2-hi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/pin.imageset/thumbtack-pushpin-2-hi.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/process.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "process.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/process.imageset/process.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/process.imageset/process.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/sepia.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "sepia.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/sepia.imageset/sepia.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/sepia.imageset/sepia.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/texture.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "grunge-texture-abstract-hd-wallpaper-2560x1440-8066.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/texture.imageset/grunge-texture-abstract-hd-wallpaper-2560x1440-8066.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/texture.imageset/grunge-texture-abstract-hd-wallpaper-2560x1440-8066.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/tonal.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "tonal.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/tonal.imageset/tonal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/tonal.imageset/tonal.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/transfer.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "transfer.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/transfer.imageset/transfer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Assets.xcassets/transfer.imageset/transfer.png
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/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 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/DragDropCollectionViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DragDropCollectionViewCell.swift
3 | // DragAndDropInCollectionView
4 | //
5 | // Created by Payal Gupta on 08/11/17.
6 | // Copyright © 2017 Payal Gupta. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class DragDropCollectionViewCell: UICollectionViewCell
12 | {
13 | @IBOutlet weak var customImageView: UIImageView!
14 | @IBOutlet weak var customLabel: UILabel!
15 | }
16 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/EntryCtrl.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EntryCtrl.swift
3 | // DragAndDropInCollectionView
4 | //
5 | // Created by Jz D on 2020/9/15.
6 | // Copyright © 2020 Payal Gupta. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class EntryCtrl: UIViewController {
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | override func viewDidLoad() {
22 | super.viewDidLoad()
23 |
24 | // Do any additional setup after loading the view.
25 | }
26 |
27 |
28 |
29 |
30 | @IBAction func two(_ sender: UIButton) {
31 |
32 | navigationController?.pushViewController(SecondController(), animated: true)
33 |
34 |
35 |
36 | }
37 |
38 |
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleDisplayName
8 | DragDrop
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | armv7
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Second/Cells/CollectionViewCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CollectionViewCell.swift
3 | // DragAndDropInCollectionView
4 | //
5 | // Created by Jz D on 2020/9/15.
6 | // Copyright © 2020 Payal Gupta. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CollectionViewCell: UICollectionViewCell {
12 | weak var label: UILabel?
13 |
14 | override init(frame: CGRect) {
15 | super.init(frame: frame)
16 | clipsToBounds = true
17 | let label = UILabel(frame: .zero)
18 | label.contentMode = .scaleAspectFill
19 | addSubview(label)
20 | label.translatesAutoresizingMaskIntoConstraints = false
21 | label.topAnchor.constraint(equalTo: topAnchor).isActive = true
22 | label.bottomAnchor.constraint(equalTo: bottomAnchor).isActive = true
23 | label.leftAnchor.constraint(equalTo: leftAnchor).isActive = true
24 | label.rightAnchor.constraint(equalTo: rightAnchor).isActive = true
25 | label.textAlignment = .center
26 | label.textColor = .white
27 | self.label = label
28 | layer.borderWidth = 1
29 | layer.borderColor = UIColor.white.cgColor
30 | backgroundColor = .white
31 | }
32 |
33 | required init?(coder aDecoder: NSCoder) {
34 | super.init(coder: aDecoder)
35 | }
36 |
37 | override func prepareForReuse() {
38 | super.prepareForReuse()
39 | label?.text = nil
40 | backgroundColor = .white
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragAndDropInCollectionView/Second/Cells/SupplementaryView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SupplementaryView.swift
3 | // DragAndDropInCollectionView
4 | //
5 | // Created by Jz D on 2020/9/15.
6 | // Copyright © 2020 Payal Gupta. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SupplementaryView: UICollectionReusableView {
12 |
13 | override init(frame: CGRect) {
14 | super.init(frame: frame)
15 | backgroundColor = UIColor.blue.withAlphaComponent(0.7)
16 | }
17 |
18 | required init?(coder aDecoder: NSCoder) {
19 | super.init(coder: aDecoder)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Drag/DragAndDrop-CollectionView/DragDrop.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Drag/DragAndDrop-CollectionView/DragDrop.gif
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 CopyCat
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Parallax/JungleCup.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Parallax/JungleCup.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "icon-app-20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "icon-app-20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "icon-app-29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "icon-app-29@3x copy.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "icon-app-40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "icon-app-40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "icon-app-60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "icon-app-60@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "idiom" : "ios-marketing",
53 | "size" : "1024x1024",
54 | "scale" : "1x"
55 | }
56 | ],
57 | "info" : {
58 | "version" : 1,
59 | "author" : "xcode"
60 | }
61 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Giraffes-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Giraffes-d1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Giraffes-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Giraffes-d2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Giraffes-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Giraffes-d3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Giraffes-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Giraffes-d4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Giraffes-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Giraffes-f1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Giraffes-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Giraffes-f2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Giraffes-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Giraffes-goalkeeper.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Giraffes-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Giraffes-m1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Giraffes-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Giraffes-m2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Giraffes-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Giraffes-m3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Giraffes-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Giraffes-m4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/header.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "header.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/header.imageset/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/header.imageset/header.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Owls-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Owls-d1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Owls-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Owls-d2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Owls-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Owls-d3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Owls-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Owls-d4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Owls-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Owls-f1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Owls-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Owls-f2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Owls-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Owls-goalkeeper.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Owls-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Owls-m1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Owls-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Owls-m2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Owls-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Owls-m3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Owls-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Owls-m4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d1.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Parrots-d1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Parrots-d1.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Parrots-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Parrots-d2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Parrots-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Parrots-d3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Parrots-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Parrots-d4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Parrots-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Parrots-f1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-f2.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Parrots-f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Parrots-f2.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Parrots-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Parrots-goalkeeper.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Parrots-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Parrots-m1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Parrots-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Parrots-m2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Parrots-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Parrots-m3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Parrots-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Parrots-m4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/rw-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Razewarelogo_1024.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-bg.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Tigers-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Tigers-d1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Tigers-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Tigers-d2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Tigers-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Tigers-d3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Tigers-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Tigers-d4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Tigers-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Tigers-f1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Tigers-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Tigers-f2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Tigers-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Tigers-goalkeeper.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Tigers-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Tigers-m1.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Tigers-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Tigers-m2.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Tigers-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Tigers-m3.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Tigers-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Parallax/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Tigers-m4.jpg
--------------------------------------------------------------------------------
/Parallax/JungleCup/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/LaunchScreen.xib:
--------------------------------------------------------------------------------
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 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
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: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
13 | return true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Custom Layout/CustomLayoutAttributes.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class CustomLayoutAttributes: UICollectionViewLayoutAttributes {
8 |
9 | // MARK: - Properties
10 | var parallax = CGAffineTransform.identity
11 | var initialOrigin = CGPoint.zero
12 | var headerOverlayAlpha = CGFloat.zero
13 |
14 | // MARK: - Life Cycle
15 | override func copy(with zone: NSZone?) -> Any {
16 | guard let copiedAttributes = super.copy(with: zone) as? CustomLayoutAttributes else {
17 | return super.copy(with: zone)
18 | }
19 |
20 | copiedAttributes.parallax = parallax
21 | copiedAttributes.initialOrigin = initialOrigin
22 | copiedAttributes.headerOverlayAlpha = headerOverlayAlpha
23 | return copiedAttributes
24 | }
25 |
26 | override func isEqual(_ object: Any?) -> Bool {
27 | guard let otherAttributes = object as? CustomLayoutAttributes else {
28 | return false
29 | }
30 |
31 | if NSValue(cgAffineTransform: otherAttributes.parallax) != NSValue(cgAffineTransform: parallax)
32 | || otherAttributes.initialOrigin != initialOrigin
33 | || otherAttributes.headerOverlayAlpha != headerOverlayAlpha {
34 | return false
35 | }
36 |
37 | return super.isEqual(object)
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Custom Layout/CustomLayoutSettings.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | struct CustomLayoutSettings {
8 |
9 | // Elements sizes
10 | private (set) var itemSizeH: CGFloat
11 | private (set) var headerSizeH: CGFloat
12 |
13 | private (set) var menuSizeH: CGFloat
14 | private (set) var sectionsHeaderSizeH: CGFloat
15 | private (set) var sectionsFooterSizeH: CGFloat
16 |
17 | // Behaviours
18 | private (set) var isHeaderStretchy: Bool
19 | private (set) var isAlphaOnHeaderActive: Bool
20 | private (set) var headerOverlayMaxAlphaValue: CGFloat
21 | private (set) var isMenuSticky: Bool
22 | private (set) var isSectionHeadersSticky: Bool
23 | private (set) var isParallaxOnCellsEnabled: Bool
24 |
25 | // Spacing
26 | private (set) var minimumInteritemSpacing: CGFloat
27 | private (set) var minimumLineSpacing: CGFloat
28 | private (set) var maxParallaxOffset: CGFloat
29 | }
30 |
31 | extension CustomLayoutSettings {
32 |
33 | init() {
34 | self.itemSizeH = 200
35 | self.headerSizeH = 300
36 |
37 | self.menuSizeH = 70
38 | self.sectionsHeaderSizeH = 50
39 | self.sectionsFooterSizeH = 50
40 |
41 |
42 |
43 | self.isHeaderStretchy = true
44 | self.isAlphaOnHeaderActive = true
45 | self.headerOverlayMaxAlphaValue = CGFloat(0.6)
46 | self.isMenuSticky = true
47 | self.isSectionHeadersSticky = true
48 | self.isParallaxOnCellsEnabled = true
49 |
50 |
51 |
52 | self.maxParallaxOffset = 60
53 | self.minimumInteritemSpacing = 0
54 | self.minimumLineSpacing = 3
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Mock Data/MockDataManager.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | protocol Team {
6 | var marks: [String] { get }
7 | var playerPictures: [[String]] { get }
8 | }
9 |
10 | struct Owls: Team {
11 | let marks = ["4/5", "3/5", "4/5", "2/5"]
12 | let playerPictures = [
13 | ["Owls-goalkeeper"],
14 | ["Owls-d1", "Owls-d2", "Owls-d3", "Owls-d4"],
15 | ["Owls-m1", "Owls-m2", "Owls-m3", "Owls-m4"],
16 | ["Owls-f1", "Owls-f2"]
17 | ]
18 | }
19 |
20 | struct Tigers: Team {
21 | let marks = ["1/5", "3/5", "3/5", "5/5"]
22 | let playerPictures = [
23 | ["Tigers-goalkeeper"],
24 | ["Tigers-d1", "Tigers-d2", "Tigers-d3", "Tigers-d4"],
25 | ["Tigers-m1", "Tigers-m2", "Tigers-m3", "Tigers-m4"],
26 | ["Tigers-f1", "Tigers-f2"]
27 | ]
28 | }
29 |
30 | struct Parrots: Team {
31 | let marks = ["3/5", "2/5", "4/5", "5/5"]
32 | let playerPictures = [
33 | ["Parrots-goalkeeper"],
34 | ["Parrots-d1", "Parrots-d2", "Parrots-d3", "Parrots-d4"],
35 | ["Parrots-m1", "Parrots-m2", "Parrots-m3", "Parrots-m4"],
36 | ["Parrots-f1", "Parrots-f2"]
37 | ]
38 | }
39 |
40 | struct Giraffes: Team {
41 | let marks = ["5/5", "4/5", "3/5", "1/5"]
42 | let playerPictures = [
43 | ["Giraffes-goalkeeper"],
44 | ["Giraffes-d1", "Giraffes-d2", "Giraffes-d3", "Giraffes-d4"],
45 | ["Giraffes-m1", "Giraffes-m2", "Giraffes-m3", "Giraffes-m4"],
46 | ["Giraffes-f1", "Giraffes-f2"]
47 | ]
48 | }
49 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Cell/PlayerCell.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class PlayerCell: UICollectionViewCell {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var picture: UIImageView!
11 |
12 | // MARK: - View Life Cycle
13 | override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
14 | super.apply(layoutAttributes)
15 |
16 | guard let attributes = layoutAttributes as? CustomLayoutAttributes else {
17 | return
18 | }
19 |
20 | picture.transform = attributes.parallax
21 | }
22 |
23 | override func prepareForReuse() {
24 | super.prepareForReuse()
25 |
26 | picture.transform = .identity
27 | }
28 |
29 |
30 | override func awakeFromNib() {
31 | // clipsToBounds = false
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Header View/HeaderView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class HeaderView: UICollectionReusableView {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var overlayView: UIView!
11 |
12 | // MARK: - Life Cycle
13 | public override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
14 | super.apply(layoutAttributes)
15 |
16 | guard let customFlowLayoutAttributes = layoutAttributes as? CustomLayoutAttributes else {
17 | return
18 | }
19 |
20 | overlayView?.alpha = customFlowLayoutAttributes.headerOverlayAlpha
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Header View/HeaderView.xib:
--------------------------------------------------------------------------------
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 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Menu View/MenuView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | protocol MenuViewDelegate {
8 | func reloadCollectionViewDataWithTeamIndex(_ index: Int)
9 | }
10 |
11 | final class MenuView: UICollectionReusableView {
12 |
13 | // MARK: - Properties
14 | var delegate: MenuViewDelegate?
15 |
16 | // MARK: - View Life Cycle
17 | override func prepareForReuse() {
18 | super.prepareForReuse()
19 |
20 | delegate = nil
21 | }
22 | }
23 |
24 | // MARK: - IBActions
25 | extension MenuView {
26 |
27 | @IBAction func tappedButton(_ sender: UIButton) {
28 | delegate?.reloadCollectionViewDataWithTeamIndex(sender.tag)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Section Footer View/SectionFooterView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class SectionFooterView: UICollectionReusableView {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var mark: UILabel!
11 | }
12 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/Reusable Views/Section Header View/SectionHeaderView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class SectionHeaderView: UICollectionReusableView {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var title: UILabel!
11 | }
12 |
--------------------------------------------------------------------------------
/Parallax/JungleCup/Sources/View Controllers/JungleCupCollectionViewController.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class JungleCupCollectionViewController: UICollectionViewController {
8 |
9 | // MARK: - Properties
10 | var customLayout: CustomLayout? {
11 | collectionView?.collectionViewLayout as? CustomLayout
12 | }
13 |
14 | private let teams: [Team] = [Tigers(), Owls(), Giraffes(), Parrots()]
15 | private let sections = ["Goalkeeper", "Defenders", "Midfielders", "Forwards"]
16 | private var displayedTeam = 0
17 |
18 | override var prefersStatusBarHidden: Bool {
19 | true
20 | }
21 |
22 | // MARK: - View Life Cycle
23 | override func viewDidLoad() {
24 | super.viewDidLoad()
25 |
26 | setupCollectionViewLayout()
27 | }
28 | }
29 |
30 | private extension JungleCupCollectionViewController {
31 |
32 | func setupCollectionViewLayout() {
33 |
34 | guard let collectionView = collectionView else { return }
35 |
36 | collectionView.register(
37 | UINib(nibName: "HeaderView", bundle: nil),
38 | forSupplementaryViewOfKind: CustomLayout.Element.header.kind,
39 | withReuseIdentifier: CustomLayout.Element.header.id
40 | )
41 |
42 | collectionView.register(
43 | UINib(nibName: "MenuView", bundle: nil),
44 | forSupplementaryViewOfKind: CustomLayout.Element.menu.kind,
45 | withReuseIdentifier: CustomLayout.Element.menu.id
46 | )
47 |
48 |
49 | }
50 | }
51 |
52 | //MARK: - UICollectionViewDataSource
53 | extension JungleCupCollectionViewController {
54 |
55 | override func numberOfSections(in collectionView: UICollectionView) -> Int {
56 | return sections.count
57 | }
58 |
59 | override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
60 | return teams[displayedTeam].playerPictures[section].count
61 | }
62 |
63 | override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
64 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CustomLayout.Element.cell.id, for: indexPath)
65 | if let playerCell = cell as? PlayerCell {
66 | playerCell.picture.image = UIImage(named: teams[displayedTeam].playerPictures[indexPath.section][indexPath.item])
67 | }
68 | return cell
69 | }
70 |
71 | override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
72 | switch kind {
73 | case UICollectionElementKindSectionHeader:
74 | let supplementaryView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CustomLayout.Element.sectionHeader.id, for: indexPath)
75 | if let sectionHeaderView = supplementaryView as? SectionHeaderView {
76 | sectionHeaderView.title.text = sections[indexPath.section]
77 | }
78 | return supplementaryView
79 |
80 | case UICollectionElementKindSectionFooter:
81 | let supplementaryView = collectionView.dequeueReusableSupplementaryView(ofKind: kind, withReuseIdentifier: CustomLayout.Element.sectionFooter.id, for: indexPath)
82 | if let sectionFooterView = supplementaryView as? SectionFooterView {
83 | sectionFooterView.mark.text = "Strength: \(teams[displayedTeam].marks[indexPath.section])"
84 | }
85 | return supplementaryView
86 |
87 | case CustomLayout.Element.header.kind:
88 | let topHeaderView = collectionView.dequeueReusableSupplementaryView(
89 | ofKind: kind,
90 | withReuseIdentifier: CustomLayout.Element.header.id,
91 | for: indexPath
92 | )
93 | return topHeaderView
94 |
95 | case CustomLayout.Element.menu.kind:
96 | let menuView = collectionView.dequeueReusableSupplementaryView(
97 | ofKind: kind,
98 | withReuseIdentifier: CustomLayout.Element.menu.id,
99 | for: indexPath
100 | )
101 | if let menuView = menuView as? MenuView {
102 | menuView.delegate = self
103 | }
104 | return menuView
105 |
106 | default:
107 | fatalError("Unexpected element kind")
108 | }
109 | }
110 | }
111 |
112 | // MARK: - MenuViewDelegate
113 | extension JungleCupCollectionViewController: MenuViewDelegate {
114 |
115 | func reloadCollectionViewDataWithTeamIndex(_ index: Int) {
116 | displayedTeam = index
117 | collectionView?.reloadData()
118 | }
119 | }
120 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CardView, Swift 5
2 |
3 |
4 | ## 3 博客地址:[UICollectionview 跨区间 section,拖放操作](https://juejin.im/post/6872696500284686350)
5 |
6 |
7 | ## 2 博客地址:[UICollectionView 自定制布局: 顶部黏住效果](https://juejin.im/post/6855937244667215885)
8 |
9 |
10 | ## 1 博客地址: [UICollectionView 自定制布局,例子是钱包界面](https://juejin.im/post/5ef5b7206fb9a07eae53ea3e)
11 |
12 |
13 | ## * 第 3 个例子,是 Drag, 拖动
14 |
15 |
16 | 
17 |
18 |
19 | * ref 1: [Drag and reorder - UICollectionview with sections](https://stackoverflow.com/questions/39080807/drag-and-reorder-uicollectionview-with-sections)
20 |
21 |
22 | * ref 2: [Coding for iOS 11: How to drag & drop into collections & tables](https://hackernoon.com/drag-it-drop-it-in-collection-table-ios-11-6bd28795b313)
23 |
24 |
25 | ## * 第 2 个例子,是 Parallax
26 |
27 |
28 |
29 | ### 2.1 简化,黏住效果
30 |
31 |
32 | 
33 |
34 |
35 |
36 |
37 | ### 2.2 原版,小小改动
38 |
39 |
40 |
41 | 
42 |
43 |
44 | 基于 [Custom UICollectionViewLayout Tutorial With Parallax](https://www.raywenderlich.com/527-custom-uicollectionviewlayout-tutorial-with-parallax#toc-anchor-011)
45 |
46 |
47 | Parallax, 视差效果,
48 |
49 | 就是滚动的时候,cell 上面的图片 picture , 有一个纵向 ( y 轴 ) 的位移
50 |
51 | 上上下下的晃动
52 |
53 |
54 |
55 |
56 | ## * 第一个例子,Demo
57 |
58 |
59 | Latest Simple Card
60 |
61 |
62 |
63 |
64 | 
65 |
66 |
67 | 
68 |
69 |
70 | Origin Card
71 |
72 | 
73 |
74 |
75 |
76 | ## from MillmanY/MMCardView
77 |
78 |
79 |
80 | ## Use Card
81 |
82 |
83 | 1.Inherit your collectionView to MMCollectionView
84 |
85 | @IBOutlet weak var cardCollection: MMCollectionView!
86 |
87 | 2.Create your Cell inherit "CardCell"
88 |
89 | class CardACell: CardCell {
90 |
91 | }
92 |
93 | if let layout = cardCollection.collectionViewLayout as? CustomCardLayout {
94 | layout.titleHeight = 100.0
95 | layout.bottomShowCount = 3
96 | layout.cardHeight = 300
97 | layout.showStyle = .cover
98 | }
99 |
100 |
101 |
102 | ## Installation : Just DIY
103 |
104 |
--------------------------------------------------------------------------------
/Src/1111.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Src/1111.gif
--------------------------------------------------------------------------------
/Src/_wwwweee.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Src/_wwwweee.png
--------------------------------------------------------------------------------
/Src/aaa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Src/aaa.gif
--------------------------------------------------------------------------------
/Src/custom-layout-parallax-gif-final.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/Src/custom-layout-parallax-gif-final.gif
--------------------------------------------------------------------------------
/easyStick/JungleCup.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/easyStick/JungleCup.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "icon-app-20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "icon-app-20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "icon-app-29@2x.png",
19 | "scale" : "2x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "icon-app-29@3x copy.png",
25 | "scale" : "3x"
26 | },
27 | {
28 | "size" : "40x40",
29 | "idiom" : "iphone",
30 | "filename" : "icon-app-40@2x.png",
31 | "scale" : "2x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "icon-app-40@3x.png",
37 | "scale" : "3x"
38 | },
39 | {
40 | "size" : "60x60",
41 | "idiom" : "iphone",
42 | "filename" : "icon-app-60@2x.png",
43 | "scale" : "2x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "icon-app-60@3x.png",
49 | "scale" : "3x"
50 | },
51 | {
52 | "idiom" : "ios-marketing",
53 | "size" : "1024x1024",
54 | "scale" : "1x"
55 | }
56 | ],
57 | "info" : {
58 | "version" : 1,
59 | "author" : "xcode"
60 | }
61 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@2x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-20@3x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@2x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-29@3x copy.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@2x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-40@3x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@2x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/AppIcon.appiconset/icon-app-60@3x.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Giraffes-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d1.imageset/Giraffes-d1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Giraffes-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d2.imageset/Giraffes-d2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Giraffes-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d3.imageset/Giraffes-d3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Giraffes-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-d4.imageset/Giraffes-d4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Giraffes-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f1.imageset/Giraffes-f1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Giraffes-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-f2.imageset/Giraffes-f2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Giraffes-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-goalkeeper.imageset/Giraffes-goalkeeper.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Giraffes-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m1.imageset/Giraffes-m1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Giraffes-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m2.imageset/Giraffes-m2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Giraffes-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m3.imageset/Giraffes-m3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Giraffes-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Giraffes-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/giraffes/Giraffes-m4.imageset/Giraffes-m4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/header.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "header.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/header.imageset/header.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/header.imageset/header.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Owls-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-d1.imageset/Owls-d1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Owls-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-d2.imageset/Owls-d2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Owls-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-d3.imageset/Owls-d3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Owls-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-d4.imageset/Owls-d4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Owls-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-f1.imageset/Owls-f1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Owls-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-f2.imageset/Owls-f2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Owls-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-goalkeeper.imageset/Owls-goalkeeper.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Owls-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-m1.imageset/Owls-m1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Owls-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-m2.imageset/Owls-m2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Owls-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-m3.imageset/Owls-m3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Owls-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Owls-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/owls/Owls-m4.imageset/Owls-m4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d1.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Parrots-d1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d1.imageset/Parrots-d1.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Parrots-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d2.imageset/Parrots-d2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Parrots-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d3.imageset/Parrots-d3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Parrots-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-d4.imageset/Parrots-d4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Parrots-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f1.imageset/Parrots-f1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-f2.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Parrots-f2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-f2.imageset/Parrots-f2.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Parrots-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-goalkeeper.imageset/Parrots-goalkeeper.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Parrots-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m1.imageset/Parrots-m1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Parrots-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m2.imageset/Parrots-m2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Parrots-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m3.imageset/Parrots-m3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Parrots-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Parrots-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/parrots/Parrots-m4.imageset/Parrots-m4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/rw-logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "Razewarelogo_1024.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/rw-logo.imageset/Razewarelogo_1024.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "scale" : "1x"
6 | },
7 | {
8 | "idiom" : "universal",
9 | "filename" : "rwdevcon-bg.png",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/rwdevcon-bg.imageset/rwdevcon-bg.png
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Tigers-d1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d1.imageset/Tigers-d1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Tigers-d2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d2.imageset/Tigers-d2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Tigers-d3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d3.imageset/Tigers-d3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-d4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Tigers-d4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-d4.imageset/Tigers-d4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-f1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Tigers-f1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f1.imageset/Tigers-f1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-f2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Tigers-f2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-f2.imageset/Tigers-f2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-goalkeeper.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Tigers-goalkeeper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-goalkeeper.imageset/Tigers-goalkeeper.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m1.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Tigers-m1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m1.imageset/Tigers-m1.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m2.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Tigers-m2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m2.imageset/Tigers-m2.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m3.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Tigers-m3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m3.imageset/Tigers-m3.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "Tigers-m4.jpg",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Tigers-m4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coyingcat/CardCollection/ae3b2ad7281a5e3b38d49112e602b04023c935ec/easyStick/JungleCup/Assets.xcassets/tigers/Tigers-m4.imageset/Tigers-m4.jpg
--------------------------------------------------------------------------------
/easyStick/JungleCup/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/LaunchScreen.xib:
--------------------------------------------------------------------------------
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 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
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: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
13 | return true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Custom Layout/CustomLayoutAttributes.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class CustomLayoutAttributes: UICollectionViewLayoutAttributes {
8 |
9 | // MARK: - Properties
10 |
11 | var initialOrigin = CGPoint.zero
12 | var headerOverlayAlpha = CGFloat.zero
13 |
14 | // MARK: - Life Cycle
15 | override func copy(with zone: NSZone?) -> Any {
16 | guard let copiedAttributes = super.copy(with: zone) as? CustomLayoutAttributes else {
17 | return super.copy(with: zone)
18 | }
19 |
20 |
21 | copiedAttributes.initialOrigin = initialOrigin
22 | copiedAttributes.headerOverlayAlpha = headerOverlayAlpha
23 | return copiedAttributes
24 | }
25 |
26 | override func isEqual(_ object: Any?) -> Bool {
27 | guard let otherAttributes = object as? CustomLayoutAttributes else {
28 | return false
29 | }
30 |
31 | if otherAttributes.initialOrigin != initialOrigin
32 | || otherAttributes.headerOverlayAlpha != headerOverlayAlpha {
33 | return false
34 | }
35 |
36 | return super.isEqual(object)
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Custom Layout/CustomLayoutSettings.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | struct CustomLayoutSettings {
8 |
9 | // Elements sizes
10 | private (set) var itemSizeH: CGFloat
11 | private (set) var headerSizeH: CGFloat
12 |
13 | private (set) var menuSizeH: CGFloat
14 |
15 | // Behaviours
16 | private (set) var headerOverlayMaxAlphaValue: CGFloat
17 |
18 | // Spacing
19 | private (set) var minimumInteritemSpacing: CGFloat
20 | private (set) var minimumLineSpacing: CGFloat
21 | }
22 |
23 | extension CustomLayoutSettings {
24 |
25 | init() {
26 | self.itemSizeH = 200
27 | self.headerSizeH = 300
28 |
29 | self.menuSizeH = 70
30 |
31 | self.headerOverlayMaxAlphaValue = CGFloat(0.6)
32 |
33 | self.minimumInteritemSpacing = 0
34 | self.minimumLineSpacing = 3
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Mock Data/MockDataManager.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | protocol Team {
6 | var marks: [String] { get }
7 | var playerPictures: [[String]] { get }
8 | }
9 |
10 | struct Owls: Team {
11 | let marks = ["4/5", "3/5", "4/5", "2/5"]
12 | let playerPictures = [
13 | ["Owls-goalkeeper"],
14 | ["Owls-d1", "Owls-d2", "Owls-d3", "Owls-d4"],
15 | ["Owls-m1", "Owls-m2", "Owls-m3", "Owls-m4"],
16 | ["Owls-f1", "Owls-f2"]
17 | ]
18 | }
19 |
20 | struct Tigers: Team {
21 | let marks = ["1/5", "3/5", "3/5", "5/5"]
22 | let playerPictures = [
23 | ["Tigers-goalkeeper",
24 | "Tigers-d1", "Tigers-d2", "Tigers-d3", "Tigers-d4"],
25 | ["Tigers-m1", "Tigers-m2", "Tigers-m3", "Tigers-m4"],
26 | ["Tigers-f1", "Tigers-f2"]
27 | ]
28 | }
29 |
30 | struct Parrots: Team {
31 | let marks = ["3/5", "2/5", "4/5", "5/5"]
32 | let playerPictures = [
33 | ["Parrots-goalkeeper"],
34 | ["Parrots-d1", "Parrots-d2", "Parrots-d3", "Parrots-d4"],
35 | ["Parrots-m1", "Parrots-m2", "Parrots-m3", "Parrots-m4"],
36 | ["Parrots-f1", "Parrots-f2"]
37 | ]
38 | }
39 |
40 | struct Giraffes: Team {
41 | let marks = ["5/5", "4/5", "3/5", "1/5"]
42 | let playerPictures = [
43 | ["Giraffes-goalkeeper"],
44 | ["Giraffes-d1", "Giraffes-d2", "Giraffes-d3", "Giraffes-d4"],
45 | ["Giraffes-m1", "Giraffes-m2", "Giraffes-m3", "Giraffes-m4"],
46 | ["Giraffes-f1", "Giraffes-f2"]
47 | ]
48 | }
49 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Reusable Views/Cell/PlayerCell.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class PlayerCell: UICollectionViewCell {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var picture: UIImageView!
11 |
12 | // MARK: - View Life Cycle
13 |
14 | override func prepareForReuse() {
15 | super.prepareForReuse()
16 |
17 | picture.transform = .identity
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Reusable Views/Header View/HeaderView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class HeaderView: UICollectionReusableView {
8 |
9 |
10 | @IBOutlet weak var img: UIImageView!
11 |
12 |
13 |
14 | // MARK: - IBOutlets
15 | @IBOutlet weak var overlayView: UIView!
16 |
17 | // MARK: - Life Cycle
18 | public override func apply(_ layoutAttributes: UICollectionViewLayoutAttributes) {
19 | super.apply(layoutAttributes)
20 |
21 | guard let customFlowLayoutAttributes = layoutAttributes as? CustomLayoutAttributes else {
22 | return
23 | }
24 |
25 | overlayView?.alpha = customFlowLayoutAttributes.headerOverlayAlpha
26 | }
27 |
28 |
29 | override func awakeFromNib() {
30 | // img.layer.borderWidth = 3
31 | // img.layer.borderColor = UIColor.blue.cgColor
32 | // layer.borderWidth = 3
33 | // layer.borderColor = UIColor.systemPink.cgColor
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Reusable Views/Header View/HeaderView.xib:
--------------------------------------------------------------------------------
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 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Reusable Views/Menu View/MenuView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | protocol MenuViewDelegate {
8 | func reloadCollectionViewDataWithTeamIndex(_ index: Int)
9 | }
10 |
11 | final class MenuView: UICollectionReusableView {
12 |
13 | // MARK: - Properties
14 | var delegate: MenuViewDelegate?
15 |
16 | // MARK: - View Life Cycle
17 | override func prepareForReuse() {
18 | super.prepareForReuse()
19 |
20 | delegate = nil
21 | }
22 | }
23 |
24 | // MARK: - IBActions
25 | extension MenuView {
26 |
27 | @IBAction func tappedButton(_ sender: UIButton) {
28 | delegate?.reloadCollectionViewDataWithTeamIndex(sender.tag)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/Reusable Views/Section Header View/SectionHeaderView.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class SectionHeaderView: UICollectionReusableView {
8 |
9 | // MARK: - IBOutlets
10 | @IBOutlet weak var title: UILabel!
11 | }
12 |
--------------------------------------------------------------------------------
/easyStick/JungleCup/Sources/View Controllers/JungleCupCollectionViewController.swift:
--------------------------------------------------------------------------------
1 | /**
2 | * .
3 | */
4 |
5 | import UIKit
6 |
7 | final class JungleCupCollectionViewController: UICollectionViewController {
8 |
9 | // MARK: - Properties
10 | var customLayout: CustomLayout? {
11 | collectionView?.collectionViewLayout as? CustomLayout
12 | }
13 |
14 |
15 | override var prefersStatusBarHidden: Bool {
16 | true
17 | }
18 |
19 | // MARK: - View Life Cycle
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 |
23 | setupCollectionViewLayout()
24 | }
25 | }
26 |
27 | private extension JungleCupCollectionViewController {
28 |
29 | func setupCollectionViewLayout() {
30 |
31 | guard let collectionView = collectionView else { return }
32 |
33 | collectionView.register(
34 | UINib(nibName: "HeaderView", bundle: nil),
35 | forSupplementaryViewOfKind: CustomLayout.Element.header.kind,
36 | withReuseIdentifier: CustomLayout.Element.header.id
37 | )
38 |
39 | collectionView.register(
40 | UINib(nibName: "MenuView", bundle: nil),
41 | forSupplementaryViewOfKind: CustomLayout.Element.menu.kind,
42 | withReuseIdentifier: CustomLayout.Element.menu.id
43 | )
44 |
45 |
46 | }
47 | }
48 |
49 | //MARK: - UICollectionViewDataSource
50 | extension JungleCupCollectionViewController {
51 |
52 | override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
53 | return Tigers().playerPictures[section].count
54 | }
55 |
56 | override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
57 | let cell = collectionView.dequeueReusableCell(withReuseIdentifier: CustomLayout.Element.cell.id, for: indexPath)
58 | if let playerCell = cell as? PlayerCell {
59 | playerCell.picture.image = UIImage(named: Tigers().playerPictures[indexPath.section][indexPath.item])
60 | }
61 | return cell
62 | }
63 |
64 | override func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
65 | switch kind {
66 | case CustomLayout.Element.header.kind:
67 | let topHeaderView = collectionView.dequeueReusableSupplementaryView(
68 | ofKind: kind,
69 | withReuseIdentifier: CustomLayout.Element.header.id,
70 | for: indexPath
71 | )
72 | return topHeaderView
73 |
74 | case CustomLayout.Element.menu.kind:
75 | let menuView = collectionView.dequeueReusableSupplementaryView(
76 | ofKind: kind,
77 | withReuseIdentifier: CustomLayout.Element.menu.id,
78 | for: indexPath
79 | )
80 | if let menuView = menuView as? MenuView {
81 | menuView.delegate = self
82 | }
83 | return menuView
84 |
85 | default:
86 | return UICollectionReusableView()
87 | }
88 | }
89 | }
90 |
91 | // MARK: - MenuViewDelegate
92 | extension JungleCupCollectionViewController: MenuViewDelegate {
93 |
94 | func reloadCollectionViewDataWithTeamIndex(_ index: Int) {
95 |
96 |
97 | }
98 | }
99 |
--------------------------------------------------------------------------------