├── .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 | ![Drag](https://github.com/coyingcat/CardCollection/blob/master/Drag/DragAndDrop-CollectionView/DragDrop.gif) 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 | ![easy](https://github.com/coyingcat/CardCollection/blob/master/Src/aaa.gif) 33 | 34 | 35 | 36 | 37 | ### 2.2 原版,小小改动 38 | 39 | 40 | 41 | ![原版](https://github.com/coyingcat/CardCollection/blob/master/Src/custom-layout-parallax-gif-final.gif) 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 | ![new](https://github.com/coyingcat/CardCollection/blob/master/Src/1111.gif) 65 | 66 | 67 | ![tip](https://github.com/coyingcat/CardCollection/blob/master/Src/_wwwweee.png) 68 | 69 | 70 | Origin Card 71 | 72 | ![demo](https://github.com/MillmanY/MMCardView/blob/master/demo.gif) 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 | --------------------------------------------------------------------------------