├── .swift-version ├── Image ├── demo1.gif ├── demo2.gif └── logo.jpeg ├── .travis.yml ├── useCases ├── withCocoaPod │ ├── Podfile │ ├── Podfile.lock │ ├── SummerSliderDemo.xcodeproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ └── xcschemes │ │ │ │ └── SummerSliderDemo.xcscheme │ │ └── project.pbxproj │ └── SummerSlider │ │ ├── ViewController.swift │ │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ │ ├── VerticalViewController.swift │ │ ├── YoutubeStyleViewController.swift │ │ ├── Info.plist │ │ ├── AppDelegate.swift │ │ ├── HorizontalViewController.swift │ │ └── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard └── vastExample │ ├── Podfile │ ├── vastExample.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── project.pbxproj │ ├── Podfile.lock │ └── vastExample │ ├── ViewController.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Info.plist │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── AppDelegate.swift │ └── PlayerViewController.swift ├── SummerSlider.xcodeproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── project.pbxproj ├── SummerSlider ├── SummerSliderTypes.swift ├── Constants.swift ├── Slider.swift ├── VerticalSlider.swift ├── SliderFactory.swift ├── SummerSlider.h ├── SliderDrawingProtocol.swift ├── Info.plist ├── SummerSlider.swift └── HorizontalSlider.swift ├── SummerSlider.podspec ├── SummerSliderDemo ├── VerticalViewController.swift ├── YoutubeStyleViewController.swift ├── Info.plist ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── AppDelegate.swift └── HorizontalViewController.swift ├── LICENSE ├── .gitignore └── README.md /.swift-version: -------------------------------------------------------------------------------- 1 | 3.0 2 | -------------------------------------------------------------------------------- /Image/demo1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superbderrick/SummerSlider/HEAD/Image/demo1.gif -------------------------------------------------------------------------------- /Image/demo2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superbderrick/SummerSlider/HEAD/Image/demo2.gif -------------------------------------------------------------------------------- /Image/logo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/superbderrick/SummerSlider/HEAD/Image/logo.jpeg -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode11 3 | script: 4 | - xcodebuild 5 | 6 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'SummerSliderDemo' do 4 | pod 'SummerSlider', '~>0.3.0' 5 | 6 | 7 | end 8 | -------------------------------------------------------------------------------- /useCases/vastExample/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | platform :ios, '9.0' 3 | 4 | target 'vastExample' do 5 | pod 'SummerSlider', '~>0.3.0' 6 | pod 'GoogleAds-IMA-iOS-SDK', '~> 3.6' 7 | 8 | end 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /SummerSlider.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - SummerSlider (0.3.0) 3 | 4 | DEPENDENCIES: 5 | - SummerSlider (~> 0.3.0) 6 | 7 | SPEC CHECKSUMS: 8 | SummerSlider: a867d766a34fa21a85139a87f8ff83473065004f 9 | 10 | PODFILE CHECKSUM: 93f6dfba7bc87fddb64d5802b33e9e7d98f35530 11 | 12 | COCOAPODS: 1.3.1 13 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSliderDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SummerSlider.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /useCases/vastExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - GoogleAds-IMA-iOS-SDK (3.6.0) 3 | - SummerSlider (0.3.0) 4 | 5 | DEPENDENCIES: 6 | - GoogleAds-IMA-iOS-SDK (~> 3.6) 7 | - SummerSlider (~> 0.3.0) 8 | 9 | SPEC CHECKSUMS: 10 | GoogleAds-IMA-iOS-SDK: 193ca918ed33278c29c96683f500524bf788d509 11 | SummerSlider: a867d766a34fa21a85139a87f8ff83473065004f 12 | 13 | PODFILE CHECKSUM: 3fbab00c71c5d479f5cd1a98c7b3e1c5071a4daa 14 | 15 | COCOAPODS: 1.3.1 16 | -------------------------------------------------------------------------------- /SummerSlider/SummerSliderTypes.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SummerSliderTypes.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 25/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | public enum DrawingMode { 13 | case BothSides 14 | case UnselectedOnly 15 | case SelectedOnly 16 | case WithoutMarks 17 | } 18 | 19 | public enum SliderStyle { 20 | case Horizontal 21 | case Vertical 22 | } 23 | -------------------------------------------------------------------------------- /SummerSlider/Constants.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Constants.swift 3 | // SummerSliderSample 4 | // 5 | // Created by Kang Jinyeoung on 03/09/2017. 6 | // Copyright © 2017 Sensation. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | struct Constants { 12 | struct INNER_RECT { 13 | static let X : CGFloat = 1.0 14 | static let Y : CGFloat = 10.0 15 | } 16 | 17 | struct SLIDER { 18 | static let WHOLE_PERCENT : CGFloat = 100.0 19 | } 20 | 21 | } 22 | 23 | -------------------------------------------------------------------------------- /SummerSlider/Slider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Slider.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 26/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct Slider{ 12 | var iMarkColor : UIColor 13 | var iSelectedBarColor : UIColor 14 | var iUnSelectedBarColor : UIColor 15 | var iMarkWidth : Float 16 | var iMarkPositions : Array 17 | var iDrawingMode : DrawingMode 18 | var style: SliderStyle 19 | } 20 | 21 | -------------------------------------------------------------------------------- /SummerSlider/VerticalSlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sliders.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 26/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct VerticalSlider: SliderDrawingProtocol{ 13 | var slider: Slider 14 | 15 | init(slider: Slider){ 16 | self.slider = slider 17 | } 18 | 19 | func getDrawingImage(rect: CGRect) -> (UIImage,UIImage) { 20 | return (UIImage(),UIImage()) 21 | } 22 | 23 | } 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /SummerSlider/SliderFactory.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SliderFactory.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 26/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct SliderFactory{ 13 | static func getSlider(slider: Slider)->SliderDrawingProtocol { 14 | switch slider.style { 15 | case .Horizontal: 16 | return HorizontalSlider(slider: slider) 17 | case .Vertical: 18 | return VerticalSlider(slider: slider) 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /SummerSlider/SummerSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // SummerSlider.h 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for SummerSlider. 12 | FOUNDATION_EXPORT double SummerSliderVersionNumber; 13 | 14 | //! Project version string for SummerSlider. 15 | FOUNDATION_EXPORT const unsigned char SummerSliderVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /SummerSlider/SliderDrawingProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SliderDrawingProtocol.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 26/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | protocol SliderDrawingProtocol { 12 | func getDrawingImage(rect : CGRect)->(UIImage,UIImage) 13 | } 14 | 15 | protocol DrawAPIProtocol { 16 | func drawMarks(_ context:CGContext ,_ innerRect : CGRect , _ markColor:CGColor ,_ marks:Array! ,_ markWidth:Float)->Void 17 | func drawRect(_ context:CGContext ,_ innerRect : CGRect , _ rectColr:CGColor)->Void 18 | } 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SummerSlider.podspec: -------------------------------------------------------------------------------- 1 | 2 | Pod::Spec.new do |s| 3 | s.name = 'SummerSlider' 4 | s.version = '0.3.0' 5 | s.summary = 'Custom UISlider library ' 6 | s.description = <<-DESC 7 | TODO: The iOS Custom Slider library that can distinguish the parts where the advertisement of the video player comes out. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/superbderrick/SummerSlider' 11 | s.license = { :type => 'MIT', :file => 'LICENSE' } 12 | s.author = { 'SuperbDerrick' => 'kang.derrick@gmail.com' } 13 | s.source = { :git => 'https://github.com/superbderrick/SummerSlider.git', :tag => s.version.to_s } 14 | 15 | s.ios.deployment_target = '8.0' 16 | s.source_files = 'SummerSlider/*.swift' 17 | 18 | 19 | end 20 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by kang.derrick@gmail.com on 09/09/2017. 6 | // Copyright (c) 2017 kang.derrick@gmail.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SummerSlider 11 | 12 | class ViewController: UIViewController { 13 | 14 | var testSlider1:SummerSlider! 15 | var testSlider2:SummerSlider! 16 | var testSlider3:SummerSlider! 17 | var testSlider4:SummerSlider! 18 | var testSlider5:SummerSlider! 19 | 20 | override func viewDidLoad() { 21 | super.viewDidLoad() 22 | 23 | 24 | 25 | } 26 | 27 | override func didReceiveMemoryWarning() { 28 | super.didReceiveMemoryWarning() 29 | // Dispose of any resources that can be recreated. 30 | } 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /SummerSlider/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 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // vastExample 4 | // 5 | // Created by Kang Jinyeoung on 10/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | class ViewController: UIViewController { 13 | 14 | 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | // Do any additional setup after loading the view, typically from a nib. 19 | } 20 | 21 | override func didReceiveMemoryWarning() { 22 | super.didReceiveMemoryWarning() 23 | // Dispose of any resources that can be recreated. 24 | } 25 | 26 | @IBAction func playVideo(_ sender: Any) { 27 | 28 | let signUpVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "playerController") 29 | self.navigationController?.pushViewController(signUpVC, animated: true) 30 | } 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/Images.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 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /SummerSliderDemo/VerticalViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VerticalViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class VerticalViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /SummerSliderDemo/YoutubeStyleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // YoutubeStyleViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class YoutubeStyleViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/VerticalViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VerticalViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class VerticalViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/YoutubeStyleViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // YoutubeStyleViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class YoutubeStyleViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | // Do any additional setup after loading the view. 17 | } 18 | 19 | override func didReceiveMemoryWarning() { 20 | super.didReceiveMemoryWarning() 21 | // Dispose of any resources that can be recreated. 22 | } 23 | 24 | 25 | /* 26 | // MARK: - Navigation 27 | 28 | // In a storyboard-based application, you will often want to do a little preparation before navigation 29 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 30 | // Get the new view controller using segue.destinationViewController. 31 | // Pass the selected object to the new view controller. 32 | } 33 | */ 34 | 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 kang.derrick@gmail.com 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/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 | CFBundleSignature 20 | ???? 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 | UIInterfaceOrientationLandscapeLeft 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /SummerSliderDemo/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 | UIInterfaceOrientationLandscapeLeft 34 | UIInterfaceOrientationLandscapeRight 35 | 36 | UISupportedInterfaceOrientations~ipad 37 | 38 | UIInterfaceOrientationPortrait 39 | UIInterfaceOrientationPortraitUpsideDown 40 | UIInterfaceOrientationLandscapeLeft 41 | UIInterfaceOrientationLandscapeRight 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/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 | LSApplicationCategoryType 22 | 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | 42 | UISupportedInterfaceOrientations~ipad 43 | 44 | UIInterfaceOrientationPortrait 45 | UIInterfaceOrientationPortraitUpsideDown 46 | UIInterfaceOrientationLandscapeLeft 47 | UIInterfaceOrientationLandscapeRight 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | .build/ 41 | 42 | # CocoaPods 43 | # 44 | # We recommend against adding the Pods directory to your .gitignore. However 45 | # you should judge for yourself, the pros and cons are mentioned at: 46 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 47 | # 48 | # Pods/ 49 | 50 | # Carthage 51 | # 52 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 53 | # Carthage/Checkouts 54 | 55 | Carthage/Build 56 | 57 | # fastlane 58 | # 59 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 60 | # screenshots whenever they are needed. 61 | # For more information about the recommended setup visit: 62 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 63 | 64 | fastlane/report.xml 65 | fastlane/Preview.html 66 | fastlane/screenshots 67 | fastlane/test_output 68 | -------------------------------------------------------------------------------- /SummerSliderDemo/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 | 27 | 28 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/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 | 27 | 28 | -------------------------------------------------------------------------------- /SummerSliderDemo/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 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /SummerSliderDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SummerSliderDemo 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // vastExample 4 | // 5 | // Created by Kang Jinyeoung on 10/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // SummerSlider 4 | // 5 | // Created by kang.derrick@gmail.com on 09/09/2017. 6 | // Copyright (c) 2017 kang.derrick@gmail.com. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /SummerSlider/SummerSlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SummerSlider.swift 3 | // SummerSliderSample 4 | // 5 | // Created by derrick on 30/08/2017. 6 | // Copyright © 2017 Sensation. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @IBDesignable public class SummerSlider: UISlider { 12 | 13 | @IBInspectable public var markColor : UIColor! 14 | @IBInspectable public var markPositions : Array! 15 | @IBInspectable public var selectedBarColor : UIColor! 16 | @IBInspectable public var unselectedBarColor : UIColor! 17 | 18 | public var markWidth : Float! 19 | public var drawingMode : DrawingMode! 20 | 21 | public override init(frame: CGRect) { 22 | super.init(frame: frame) 23 | 24 | self.setupDefaultValues() 25 | } 26 | 27 | required public init?(coder aDecoder: NSCoder) { 28 | super.init(coder: aDecoder) 29 | self.setupDefaultValues() 30 | } 31 | 32 | public func reDraw() { 33 | self.setNeedsDisplay() 34 | } 35 | 36 | override public func draw(_ rect: CGRect) { 37 | super.draw(rect) 38 | 39 | var sliders = [Slider]() 40 | 41 | sliders.append(Slider(iMarkColor: self.markColor , iSelectedBarColor: self.selectedBarColor , iUnSelectedBarColor: self.unselectedBarColor , iMarkWidth: self.markWidth , iMarkPositions: self.markPositions , iDrawingMode: self.drawingMode , style: SliderStyle.Horizontal)) 42 | 43 | sliders.append(Slider(iMarkColor: self.markColor , iSelectedBarColor: self.selectedBarColor , iUnSelectedBarColor: self.unselectedBarColor , iMarkWidth: self.markWidth , iMarkPositions: self.markPositions , iDrawingMode: self.drawingMode , style: SliderStyle.Vertical)) 44 | 45 | let horizontalSlider = SliderFactory.getSlider(slider: sliders[0]) 46 | 47 | let Image = horizontalSlider.getDrawingImage(rect: rect) 48 | 49 | setupTrackRange(Image.0, Image.1) 50 | } 51 | 52 | private func setupDefaultValues(){ 53 | self.markColor = UIColor.white 54 | self.markWidth = 1.0 55 | self.selectedBarColor = UIColor.white 56 | self.unselectedBarColor = UIColor.black 57 | self.markPositions = Array() 58 | 59 | self.drawingMode = DrawingMode.BothSides 60 | } 61 | 62 | private func setupTrackRange(_ selectedStripSide:UIImage , _ unselectedStripSide:UIImage) { 63 | self.setMinimumTrackImage(selectedStripSide, for: UIControl.State.normal) 64 | self.setMaximumTrackImage(unselectedStripSide, for: UIControl.State.normal) 65 | } 66 | 67 | } 68 | -------------------------------------------------------------------------------- /SummerSliderDemo/HorizontalViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HorizontalViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SummerSlider 11 | class HorizontalViewController: UIViewController { 12 | 13 | 14 | var testSlider1:SummerSlider! 15 | var testSlider2:SummerSlider! 16 | var testSlider3:SummerSlider! 17 | 18 | let testRect1 = CGRect(x:30 ,y:70 , width:300 , height:30) 19 | let testRect2 = CGRect(x:30 ,y:120 , width:300 , height:30) 20 | let testRect3 = CGRect(x:30 ,y:170 , width:300 , height:30) 21 | 22 | @IBOutlet weak var testSlider4: SummerSlider! 23 | @IBOutlet weak var testSlider5: SummerSlider! 24 | @IBOutlet weak var testSlider6: SummerSlider! 25 | 26 | 27 | override func viewDidLoad() { 28 | super.viewDidLoad() 29 | 30 | var marksArray1 = Array() 31 | marksArray1 = [0,10,20,30,40,50,60,70,80,90,100] 32 | testSlider1 = SummerSlider(frame: testRect1) 33 | testSlider1.selectedBarColor = UIColor.blue 34 | testSlider1.unselectedBarColor = UIColor.red 35 | testSlider1.markColor = UIColor.yellow 36 | testSlider1.markWidth = 2.0 37 | testSlider1.markPositions = marksArray1 38 | 39 | 40 | var marksArray2 = Array() 41 | marksArray2 = [10.0,15.0,23.0,67.0,71.0] 42 | testSlider2 = SummerSlider(frame: testRect2) 43 | testSlider2.selectedBarColor = UIColor(red:138/255.0 ,green:255/255.0 ,blue:0/255 ,alpha:1.0) 44 | testSlider2.unselectedBarColor = UIColor(red:108/255.0 ,green:200/255.0 ,blue:0/255.0 ,alpha:1.0) 45 | testSlider2.markColor = UIColor.red 46 | testSlider2.markWidth = 1.0 47 | testSlider2.markPositions = marksArray2 48 | 49 | testSlider3 = SummerSlider(frame: testRect3) 50 | 51 | var marksArray3 = Array() 52 | marksArray3 = [20.0,15.0,23.0,67.0, 90.0] 53 | testSlider3 = SummerSlider(frame: testRect3) 54 | testSlider3.selectedBarColor = UIColor.blue 55 | testSlider3.unselectedBarColor = UIColor(red:20/255.0 ,green:40/255.0 ,blue:0/255.0 ,alpha:1.0) 56 | testSlider3.markColor = UIColor.gray 57 | testSlider3.markWidth = 10.0 58 | testSlider3.markPositions = marksArray3 59 | 60 | 61 | self.view.addSubview(testSlider1) 62 | self.view.addSubview(testSlider2) 63 | self.view.addSubview(testSlider3) 64 | 65 | 66 | var marksArray4 = Array() 67 | marksArray4 = [0.0,25.0,90.0] 68 | testSlider4.markPositions = marksArray4 69 | 70 | var marksArray5 = Array() 71 | marksArray5 = [10.0,20.0,30.0,80,90.0] 72 | testSlider5.markPositions = marksArray5 73 | 74 | var marksArray6 = Array() 75 | marksArray6 = [0,12,23,34,45,56,77,99] 76 | testSlider6.selectedBarColor = UIColor.white 77 | testSlider6.unselectedBarColor = UIColor.black 78 | testSlider6.markColor = UIColor.orange 79 | testSlider6.markWidth = 6.0 80 | testSlider6.markPositions = marksArray6 81 | 82 | 83 | } 84 | 85 | 86 | 87 | } 88 | -------------------------------------------------------------------------------- /SummerSlider/HorizontalSlider.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Sliders.swift 3 | // SummerSlider 4 | // 5 | // Created by derrick on 26/09/2017. 6 | // Copyright © 2017 SuperbDerrick. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | struct HorizontalSlider: SliderDrawingProtocol , DrawAPIProtocol{ 13 | 14 | var slider: Slider 15 | 16 | init(slider: Slider){ 17 | self.slider = slider 18 | } 19 | 20 | func getDrawingImage(rect : CGRect) -> (UIImage,UIImage) { 21 | 22 | // Basic Setup to make a Inner Rect. 23 | let innerRect = rect.insetBy(dx: Constants.INNER_RECT.X, dy: Constants.INNER_RECT.Y) 24 | UIGraphicsBeginImageContextWithOptions(innerRect.size ,false , 0) 25 | let context = UIGraphicsGetCurrentContext()! 26 | 27 | // Draw Selection Rect. 28 | drawRect(context, innerRect , slider.iSelectedBarColor.cgColor) 29 | 30 | // Make Selection Image. 31 | let selectedSide = UIGraphicsGetImageFromCurrentImageContext() 32 | selectedSide!.resizableImage(withCapInsets: UIEdgeInsets.zero) 33 | 34 | // Draw UNSelection Rect. 35 | drawRect(context, innerRect , slider.iUnSelectedBarColor.cgColor) 36 | 37 | // Make UNSelection Image. 38 | let unSelectedSide = UIGraphicsGetImageFromCurrentImageContext() 39 | unSelectedSide!.resizableImage(withCapInsets: UIEdgeInsets.zero) 40 | 41 | // Draw Selection Image. 42 | selectedSide!.draw(at: CGPoint(x:0,y:0)) 43 | 44 | 45 | // Draw Selection Marks. slider.iMarkColor.cgColor, slider.iMarkPositions, slider.iMarkWidth 46 | drawMarks(context, innerRect, slider.iMarkColor.cgColor , slider.iMarkPositions , slider.iMarkWidth ) 47 | 48 | 49 | let selectedStripSide = UIGraphicsGetImageFromCurrentImageContext()!.resizableImage(withCapInsets: UIEdgeInsets.zero) 50 | 51 | // Draw UNSelection Image. 52 | unSelectedSide!.draw(at: CGPoint(x:0,y:0)) 53 | 54 | 55 | drawMarks(context, innerRect, slider.iMarkColor.cgColor, slider.iMarkPositions, slider.iMarkWidth) 56 | 57 | 58 | let unselectedStripSide = UIGraphicsGetImageFromCurrentImageContext()!.resizableImage(withCapInsets: UIEdgeInsets.zero) 59 | 60 | UIGraphicsEndImageContext() 61 | 62 | return (selectedStripSide,unselectedStripSide) 63 | } 64 | 65 | func drawMarks(_ context: CGContext, _ innerRect: CGRect, _ markColor: CGColor, _ marks: Array!, _ markWidth: Float) { 66 | 67 | for mark in marks { 68 | context.setLineWidth(CGFloat(markWidth)) 69 | let markWidth = CGFloat(mark) 70 | let postion:CGFloat! = CGFloat((innerRect.width * markWidth ) / Constants.SLIDER.WHOLE_PERCENT) 71 | context.move(to: CGPoint(x: postion, y: innerRect.height / 2 - 5)) 72 | context.addLine(to: CGPoint(x: postion, y: innerRect.height / 2 + 5)) 73 | context.setStrokeColor(markColor) 74 | context.strokePath() 75 | } 76 | 77 | } 78 | 79 | func drawRect(_ context:CGContext ,_ innerRect : CGRect , _ rectColr:CGColor)->Void { 80 | context.setLineCap(CGLineCap.round); 81 | context.setLineWidth(12.0) 82 | context.move(to: CGPoint(x: 6, y: innerRect.height / 2)) 83 | context.addLine(to: CGPoint(x: innerRect.width - 10, y: innerRect.height / 2)) 84 | context.setStrokeColor(rectColr) 85 | context.strokePath() 86 | } 87 | 88 | } 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/HorizontalViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HorizontalViewController.swift 3 | // SummerSlider 4 | // 5 | // Created by Kang Jinyeoung on 24/09/2017. 6 | // Copyright © 2017 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import SummerSlider 11 | class HorizontalViewController: UIViewController { 12 | 13 | var testSlider1:SummerSlider! 14 | var testSlider2:SummerSlider! 15 | var testSlider3:SummerSlider! 16 | 17 | @IBOutlet weak var testSlider4: SummerSlider! 18 | @IBOutlet weak var testSlider5: SummerSlider! 19 | @IBOutlet weak var testSlider6: SummerSlider! 20 | 21 | let testRect1 = CGRect(x:30 ,y:70 , width:300 , height:30) 22 | let testRect2 = CGRect(x:30 ,y:120 , width:300 , height:30) 23 | let testRect3 = CGRect(x:30 ,y:170 , width:300 , height:30) 24 | 25 | 26 | 27 | 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | 32 | var marksArray1 = Array() 33 | marksArray1 = [0,10,20,30,40,50,60,70,80,90,100] 34 | testSlider1 = SummerSlider(frame: testRect1) 35 | testSlider1.selectedBarColor = UIColor.blue 36 | testSlider1.unselectedBarColor = UIColor.red 37 | testSlider1.markColor = UIColor.yellow 38 | testSlider1.markWidth = 2.0 39 | testSlider1.markPositions = marksArray1 40 | 41 | 42 | var marksArray2 = Array() 43 | marksArray2 = [10.0,15.0,23.0,67.0,71.0] 44 | testSlider2 = SummerSlider(frame: testRect2) 45 | testSlider2.selectedBarColor = UIColor(red:138/255.0 ,green:255/255.0 ,blue:0/255 ,alpha:1.0) 46 | testSlider2.unselectedBarColor = UIColor(red:108/255.0 ,green:200/255.0 ,blue:0/255.0 ,alpha:1.0) 47 | testSlider2.markColor = UIColor.red 48 | testSlider2.markWidth = 1.0 49 | testSlider2.markPositions = marksArray2 50 | 51 | testSlider3 = SummerSlider(frame: testRect3) 52 | 53 | var marksArray3 = Array() 54 | marksArray3 = [20.0,15.0,23.0,67.0, 90.0] 55 | testSlider3 = SummerSlider(frame: testRect3) 56 | testSlider3.selectedBarColor = UIColor.blue 57 | testSlider3.unselectedBarColor = UIColor(red:20/255.0 ,green:40/255.0 ,blue:0/255.0 ,alpha:1.0) 58 | testSlider3.markColor = UIColor.gray 59 | testSlider3.markWidth = 10.0 60 | testSlider3.markPositions = marksArray3 61 | 62 | self.view.addSubview(testSlider1) 63 | self.view.addSubview(testSlider2) 64 | self.view.addSubview(testSlider3) 65 | 66 | 67 | var marksArray4 = Array() 68 | marksArray4 = [0.0,25.0,90.0] 69 | testSlider4.selectedBarColor = UIColor.purple 70 | testSlider4.unselectedBarColor = UIColor.brown 71 | testSlider4.markColor = UIColor.gray 72 | testSlider4.markWidth = 3.0 73 | testSlider4.markPositions = marksArray4 74 | 75 | var marksArray5 = Array() 76 | marksArray5 = [10.0,20.0,30.0 , 80,90.0] 77 | testSlider5.selectedBarColor = UIColor.cyan 78 | testSlider5.unselectedBarColor = UIColor.red 79 | testSlider5.markColor = UIColor.green 80 | testSlider5.markWidth = 1.0 81 | testSlider5.markPositions = marksArray5 82 | 83 | var marksArray6 = Array() 84 | marksArray6 = [0,12,23,34,45,56,77,99] 85 | testSlider6.selectedBarColor = UIColor.white 86 | testSlider6.unselectedBarColor = UIColor.black 87 | testSlider6.markColor = UIColor.orange 88 | testSlider6.markWidth = 6.0 89 | testSlider6.markPositions = marksArray6 90 | 91 | 92 | } 93 | 94 | 95 | 96 | } 97 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSliderDemo.xcodeproj/xcshareddata/xcschemes/SummerSliderDemo.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 45 | 46 | 48 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 80 | 82 | 88 | 89 | 90 | 91 | 92 | 93 | 99 | 101 | 107 | 108 | 109 | 110 | 112 | 113 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SummerSlider 2 | ![Swift](https://img.shields.io/badge/Swift-3.0-orange.svg) 3 | ![Swift](https://img.shields.io/badge/Swift-4.0-orange.svg) 4 | ![Swift](https://img.shields.io/badge/Swift-5.0-orange.svg) 5 | 6 | [![CI Status](http://img.shields.io/travis/superbderrick/SummerSlider.svg?style=flat)](https://travis-ci.org/superbderrick/SummerSlider) 7 | [![Version](https://img.shields.io/cocoapods/v/SummerSlider.svg?style=flat)](http://cocoapods.org/pods/SummerSlider) 8 | [![License](https://img.shields.io/cocoapods/l/SummerSlider.svg?style=flat)](http://cocoapods.org/pods/SummerSlider) 9 | [![Platform](https://img.shields.io/cocoapods/p/SummerSlider.svg?style=flat)](http://cocoapods.org/pods/SummerSlider) 10 | [![HitCount](http://hits.dwyl.com/superbderrick/https://githubcom/superbderrick/SummerSlider.svg)](http://hits.dwyl.com/superbderrick/https://githubcom/superbderrick/SummerSlider) 11 | 12 | ![](https://github.com/superbderrick/SummerSlider/blob/master/Image/logo.jpeg) 13 | 14 | ## SummerSlider 15 | 16 | 17 | SummerSlider is an iOS Custom Slider library 18 | It's available with variety usecases like (typically custome ui slider and video-related apps) 19 | Besides the repository introduces various usecase samples with SummerSlider 20 | 21 | ## UseCases 22 | - Youtube Player UI scenario 23 | It s 24 | s some parts for advertisement separator sections during entire video duration 25 | 26 | - IMA SDK (VAST) with AVPLAYER 27 | 28 | If you used Google IMA SDK with AVPLAYER , the summer slider is a very useful and suitable 29 | vast sample code was intergrated and explained how to use for some vase usecases such as midrole and prerole cases 30 | 31 | ## Demo 32 | #### Basic 33 | ![demo1](https://github.com/superbderrick/SummerSlider/blob/master/Image/demo1.gif) 34 | #### Usecase(IMA SDK) 35 | ![demo2](https://github.com/superbderrick/SummerSlider/blob/master/Image/demo2.gif) 36 | 37 | 38 | ## Requirements 39 | - Swift 3,4.0,5.0 40 | - iOS 8.0+ 41 | - Xcode 8 42 | 43 | ## How to install 44 | SummerSlider is available through [CocoaPods](http://cocoapods.org). To install 45 | it, simply add the following line to your Podfile: 46 | 47 | Swift 3.0 48 | ```ruby 49 | pod 'SummerSlider', '~>0.2.0' 50 | ``` 51 | 52 | Swift 4.0 53 | ```ruby 54 | pod 'SummerSlider', '~>0.3.0' 55 | ``` 56 | 57 | Swift 5.0 58 | ```ruby 59 | pod 'SummerSlider', '~>0.4.0' 60 | ``` 61 | 62 | 63 | #### Classic and ancient way 64 | Copy into your project the following files: 65 | `SummerSlider.swift` , `Constants.swift`, 66 | `HorizontalSlider.swift`,`Slider.swift`,`SliderDrawingProtocol.swift`,`SliderFactory.swift`, 67 | `SummerSliderTypes.swift`,`VerticalSlider.swift`, 68 | 69 | 70 | How to use it? 71 | ------------ 72 | #### First way (User Interface): 73 | 74 | Add an UISlider outlet to your view using the User Interface and set `SummerSlider` as the custom class. Mostly the exposed properties are marked with **@IBInspectable**, so you can customize them in storyboard's attributes inspector and preview it directly. 75 | 76 | 77 | Link it with the outlet property if you want to access its properties: 78 | 79 | @IBOutlet weak var sampleSlider: SummerSlider! 80 | 81 | Simply customize it! (take a look at -Customization- section) 82 | ``` 83 | var sampleArray = Array() 84 | sampleArray = [0,12,23,34,45,56,77,99] 85 | sampleSlider.selectedBarColor = UIColor.white 86 | sampleSlider.unselectedBarColor = UIColor.black 87 | sampleSlider.markColor = UIColor.orange 88 | sampleSlider.markWidth = 2.0 89 | sampleSlider.markPositions = sampleArray 90 | ``` 91 | 92 | 93 | Second way (Using code) - **Preferred** 94 | 95 | 96 | It is really easy to set it! Firstly, import SummerSlider. 97 | 98 | import SummerSlider 99 | 100 | 101 | Instantiate and customize it (again, take a look at -Customization- section). Finally add it to the desired view as usual: 102 | ``` 103 | 104 | let testRect1 = CGRect(x:30 ,y:70 , width:300 ,height:30) 105 | var marksArray1 = Array() 106 | marksArray1 = [0,10,20,30,40,50,60,70,80,90,100] 107 | secondSlider = SummerSlider(frame: testRect1) 108 | secondSlider.selectedBarColor = UIColor.blue 109 | secondSlider.unselectedBarColor = UIColor.red 110 | secondSlider.markColor = UIColor.yellow 111 | secondSlider.markWidth = 2.0 112 | secondSlider.markPositions = marksArray1 113 | self.view.addSubview(secondSlider) 114 | ``` 115 | 116 | 117 | Setting the marks 118 | ------------ 119 | You can set the marks using a percentage system from 0 to 100 (Percent). Set all the marks in the `markPositions array` property: 120 | ``` 121 | summerSlider.markPositions = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 122 | ``` 123 | 124 | Customization 125 | ------------ 126 | Here you can see a bunch of parameters that you can change: 127 | 128 | #### Marks 129 | - `markColor` : UIColor - Customize the color of the marks. 130 | - `markWidth`: Float - Customize the width of the marks. 131 | - `markPositions`: [Float] - Set in a percentage system from 0 to 100 where the marks should be placed. 132 | 133 | #### Bar colors 134 | - `selectedBarColor`: UIColor - Customize the color of the selected side of the slider. 135 | - `unselectedBarColor`: UIColor - Customize the color of the unselected side of the slider. 136 | 137 | ## Author 138 | 139 | SuperbDerrick, kang.derrick@gmail.com 140 | 141 | ## References 142 | Please Let me know pull request or if you want to use this library in your application. 143 | 144 | ## License 145 | 146 | SummerSlider is available under the MIT license. See the LICENSE file for more info. 147 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/PlayerViewController.swift: -------------------------------------------------------------------------------- 1 | import AVFoundation 2 | import GoogleInteractiveMediaAds 3 | import UIKit 4 | import SummerSlider 5 | class PlayerViewController: UIViewController, IMAAdsLoaderDelegate, IMAAdsManagerDelegate { 6 | 7 | static let kTestAppContentUrl = "http://rmcdn.2mdn.net/Demo/html5/output.mp4" 8 | 9 | static let kTestAppAdTagUrl = 10 | "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&" + 11 | "iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&" + 12 | "output=vast&unviewed_position_start=1&" + 13 | "cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpost&cmsid=496&vid=short_onecue&" + 14 | "correlator="; 15 | 16 | struct POSITION { 17 | static let ZERO : Float = 0.0 18 | static let END : Float = 100.0 19 | } 20 | 21 | @IBOutlet weak var videoView: UIView! 22 | var contentPlayer: AVPlayer? 23 | var playerLayer: AVPlayerLayer? 24 | 25 | var contentPlayhead: IMAAVPlayerContentPlayhead? 26 | var adsLoader: IMAAdsLoader! 27 | var adsManager: IMAAdsManager! 28 | 29 | @IBOutlet weak var summerSlider: SummerSlider! 30 | 31 | 32 | override func viewDidLoad() { 33 | super.viewDidLoad() 34 | 35 | setUpContentPlayer() 36 | setUpAdsLoader() 37 | requestAds() 38 | 39 | // setup For SummerSlider. 40 | 41 | setUpSummerSlider() 42 | } 43 | 44 | override func viewDidAppear(_ animated: Bool) { 45 | playerLayer?.frame = self.videoView.layer.bounds 46 | } 47 | 48 | func setUpContentPlayer() { 49 | // Load AVPlayer with path to our content. 50 | guard let contentURL = URL(string: PlayerViewController.kTestAppContentUrl) else { 51 | print("ERROR: please use a valid URL for the content URL") 52 | return 53 | } 54 | contentPlayer = AVPlayer(url: contentURL) 55 | 56 | // Create a player layer for the player. 57 | playerLayer = AVPlayerLayer(player: contentPlayer) 58 | 59 | // Size, position, and display the AVPlayer. 60 | playerLayer?.frame = videoView.layer.bounds 61 | videoView.layer.addSublayer(playerLayer!) 62 | 63 | // Set up our content playhead and contentComplete callback. 64 | contentPlayhead = IMAAVPlayerContentPlayhead(avPlayer: contentPlayer) 65 | NotificationCenter.default.addObserver( 66 | self, 67 | selector: #selector(PlayerViewController.contentDidFinishPlaying(_:)), 68 | name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, 69 | object: contentPlayer?.currentItem); 70 | 71 | } 72 | 73 | @objc func contentDidFinishPlaying(_ notification: Notification) { 74 | // Make sure we don't call contentComplete as a result of an ad completing. 75 | if (notification.object as! AVPlayerItem) == contentPlayer?.currentItem { 76 | adsLoader.contentComplete() 77 | } 78 | } 79 | 80 | func setUpAdsLoader() { 81 | adsLoader = IMAAdsLoader(settings: nil) 82 | adsLoader.delegate = self 83 | } 84 | 85 | func requestAds() { 86 | // Create ad display container for ad rendering. 87 | let adDisplayContainer = IMAAdDisplayContainer(adContainer: videoView, companionSlots: nil) 88 | // Create an ad request with our ad tag, display container, and optional user context. 89 | let request = IMAAdsRequest( 90 | adTagUrl: PlayerViewController.kTestAppAdTagUrl, 91 | adDisplayContainer: adDisplayContainer, 92 | contentPlayhead: contentPlayhead, 93 | userContext: nil) 94 | 95 | adsLoader.requestAds(with: request) 96 | } 97 | 98 | // MARK: - IMAAdsLoaderDelegate 99 | 100 | func adsLoader(_ loader: IMAAdsLoader!, adsLoadedWith adsLoadedData: IMAAdsLoadedData!) { 101 | // Grab the instance of the IMAAdsManager and set ourselves as the delegate. 102 | adsManager = adsLoadedData.adsManager 103 | adsManager.delegate = self 104 | 105 | // Create ads rendering settings and tell the SDK to use the in-app browser. 106 | let adsRenderingSettings = IMAAdsRenderingSettings() 107 | adsRenderingSettings.webOpenerPresentingController = self 108 | 109 | // Initialize the ads manager. 110 | adsManager.initialize(with: adsRenderingSettings) 111 | 112 | 113 | 114 | // Draw Ad postions with SummerSlider appropriately. 115 | var adPositions = Array(); 116 | if self.adsManager != nil { 117 | if self.adsManager!.adCuePoints.count > 0 { 118 | for mark in self.adsManager!.adCuePoints { 119 | let position = mark as! Float 120 | if position == 0 { 121 | adPositions.append(POSITION.ZERO) 122 | } else if position == -1 { 123 | adPositions.append(POSITION.END) 124 | } else { 125 | let duration = getDuration() 126 | let postionTime :Float64 = Float64(position * 100) 127 | let pointPercent = postionTime / duration 128 | adPositions.append(Float(pointPercent)) 129 | } 130 | } 131 | } else if self.adsManager!.adCuePoints.count == 0 { 132 | adPositions.append(POSITION.ZERO) 133 | } 134 | } 135 | 136 | summerSlider.markPositions = adPositions 137 | summerSlider.reDraw() 138 | } 139 | 140 | func adsLoader(_ loader: IMAAdsLoader!, failedWith adErrorData: IMAAdLoadingErrorData!) { 141 | print("Error loading ads: \(adErrorData.adError.message)") 142 | contentPlayer?.play() 143 | } 144 | 145 | // MARK: - IMAAdsManagerDelegate 146 | 147 | func adsManager(_ adsManager: IMAAdsManager!, didReceive event: IMAAdEvent!) { 148 | if event.type == IMAAdEventType.LOADED { 149 | // When the SDK notifies us that ads have been loaded, play them. 150 | adsManager.start() 151 | } 152 | } 153 | 154 | func adsManager(_ adsManager: IMAAdsManager!, didReceive error: IMAAdError!) { 155 | // Something went wrong with the ads manager after ads were loaded. Log the error and play the 156 | // content. 157 | print("AdsManager error: \(error.message)") 158 | contentPlayer?.play() 159 | } 160 | 161 | func adsManagerDidRequestContentPause(_ adsManager: IMAAdsManager!) { 162 | // The SDK is going to play ads, so pause the content. 163 | contentPlayer?.pause() 164 | } 165 | 166 | func adsManagerDidRequestContentResume(_ adsManager: IMAAdsManager!) { 167 | // The SDK is done playing ads (at least for now), so resume the content. 168 | contentPlayer?.play() 169 | } 170 | 171 | // Get the duration value from the player item. 172 | func getPlayerItemDuration(_ item: AVPlayerItem) -> CMTime { 173 | var itemDuration = kCMTimeInvalid 174 | if (item.responds(to: #selector(getter: CAMediaTiming.duration))) { 175 | itemDuration = item.duration 176 | } else { 177 | if (item.asset.responds(to: #selector(getter: CAMediaTiming.duration))) { 178 | itemDuration = item.asset.duration 179 | } 180 | } 181 | return itemDuration 182 | } 183 | 184 | func getDuration() -> Float64 { 185 | var wholeTime :Float64 = 0 186 | if self.contentPlayer != nil { 187 | let controller: PlayerViewController = self 188 | let duration = controller.getPlayerItemDuration(self.contentPlayer!.currentItem!) 189 | 190 | wholeTime = CMTimeGetSeconds(duration) 191 | } 192 | return wholeTime 193 | } 194 | 195 | 196 | // MARK: - Regarding of SummerSlider API. 197 | 198 | func setUpSummerSlider() { 199 | // Other properties ​​have already been set from storyboard. 200 | summerSlider.markWidth = 3.0 201 | } 202 | 203 | } 204 | 205 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample/Base.lproj/Main.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 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /SummerSliderDemo/Base.lproj/Main.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 | 27 | 28 | 29 | 30 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSlider/Base.lproj/Main.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 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /useCases/vastExample/vastExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4900C4BF1F7BC00B00C50F06 /* PlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4900C4BE1F7BC00B00C50F06 /* PlayerViewController.swift */; }; 11 | 4900C4C11F7BC2C100C50F06 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4900C4C01F7BC2C100C50F06 /* AVFoundation.framework */; }; 12 | 49C8BA981F653EE2004C3644 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C8BA971F653EE2004C3644 /* AppDelegate.swift */; }; 13 | 49C8BA9A1F653EE2004C3644 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49C8BA991F653EE2004C3644 /* ViewController.swift */; }; 14 | 49C8BA9D1F653EE2004C3644 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49C8BA9B1F653EE2004C3644 /* Main.storyboard */; }; 15 | 49C8BA9F1F653EE2004C3644 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 49C8BA9E1F653EE2004C3644 /* Assets.xcassets */; }; 16 | 49C8BAA21F653EE2004C3644 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 49C8BAA01F653EE2004C3644 /* LaunchScreen.storyboard */; }; 17 | E69C93641E188A41D62F37C9 /* Pods_vastExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F347B5C2F70C711BD96DE46D /* Pods_vastExample.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 3C322E51230AD60E3FDB2C79 /* Pods-vastExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-vastExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-vastExample/Pods-vastExample.debug.xcconfig"; sourceTree = ""; }; 22 | 4900C4BE1F7BC00B00C50F06 /* PlayerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PlayerViewController.swift; sourceTree = ""; }; 23 | 4900C4C01F7BC2C100C50F06 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; 24 | 4900C4C21F7BC32C00C50F06 /* AVKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVKit.framework; path = System/Library/Frameworks/AVKit.framework; sourceTree = SDKROOT; }; 25 | 4900C4C41F7BC35500C50F06 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; 26 | 49C8BA941F653EE2004C3644 /* vastExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vastExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 27 | 49C8BA971F653EE2004C3644 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 28 | 49C8BA991F653EE2004C3644 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 29 | 49C8BA9C1F653EE2004C3644 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 30 | 49C8BA9E1F653EE2004C3644 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 31 | 49C8BAA11F653EE2004C3644 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 32 | 49C8BAA31F653EE2004C3644 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 33 | 55E507B054165B140490FC72 /* Pods-vastExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-vastExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-vastExample/Pods-vastExample.release.xcconfig"; sourceTree = ""; }; 34 | F347B5C2F70C711BD96DE46D /* Pods_vastExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_vastExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | 49C8BA911F653EE2004C3644 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 4900C4C11F7BC2C100C50F06 /* AVFoundation.framework in Frameworks */, 43 | E69C93641E188A41D62F37C9 /* Pods_vastExample.framework in Frameworks */, 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | 49C8BA8B1F653EE2004C3644 = { 51 | isa = PBXGroup; 52 | children = ( 53 | 49C8BA961F653EE2004C3644 /* vastExample */, 54 | 49C8BA951F653EE2004C3644 /* Products */, 55 | 9B15F1580D2B1321212A8FDF /* Pods */, 56 | 7CB3D9BD82EA3D676DD86806 /* Frameworks */, 57 | ); 58 | sourceTree = ""; 59 | }; 60 | 49C8BA951F653EE2004C3644 /* Products */ = { 61 | isa = PBXGroup; 62 | children = ( 63 | 49C8BA941F653EE2004C3644 /* vastExample.app */, 64 | ); 65 | name = Products; 66 | sourceTree = ""; 67 | }; 68 | 49C8BA961F653EE2004C3644 /* vastExample */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 49C8BA971F653EE2004C3644 /* AppDelegate.swift */, 72 | 49C8BA991F653EE2004C3644 /* ViewController.swift */, 73 | 49C8BA9B1F653EE2004C3644 /* Main.storyboard */, 74 | 49C8BA9E1F653EE2004C3644 /* Assets.xcassets */, 75 | 49C8BAA01F653EE2004C3644 /* LaunchScreen.storyboard */, 76 | 49C8BAA31F653EE2004C3644 /* Info.plist */, 77 | 4900C4BE1F7BC00B00C50F06 /* PlayerViewController.swift */, 78 | ); 79 | path = vastExample; 80 | sourceTree = ""; 81 | }; 82 | 7CB3D9BD82EA3D676DD86806 /* Frameworks */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | 4900C4C41F7BC35500C50F06 /* MediaPlayer.framework */, 86 | 4900C4C21F7BC32C00C50F06 /* AVKit.framework */, 87 | 4900C4C01F7BC2C100C50F06 /* AVFoundation.framework */, 88 | F347B5C2F70C711BD96DE46D /* Pods_vastExample.framework */, 89 | ); 90 | name = Frameworks; 91 | sourceTree = ""; 92 | }; 93 | 9B15F1580D2B1321212A8FDF /* Pods */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 3C322E51230AD60E3FDB2C79 /* Pods-vastExample.debug.xcconfig */, 97 | 55E507B054165B140490FC72 /* Pods-vastExample.release.xcconfig */, 98 | ); 99 | name = Pods; 100 | sourceTree = ""; 101 | }; 102 | /* End PBXGroup section */ 103 | 104 | /* Begin PBXNativeTarget section */ 105 | 49C8BA931F653EE2004C3644 /* vastExample */ = { 106 | isa = PBXNativeTarget; 107 | buildConfigurationList = 49C8BAA61F653EE2004C3644 /* Build configuration list for PBXNativeTarget "vastExample" */; 108 | buildPhases = ( 109 | 4ADDB4AFBA9E2A9320585E83 /* [CP] Check Pods Manifest.lock */, 110 | 49C8BA901F653EE2004C3644 /* Sources */, 111 | 49C8BA911F653EE2004C3644 /* Frameworks */, 112 | 49C8BA921F653EE2004C3644 /* Resources */, 113 | 220E3C0B632DA9353897C95E /* [CP] Embed Pods Frameworks */, 114 | 37BCEB01B148EC85234E6B31 /* [CP] Copy Pods Resources */, 115 | ); 116 | buildRules = ( 117 | ); 118 | dependencies = ( 119 | ); 120 | name = vastExample; 121 | productName = vastExample; 122 | productReference = 49C8BA941F653EE2004C3644 /* vastExample.app */; 123 | productType = "com.apple.product-type.application"; 124 | }; 125 | /* End PBXNativeTarget section */ 126 | 127 | /* Begin PBXProject section */ 128 | 49C8BA8C1F653EE2004C3644 /* Project object */ = { 129 | isa = PBXProject; 130 | attributes = { 131 | LastSwiftUpdateCheck = 0830; 132 | LastUpgradeCheck = 0830; 133 | ORGANIZATIONNAME = SuperbDerrick; 134 | TargetAttributes = { 135 | 49C8BA931F653EE2004C3644 = { 136 | CreatedOnToolsVersion = 8.3.2; 137 | ProvisioningStyle = Automatic; 138 | }; 139 | }; 140 | }; 141 | buildConfigurationList = 49C8BA8F1F653EE2004C3644 /* Build configuration list for PBXProject "vastExample" */; 142 | compatibilityVersion = "Xcode 3.2"; 143 | developmentRegion = English; 144 | hasScannedForEncodings = 0; 145 | knownRegions = ( 146 | en, 147 | Base, 148 | ); 149 | mainGroup = 49C8BA8B1F653EE2004C3644; 150 | productRefGroup = 49C8BA951F653EE2004C3644 /* Products */; 151 | projectDirPath = ""; 152 | projectRoot = ""; 153 | targets = ( 154 | 49C8BA931F653EE2004C3644 /* vastExample */, 155 | ); 156 | }; 157 | /* End PBXProject section */ 158 | 159 | /* Begin PBXResourcesBuildPhase section */ 160 | 49C8BA921F653EE2004C3644 /* Resources */ = { 161 | isa = PBXResourcesBuildPhase; 162 | buildActionMask = 2147483647; 163 | files = ( 164 | 49C8BAA21F653EE2004C3644 /* LaunchScreen.storyboard in Resources */, 165 | 49C8BA9F1F653EE2004C3644 /* Assets.xcassets in Resources */, 166 | 49C8BA9D1F653EE2004C3644 /* Main.storyboard in Resources */, 167 | ); 168 | runOnlyForDeploymentPostprocessing = 0; 169 | }; 170 | /* End PBXResourcesBuildPhase section */ 171 | 172 | /* Begin PBXShellScriptBuildPhase section */ 173 | 220E3C0B632DA9353897C95E /* [CP] Embed Pods Frameworks */ = { 174 | isa = PBXShellScriptBuildPhase; 175 | buildActionMask = 2147483647; 176 | files = ( 177 | ); 178 | inputPaths = ( 179 | "${SRCROOT}/Pods/Target Support Files/Pods-vastExample/Pods-vastExample-frameworks.sh", 180 | "${PODS_ROOT}/GoogleAds-IMA-iOS-SDK/GoogleInteractiveMediaAds/GoogleInteractiveMediaAds.framework", 181 | "${BUILT_PRODUCTS_DIR}/SummerSlider/SummerSlider.framework", 182 | ); 183 | name = "[CP] Embed Pods Frameworks"; 184 | outputPaths = ( 185 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleInteractiveMediaAds.framework", 186 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SummerSlider.framework", 187 | ); 188 | runOnlyForDeploymentPostprocessing = 0; 189 | shellPath = /bin/sh; 190 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-vastExample/Pods-vastExample-frameworks.sh\"\n"; 191 | showEnvVarsInLog = 0; 192 | }; 193 | 37BCEB01B148EC85234E6B31 /* [CP] Copy Pods Resources */ = { 194 | isa = PBXShellScriptBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | ); 198 | inputPaths = ( 199 | ); 200 | name = "[CP] Copy Pods Resources"; 201 | outputPaths = ( 202 | ); 203 | runOnlyForDeploymentPostprocessing = 0; 204 | shellPath = /bin/sh; 205 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-vastExample/Pods-vastExample-resources.sh\"\n"; 206 | showEnvVarsInLog = 0; 207 | }; 208 | 4ADDB4AFBA9E2A9320585E83 /* [CP] Check Pods Manifest.lock */ = { 209 | isa = PBXShellScriptBuildPhase; 210 | buildActionMask = 2147483647; 211 | files = ( 212 | ); 213 | inputPaths = ( 214 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 215 | "${PODS_ROOT}/Manifest.lock", 216 | ); 217 | name = "[CP] Check Pods Manifest.lock"; 218 | outputPaths = ( 219 | "$(DERIVED_FILE_DIR)/Pods-vastExample-checkManifestLockResult.txt", 220 | ); 221 | runOnlyForDeploymentPostprocessing = 0; 222 | shellPath = /bin/sh; 223 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 224 | showEnvVarsInLog = 0; 225 | }; 226 | /* End PBXShellScriptBuildPhase section */ 227 | 228 | /* Begin PBXSourcesBuildPhase section */ 229 | 49C8BA901F653EE2004C3644 /* Sources */ = { 230 | isa = PBXSourcesBuildPhase; 231 | buildActionMask = 2147483647; 232 | files = ( 233 | 4900C4BF1F7BC00B00C50F06 /* PlayerViewController.swift in Sources */, 234 | 49C8BA9A1F653EE2004C3644 /* ViewController.swift in Sources */, 235 | 49C8BA981F653EE2004C3644 /* AppDelegate.swift in Sources */, 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | }; 239 | /* End PBXSourcesBuildPhase section */ 240 | 241 | /* Begin PBXVariantGroup section */ 242 | 49C8BA9B1F653EE2004C3644 /* Main.storyboard */ = { 243 | isa = PBXVariantGroup; 244 | children = ( 245 | 49C8BA9C1F653EE2004C3644 /* Base */, 246 | ); 247 | name = Main.storyboard; 248 | sourceTree = ""; 249 | }; 250 | 49C8BAA01F653EE2004C3644 /* LaunchScreen.storyboard */ = { 251 | isa = PBXVariantGroup; 252 | children = ( 253 | 49C8BAA11F653EE2004C3644 /* Base */, 254 | ); 255 | name = LaunchScreen.storyboard; 256 | sourceTree = ""; 257 | }; 258 | /* End PBXVariantGroup section */ 259 | 260 | /* Begin XCBuildConfiguration section */ 261 | 49C8BAA41F653EE2004C3644 /* Debug */ = { 262 | isa = XCBuildConfiguration; 263 | buildSettings = { 264 | ALWAYS_SEARCH_USER_PATHS = NO; 265 | CLANG_ANALYZER_NONNULL = YES; 266 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 267 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 268 | CLANG_CXX_LIBRARY = "libc++"; 269 | CLANG_ENABLE_MODULES = YES; 270 | CLANG_ENABLE_OBJC_ARC = YES; 271 | CLANG_WARN_BOOL_CONVERSION = YES; 272 | CLANG_WARN_CONSTANT_CONVERSION = YES; 273 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 274 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 275 | CLANG_WARN_EMPTY_BODY = YES; 276 | CLANG_WARN_ENUM_CONVERSION = YES; 277 | CLANG_WARN_INFINITE_RECURSION = YES; 278 | CLANG_WARN_INT_CONVERSION = YES; 279 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 280 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 281 | CLANG_WARN_UNREACHABLE_CODE = YES; 282 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 283 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 284 | COPY_PHASE_STRIP = NO; 285 | DEBUG_INFORMATION_FORMAT = dwarf; 286 | ENABLE_STRICT_OBJC_MSGSEND = YES; 287 | ENABLE_TESTABILITY = YES; 288 | GCC_C_LANGUAGE_STANDARD = gnu99; 289 | GCC_DYNAMIC_NO_PIC = NO; 290 | GCC_NO_COMMON_BLOCKS = YES; 291 | GCC_OPTIMIZATION_LEVEL = 0; 292 | GCC_PREPROCESSOR_DEFINITIONS = ( 293 | "DEBUG=1", 294 | "$(inherited)", 295 | ); 296 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 297 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 298 | GCC_WARN_UNDECLARED_SELECTOR = YES; 299 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 300 | GCC_WARN_UNUSED_FUNCTION = YES; 301 | GCC_WARN_UNUSED_VARIABLE = YES; 302 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 303 | MTL_ENABLE_DEBUG_INFO = YES; 304 | ONLY_ACTIVE_ARCH = YES; 305 | SDKROOT = iphoneos; 306 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 307 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 308 | TARGETED_DEVICE_FAMILY = "1,2"; 309 | }; 310 | name = Debug; 311 | }; 312 | 49C8BAA51F653EE2004C3644 /* Release */ = { 313 | isa = XCBuildConfiguration; 314 | buildSettings = { 315 | ALWAYS_SEARCH_USER_PATHS = NO; 316 | CLANG_ANALYZER_NONNULL = YES; 317 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 318 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 319 | CLANG_CXX_LIBRARY = "libc++"; 320 | CLANG_ENABLE_MODULES = YES; 321 | CLANG_ENABLE_OBJC_ARC = YES; 322 | CLANG_WARN_BOOL_CONVERSION = YES; 323 | CLANG_WARN_CONSTANT_CONVERSION = YES; 324 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 325 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 326 | CLANG_WARN_EMPTY_BODY = YES; 327 | CLANG_WARN_ENUM_CONVERSION = YES; 328 | CLANG_WARN_INFINITE_RECURSION = YES; 329 | CLANG_WARN_INT_CONVERSION = YES; 330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 331 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 332 | CLANG_WARN_UNREACHABLE_CODE = YES; 333 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 334 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 335 | COPY_PHASE_STRIP = NO; 336 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 337 | ENABLE_NS_ASSERTIONS = NO; 338 | ENABLE_STRICT_OBJC_MSGSEND = YES; 339 | GCC_C_LANGUAGE_STANDARD = gnu99; 340 | GCC_NO_COMMON_BLOCKS = YES; 341 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 342 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 343 | GCC_WARN_UNDECLARED_SELECTOR = YES; 344 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 345 | GCC_WARN_UNUSED_FUNCTION = YES; 346 | GCC_WARN_UNUSED_VARIABLE = YES; 347 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 348 | MTL_ENABLE_DEBUG_INFO = NO; 349 | SDKROOT = iphoneos; 350 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 351 | TARGETED_DEVICE_FAMILY = "1,2"; 352 | VALIDATE_PRODUCT = YES; 353 | }; 354 | name = Release; 355 | }; 356 | 49C8BAA71F653EE2004C3644 /* Debug */ = { 357 | isa = XCBuildConfiguration; 358 | baseConfigurationReference = 3C322E51230AD60E3FDB2C79 /* Pods-vastExample.debug.xcconfig */; 359 | buildSettings = { 360 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 361 | DEVELOPMENT_TEAM = ""; 362 | INFOPLIST_FILE = vastExample/Info.plist; 363 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 364 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.tistory.com.vastExample; 365 | PRODUCT_NAME = "$(TARGET_NAME)"; 366 | SWIFT_VERSION = 4.0; 367 | }; 368 | name = Debug; 369 | }; 370 | 49C8BAA81F653EE2004C3644 /* Release */ = { 371 | isa = XCBuildConfiguration; 372 | baseConfigurationReference = 55E507B054165B140490FC72 /* Pods-vastExample.release.xcconfig */; 373 | buildSettings = { 374 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 375 | DEVELOPMENT_TEAM = ""; 376 | INFOPLIST_FILE = vastExample/Info.plist; 377 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 378 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.tistory.com.vastExample; 379 | PRODUCT_NAME = "$(TARGET_NAME)"; 380 | SWIFT_VERSION = 4.0; 381 | }; 382 | name = Release; 383 | }; 384 | /* End XCBuildConfiguration section */ 385 | 386 | /* Begin XCConfigurationList section */ 387 | 49C8BA8F1F653EE2004C3644 /* Build configuration list for PBXProject "vastExample" */ = { 388 | isa = XCConfigurationList; 389 | buildConfigurations = ( 390 | 49C8BAA41F653EE2004C3644 /* Debug */, 391 | 49C8BAA51F653EE2004C3644 /* Release */, 392 | ); 393 | defaultConfigurationIsVisible = 0; 394 | defaultConfigurationName = Release; 395 | }; 396 | 49C8BAA61F653EE2004C3644 /* Build configuration list for PBXNativeTarget "vastExample" */ = { 397 | isa = XCConfigurationList; 398 | buildConfigurations = ( 399 | 49C8BAA71F653EE2004C3644 /* Debug */, 400 | 49C8BAA81F653EE2004C3644 /* Release */, 401 | ); 402 | defaultConfigurationIsVisible = 0; 403 | defaultConfigurationName = Release; 404 | }; 405 | /* End XCConfigurationList section */ 406 | }; 407 | rootObject = 49C8BA8C1F653EE2004C3644 /* Project object */; 408 | } 409 | -------------------------------------------------------------------------------- /useCases/withCocoaPod/SummerSliderDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 0B66DDD292E27EFC6BBE8BA7 /* Pods_SummerSliderDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C585BF4C46F1949DDA2C7AA5 /* Pods_SummerSliderDemo.framework */; }; 11 | 49FB8EAF1F7767F7008FB0A5 /* HorizontalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB8EAE1F7767F7008FB0A5 /* HorizontalViewController.swift */; }; 12 | 49FB8EB11F77680F008FB0A5 /* VerticalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB8EB01F77680F008FB0A5 /* VerticalViewController.swift */; }; 13 | 49FB8EB41F776839008FB0A5 /* YoutubeStyleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49FB8EB31F776839008FB0A5 /* YoutubeStyleViewController.swift */; }; 14 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 15 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; }; 16 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 17 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 18 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXFileReference section */ 22 | 12B5B990C446EC86F65C37BD /* Pods-SummerSliderDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SummerSliderDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-SummerSliderDemo/Pods-SummerSliderDemo.debug.xcconfig"; sourceTree = ""; }; 23 | 1E7663A3F9C37820BBE7327C /* Pods-SummerSliderDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SummerSliderDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-SummerSliderDemo/Pods-SummerSliderDemo.release.xcconfig"; sourceTree = ""; }; 24 | 49FB8EAE1F7767F7008FB0A5 /* HorizontalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalViewController.swift; sourceTree = ""; }; 25 | 49FB8EB01F77680F008FB0A5 /* VerticalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalViewController.swift; sourceTree = ""; }; 26 | 49FB8EB31F776839008FB0A5 /* YoutubeStyleViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = YoutubeStyleViewController.swift; sourceTree = ""; }; 27 | 607FACD01AFB9204008FA782 /* SummerSliderDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SummerSliderDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 29 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 30 | 607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 31 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 32 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 33 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 34 | 79DC33E8CA8B3F8E4CF3EC4D /* Pods_SummerSlider_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SummerSlider_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | C585BF4C46F1949DDA2C7AA5 /* Pods_SummerSliderDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SummerSliderDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | /* End PBXFileReference section */ 37 | 38 | /* Begin PBXFrameworksBuildPhase section */ 39 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 40 | isa = PBXFrameworksBuildPhase; 41 | buildActionMask = 2147483647; 42 | files = ( 43 | 0B66DDD292E27EFC6BBE8BA7 /* Pods_SummerSliderDemo.framework in Frameworks */, 44 | ); 45 | runOnlyForDeploymentPostprocessing = 0; 46 | }; 47 | /* End PBXFrameworksBuildPhase section */ 48 | 49 | /* Begin PBXGroup section */ 50 | 49FB8EB21F776815008FB0A5 /* ViewControllers */ = { 51 | isa = PBXGroup; 52 | children = ( 53 | 49FB8EB01F77680F008FB0A5 /* VerticalViewController.swift */, 54 | 49FB8EAE1F7767F7008FB0A5 /* HorizontalViewController.swift */, 55 | 49FB8EB31F776839008FB0A5 /* YoutubeStyleViewController.swift */, 56 | ); 57 | name = ViewControllers; 58 | sourceTree = ""; 59 | }; 60 | 607FACC71AFB9204008FA782 = { 61 | isa = PBXGroup; 62 | children = ( 63 | 607FACD21AFB9204008FA782 /* SummerSliderDemo */, 64 | 607FACD11AFB9204008FA782 /* Products */, 65 | 7B4193D2B2F03E53DCE34170 /* Pods */, 66 | ACBED11CA942D6D84DC384E4 /* Frameworks */, 67 | ); 68 | sourceTree = ""; 69 | }; 70 | 607FACD11AFB9204008FA782 /* Products */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 607FACD01AFB9204008FA782 /* SummerSliderDemo.app */, 74 | ); 75 | name = Products; 76 | sourceTree = ""; 77 | }; 78 | 607FACD21AFB9204008FA782 /* SummerSliderDemo */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 49FB8EB21F776815008FB0A5 /* ViewControllers */, 82 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 83 | 607FACD71AFB9204008FA782 /* ViewController.swift */, 84 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 85 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 86 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 87 | 607FACD31AFB9204008FA782 /* Supporting Files */, 88 | ); 89 | name = SummerSliderDemo; 90 | path = SummerSlider; 91 | sourceTree = ""; 92 | }; 93 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 94 | isa = PBXGroup; 95 | children = ( 96 | 607FACD41AFB9204008FA782 /* Info.plist */, 97 | ); 98 | name = "Supporting Files"; 99 | sourceTree = ""; 100 | }; 101 | 7B4193D2B2F03E53DCE34170 /* Pods */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 12B5B990C446EC86F65C37BD /* Pods-SummerSliderDemo.debug.xcconfig */, 105 | 1E7663A3F9C37820BBE7327C /* Pods-SummerSliderDemo.release.xcconfig */, 106 | ); 107 | name = Pods; 108 | sourceTree = ""; 109 | }; 110 | ACBED11CA942D6D84DC384E4 /* Frameworks */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 79DC33E8CA8B3F8E4CF3EC4D /* Pods_SummerSlider_Example.framework */, 114 | C585BF4C46F1949DDA2C7AA5 /* Pods_SummerSliderDemo.framework */, 115 | ); 116 | name = Frameworks; 117 | sourceTree = ""; 118 | }; 119 | /* End PBXGroup section */ 120 | 121 | /* Begin PBXNativeTarget section */ 122 | 607FACCF1AFB9204008FA782 /* SummerSliderDemo */ = { 123 | isa = PBXNativeTarget; 124 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SummerSliderDemo" */; 125 | buildPhases = ( 126 | 6F2754D16E642F1FCC9D8415 /* [CP] Check Pods Manifest.lock */, 127 | 607FACCC1AFB9204008FA782 /* Sources */, 128 | 607FACCD1AFB9204008FA782 /* Frameworks */, 129 | 607FACCE1AFB9204008FA782 /* Resources */, 130 | ADF4CD189E5D54B9826E2F63 /* [CP] Embed Pods Frameworks */, 131 | 26AAC8F2F453114A1CF908B1 /* [CP] Copy Pods Resources */, 132 | ); 133 | buildRules = ( 134 | ); 135 | dependencies = ( 136 | ); 137 | name = SummerSliderDemo; 138 | productName = SummerSlider; 139 | productReference = 607FACD01AFB9204008FA782 /* SummerSliderDemo.app */; 140 | productType = "com.apple.product-type.application"; 141 | }; 142 | /* End PBXNativeTarget section */ 143 | 144 | /* Begin PBXProject section */ 145 | 607FACC81AFB9204008FA782 /* Project object */ = { 146 | isa = PBXProject; 147 | attributes = { 148 | LastSwiftUpdateCheck = 0720; 149 | LastUpgradeCheck = 0900; 150 | ORGANIZATIONNAME = CocoaPods; 151 | TargetAttributes = { 152 | 607FACCF1AFB9204008FA782 = { 153 | CreatedOnToolsVersion = 6.3.1; 154 | DevelopmentTeam = 5MKPJ9K6N6; 155 | LastSwiftMigration = 0820; 156 | }; 157 | }; 158 | }; 159 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SummerSliderDemo" */; 160 | compatibilityVersion = "Xcode 3.2"; 161 | developmentRegion = English; 162 | hasScannedForEncodings = 0; 163 | knownRegions = ( 164 | en, 165 | Base, 166 | ); 167 | mainGroup = 607FACC71AFB9204008FA782; 168 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 169 | projectDirPath = ""; 170 | projectRoot = ""; 171 | targets = ( 172 | 607FACCF1AFB9204008FA782 /* SummerSliderDemo */, 173 | ); 174 | }; 175 | /* End PBXProject section */ 176 | 177 | /* Begin PBXResourcesBuildPhase section */ 178 | 607FACCE1AFB9204008FA782 /* Resources */ = { 179 | isa = PBXResourcesBuildPhase; 180 | buildActionMask = 2147483647; 181 | files = ( 182 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 183 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 184 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 185 | ); 186 | runOnlyForDeploymentPostprocessing = 0; 187 | }; 188 | /* End PBXResourcesBuildPhase section */ 189 | 190 | /* Begin PBXShellScriptBuildPhase section */ 191 | 26AAC8F2F453114A1CF908B1 /* [CP] Copy Pods Resources */ = { 192 | isa = PBXShellScriptBuildPhase; 193 | buildActionMask = 2147483647; 194 | files = ( 195 | ); 196 | inputPaths = ( 197 | ); 198 | name = "[CP] Copy Pods Resources"; 199 | outputPaths = ( 200 | ); 201 | runOnlyForDeploymentPostprocessing = 0; 202 | shellPath = /bin/sh; 203 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SummerSliderDemo/Pods-SummerSliderDemo-resources.sh\"\n"; 204 | showEnvVarsInLog = 0; 205 | }; 206 | 6F2754D16E642F1FCC9D8415 /* [CP] Check Pods Manifest.lock */ = { 207 | isa = PBXShellScriptBuildPhase; 208 | buildActionMask = 2147483647; 209 | files = ( 210 | ); 211 | inputPaths = ( 212 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 213 | "${PODS_ROOT}/Manifest.lock", 214 | ); 215 | name = "[CP] Check Pods Manifest.lock"; 216 | outputPaths = ( 217 | "$(DERIVED_FILE_DIR)/Pods-SummerSliderDemo-checkManifestLockResult.txt", 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | shellPath = /bin/sh; 221 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 222 | showEnvVarsInLog = 0; 223 | }; 224 | ADF4CD189E5D54B9826E2F63 /* [CP] Embed Pods Frameworks */ = { 225 | isa = PBXShellScriptBuildPhase; 226 | buildActionMask = 2147483647; 227 | files = ( 228 | ); 229 | inputPaths = ( 230 | "${SRCROOT}/Pods/Target Support Files/Pods-SummerSliderDemo/Pods-SummerSliderDemo-frameworks.sh", 231 | "${BUILT_PRODUCTS_DIR}/SummerSlider/SummerSlider.framework", 232 | ); 233 | name = "[CP] Embed Pods Frameworks"; 234 | outputPaths = ( 235 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SummerSlider.framework", 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | shellPath = /bin/sh; 239 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-SummerSliderDemo/Pods-SummerSliderDemo-frameworks.sh\"\n"; 240 | showEnvVarsInLog = 0; 241 | }; 242 | /* End PBXShellScriptBuildPhase section */ 243 | 244 | /* Begin PBXSourcesBuildPhase section */ 245 | 607FACCC1AFB9204008FA782 /* Sources */ = { 246 | isa = PBXSourcesBuildPhase; 247 | buildActionMask = 2147483647; 248 | files = ( 249 | 49FB8EB41F776839008FB0A5 /* YoutubeStyleViewController.swift in Sources */, 250 | 49FB8EB11F77680F008FB0A5 /* VerticalViewController.swift in Sources */, 251 | 607FACD81AFB9204008FA782 /* ViewController.swift in Sources */, 252 | 49FB8EAF1F7767F7008FB0A5 /* HorizontalViewController.swift in Sources */, 253 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | /* End PBXSourcesBuildPhase section */ 258 | 259 | /* Begin PBXVariantGroup section */ 260 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 261 | isa = PBXVariantGroup; 262 | children = ( 263 | 607FACDA1AFB9204008FA782 /* Base */, 264 | ); 265 | name = Main.storyboard; 266 | sourceTree = ""; 267 | }; 268 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 269 | isa = PBXVariantGroup; 270 | children = ( 271 | 607FACDF1AFB9204008FA782 /* Base */, 272 | ); 273 | name = LaunchScreen.xib; 274 | sourceTree = ""; 275 | }; 276 | /* End PBXVariantGroup section */ 277 | 278 | /* Begin XCBuildConfiguration section */ 279 | 607FACED1AFB9204008FA782 /* Debug */ = { 280 | isa = XCBuildConfiguration; 281 | buildSettings = { 282 | ALWAYS_SEARCH_USER_PATHS = NO; 283 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 284 | CLANG_CXX_LIBRARY = "libc++"; 285 | CLANG_ENABLE_MODULES = YES; 286 | CLANG_ENABLE_OBJC_ARC = YES; 287 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 288 | CLANG_WARN_BOOL_CONVERSION = YES; 289 | CLANG_WARN_COMMA = YES; 290 | CLANG_WARN_CONSTANT_CONVERSION = YES; 291 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 292 | CLANG_WARN_EMPTY_BODY = YES; 293 | CLANG_WARN_ENUM_CONVERSION = YES; 294 | CLANG_WARN_INFINITE_RECURSION = YES; 295 | CLANG_WARN_INT_CONVERSION = YES; 296 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 297 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 298 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 299 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 300 | CLANG_WARN_STRICT_PROTOTYPES = YES; 301 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 302 | CLANG_WARN_UNREACHABLE_CODE = YES; 303 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 304 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 305 | COPY_PHASE_STRIP = NO; 306 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 307 | ENABLE_STRICT_OBJC_MSGSEND = YES; 308 | ENABLE_TESTABILITY = YES; 309 | GCC_C_LANGUAGE_STANDARD = gnu99; 310 | GCC_DYNAMIC_NO_PIC = NO; 311 | GCC_NO_COMMON_BLOCKS = YES; 312 | GCC_OPTIMIZATION_LEVEL = 0; 313 | GCC_PREPROCESSOR_DEFINITIONS = ( 314 | "DEBUG=1", 315 | "$(inherited)", 316 | ); 317 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 318 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 319 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 320 | GCC_WARN_UNDECLARED_SELECTOR = YES; 321 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 322 | GCC_WARN_UNUSED_FUNCTION = YES; 323 | GCC_WARN_UNUSED_VARIABLE = YES; 324 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 325 | MTL_ENABLE_DEBUG_INFO = YES; 326 | ONLY_ACTIVE_ARCH = YES; 327 | SDKROOT = iphoneos; 328 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 329 | SWIFT_VERSION = 4.0; 330 | }; 331 | name = Debug; 332 | }; 333 | 607FACEE1AFB9204008FA782 /* Release */ = { 334 | isa = XCBuildConfiguration; 335 | buildSettings = { 336 | ALWAYS_SEARCH_USER_PATHS = NO; 337 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 338 | CLANG_CXX_LIBRARY = "libc++"; 339 | CLANG_ENABLE_MODULES = YES; 340 | CLANG_ENABLE_OBJC_ARC = YES; 341 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 342 | CLANG_WARN_BOOL_CONVERSION = YES; 343 | CLANG_WARN_COMMA = YES; 344 | CLANG_WARN_CONSTANT_CONVERSION = YES; 345 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 346 | CLANG_WARN_EMPTY_BODY = YES; 347 | CLANG_WARN_ENUM_CONVERSION = YES; 348 | CLANG_WARN_INFINITE_RECURSION = YES; 349 | CLANG_WARN_INT_CONVERSION = YES; 350 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 351 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 352 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 353 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 354 | CLANG_WARN_STRICT_PROTOTYPES = YES; 355 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 356 | CLANG_WARN_UNREACHABLE_CODE = YES; 357 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 358 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 359 | COPY_PHASE_STRIP = NO; 360 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 361 | ENABLE_NS_ASSERTIONS = NO; 362 | ENABLE_STRICT_OBJC_MSGSEND = YES; 363 | GCC_C_LANGUAGE_STANDARD = gnu99; 364 | GCC_NO_COMMON_BLOCKS = YES; 365 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 366 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 367 | GCC_WARN_UNDECLARED_SELECTOR = YES; 368 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 369 | GCC_WARN_UNUSED_FUNCTION = YES; 370 | GCC_WARN_UNUSED_VARIABLE = YES; 371 | IPHONEOS_DEPLOYMENT_TARGET = 8.3; 372 | MTL_ENABLE_DEBUG_INFO = NO; 373 | SDKROOT = iphoneos; 374 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 375 | SWIFT_VERSION = 4.0; 376 | VALIDATE_PRODUCT = YES; 377 | }; 378 | name = Release; 379 | }; 380 | 607FACF01AFB9204008FA782 /* Debug */ = { 381 | isa = XCBuildConfiguration; 382 | baseConfigurationReference = 12B5B990C446EC86F65C37BD /* Pods-SummerSliderDemo.debug.xcconfig */; 383 | buildSettings = { 384 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 385 | DEVELOPMENT_TEAM = 5MKPJ9K6N6; 386 | INFOPLIST_FILE = SummerSlider/Info.plist; 387 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 388 | MODULE_NAME = ExampleApp; 389 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 390 | PRODUCT_NAME = "$(TARGET_NAME)"; 391 | SWIFT_VERSION = 4.0; 392 | }; 393 | name = Debug; 394 | }; 395 | 607FACF11AFB9204008FA782 /* Release */ = { 396 | isa = XCBuildConfiguration; 397 | baseConfigurationReference = 1E7663A3F9C37820BBE7327C /* Pods-SummerSliderDemo.release.xcconfig */; 398 | buildSettings = { 399 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 400 | DEVELOPMENT_TEAM = 5MKPJ9K6N6; 401 | INFOPLIST_FILE = SummerSlider/Info.plist; 402 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 403 | MODULE_NAME = ExampleApp; 404 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 405 | PRODUCT_NAME = "$(TARGET_NAME)"; 406 | SWIFT_VERSION = 4.0; 407 | }; 408 | name = Release; 409 | }; 410 | /* End XCBuildConfiguration section */ 411 | 412 | /* Begin XCConfigurationList section */ 413 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "SummerSliderDemo" */ = { 414 | isa = XCConfigurationList; 415 | buildConfigurations = ( 416 | 607FACED1AFB9204008FA782 /* Debug */, 417 | 607FACEE1AFB9204008FA782 /* Release */, 418 | ); 419 | defaultConfigurationIsVisible = 0; 420 | defaultConfigurationName = Release; 421 | }; 422 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "SummerSliderDemo" */ = { 423 | isa = XCConfigurationList; 424 | buildConfigurations = ( 425 | 607FACF01AFB9204008FA782 /* Debug */, 426 | 607FACF11AFB9204008FA782 /* Release */, 427 | ); 428 | defaultConfigurationIsVisible = 0; 429 | defaultConfigurationName = Release; 430 | }; 431 | /* End XCConfigurationList section */ 432 | }; 433 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 434 | } 435 | -------------------------------------------------------------------------------- /SummerSlider.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4968C8A71F77A88400C48278 /* SummerSlider.h in Headers */ = {isa = PBXBuildFile; fileRef = 4968C8A51F77A88400C48278 /* SummerSlider.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | 4968C8AF1F77A8DB00C48278 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4968C8AD1F77A8DB00C48278 /* Constants.swift */; }; 12 | 4968C8B01F77A8DB00C48278 /* SummerSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4968C8AE1F77A8DB00C48278 /* SummerSlider.swift */; }; 13 | 4968C8FC1F77AAD300C48278 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4968C8FB1F77AAD300C48278 /* AppDelegate.swift */; }; 14 | 4968C9011F77AAD300C48278 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4968C8FF1F77AAD300C48278 /* Main.storyboard */; }; 15 | 4968C9031F77AAD300C48278 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4968C9021F77AAD300C48278 /* Assets.xcassets */; }; 16 | 4968C9061F77AAD300C48278 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 4968C9041F77AAD300C48278 /* LaunchScreen.storyboard */; }; 17 | 4968C90B1F77AADE00C48278 /* SummerSlider.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4968C8A21F77A88300C48278 /* SummerSlider.framework */; }; 18 | 4968C90C1F77AADE00C48278 /* SummerSlider.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4968C8A21F77A88300C48278 /* SummerSlider.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 19 | 49A7BA9F1F79298500997EC3 /* SummerSliderTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BA9E1F79298500997EC3 /* SummerSliderTypes.swift */; }; 20 | 49A7BAA51F7A55EC00997EC3 /* HorizontalSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BAA01F7A55EC00997EC3 /* HorizontalSlider.swift */; }; 21 | 49A7BAA61F7A55EC00997EC3 /* Slider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BAA11F7A55EC00997EC3 /* Slider.swift */; }; 22 | 49A7BAA71F7A55EC00997EC3 /* SliderDrawingProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BAA21F7A55EC00997EC3 /* SliderDrawingProtocol.swift */; }; 23 | 49A7BAA81F7A55EC00997EC3 /* SliderFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BAA31F7A55EC00997EC3 /* SliderFactory.swift */; }; 24 | 49A7BAA91F7A55EC00997EC3 /* VerticalSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A7BAA41F7A55EC00997EC3 /* VerticalSlider.swift */; }; 25 | 49CA0E8E1F78CED9008CA1F2 /* HorizontalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49CA0E8B1F78CED9008CA1F2 /* HorizontalViewController.swift */; }; 26 | /* End PBXBuildFile section */ 27 | 28 | /* Begin PBXContainerItemProxy section */ 29 | 4968C90D1F77AADE00C48278 /* PBXContainerItemProxy */ = { 30 | isa = PBXContainerItemProxy; 31 | containerPortal = 4968C8991F77A88300C48278 /* Project object */; 32 | proxyType = 1; 33 | remoteGlobalIDString = 4968C8A11F77A88300C48278; 34 | remoteInfo = SummerSlider; 35 | }; 36 | /* End PBXContainerItemProxy section */ 37 | 38 | /* Begin PBXCopyFilesBuildPhase section */ 39 | 4968C90F1F77AADE00C48278 /* Embed Frameworks */ = { 40 | isa = PBXCopyFilesBuildPhase; 41 | buildActionMask = 2147483647; 42 | dstPath = ""; 43 | dstSubfolderSpec = 10; 44 | files = ( 45 | 4968C90C1F77AADE00C48278 /* SummerSlider.framework in Embed Frameworks */, 46 | ); 47 | name = "Embed Frameworks"; 48 | runOnlyForDeploymentPostprocessing = 0; 49 | }; 50 | /* End PBXCopyFilesBuildPhase section */ 51 | 52 | /* Begin PBXFileReference section */ 53 | 4968C8A21F77A88300C48278 /* SummerSlider.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SummerSlider.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 4968C8A51F77A88400C48278 /* SummerSlider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SummerSlider.h; sourceTree = ""; }; 55 | 4968C8A61F77A88400C48278 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | 4968C8AD1F77A8DB00C48278 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 57 | 4968C8AE1F77A8DB00C48278 /* SummerSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SummerSlider.swift; sourceTree = ""; }; 58 | 4968C8F91F77AAD300C48278 /* SummerSliderDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SummerSliderDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 59 | 4968C8FB1F77AAD300C48278 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 60 | 4968C9001F77AAD300C48278 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 61 | 4968C9021F77AAD300C48278 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 62 | 4968C9051F77AAD300C48278 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 63 | 4968C9071F77AAD300C48278 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 64 | 49A7BA9E1F79298500997EC3 /* SummerSliderTypes.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SummerSliderTypes.swift; sourceTree = ""; }; 65 | 49A7BAA01F7A55EC00997EC3 /* HorizontalSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalSlider.swift; sourceTree = ""; }; 66 | 49A7BAA11F7A55EC00997EC3 /* Slider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Slider.swift; sourceTree = ""; }; 67 | 49A7BAA21F7A55EC00997EC3 /* SliderDrawingProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderDrawingProtocol.swift; sourceTree = ""; }; 68 | 49A7BAA31F7A55EC00997EC3 /* SliderFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SliderFactory.swift; sourceTree = ""; }; 69 | 49A7BAA41F7A55EC00997EC3 /* VerticalSlider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VerticalSlider.swift; sourceTree = ""; }; 70 | 49CA0E8B1F78CED9008CA1F2 /* HorizontalViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HorizontalViewController.swift; sourceTree = ""; }; 71 | /* End PBXFileReference section */ 72 | 73 | /* Begin PBXFrameworksBuildPhase section */ 74 | 4968C89E1F77A88300C48278 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | ); 79 | runOnlyForDeploymentPostprocessing = 0; 80 | }; 81 | 4968C8F61F77AAD300C48278 /* Frameworks */ = { 82 | isa = PBXFrameworksBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | 4968C90B1F77AADE00C48278 /* SummerSlider.framework in Frameworks */, 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXFrameworksBuildPhase section */ 90 | 91 | /* Begin PBXGroup section */ 92 | 4968C8981F77A88300C48278 = { 93 | isa = PBXGroup; 94 | children = ( 95 | 4968C8A41F77A88400C48278 /* SummerSlider */, 96 | 4968C8FA1F77AAD300C48278 /* SummerSliderDemo */, 97 | 4968C8A31F77A88300C48278 /* Products */, 98 | ); 99 | sourceTree = ""; 100 | }; 101 | 4968C8A31F77A88300C48278 /* Products */ = { 102 | isa = PBXGroup; 103 | children = ( 104 | 4968C8A21F77A88300C48278 /* SummerSlider.framework */, 105 | 4968C8F91F77AAD300C48278 /* SummerSliderDemo.app */, 106 | ); 107 | name = Products; 108 | sourceTree = ""; 109 | }; 110 | 4968C8A41F77A88400C48278 /* SummerSlider */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 49A7BAA01F7A55EC00997EC3 /* HorizontalSlider.swift */, 114 | 49A7BAA11F7A55EC00997EC3 /* Slider.swift */, 115 | 49A7BAA21F7A55EC00997EC3 /* SliderDrawingProtocol.swift */, 116 | 49A7BAA31F7A55EC00997EC3 /* SliderFactory.swift */, 117 | 49A7BAA41F7A55EC00997EC3 /* VerticalSlider.swift */, 118 | 49A7BA9E1F79298500997EC3 /* SummerSliderTypes.swift */, 119 | 4968C8AD1F77A8DB00C48278 /* Constants.swift */, 120 | 4968C8AE1F77A8DB00C48278 /* SummerSlider.swift */, 121 | 4968C8A51F77A88400C48278 /* SummerSlider.h */, 122 | 4968C8A61F77A88400C48278 /* Info.plist */, 123 | ); 124 | path = SummerSlider; 125 | sourceTree = ""; 126 | }; 127 | 4968C8FA1F77AAD300C48278 /* SummerSliderDemo */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 4968C9101F77B84300C48278 /* ViewControllers */, 131 | 4968C8FB1F77AAD300C48278 /* AppDelegate.swift */, 132 | 4968C8FF1F77AAD300C48278 /* Main.storyboard */, 133 | 4968C9021F77AAD300C48278 /* Assets.xcassets */, 134 | 4968C9041F77AAD300C48278 /* LaunchScreen.storyboard */, 135 | 4968C9071F77AAD300C48278 /* Info.plist */, 136 | ); 137 | path = SummerSliderDemo; 138 | sourceTree = ""; 139 | }; 140 | 4968C9101F77B84300C48278 /* ViewControllers */ = { 141 | isa = PBXGroup; 142 | children = ( 143 | 49CA0E8B1F78CED9008CA1F2 /* HorizontalViewController.swift */, 144 | ); 145 | name = ViewControllers; 146 | sourceTree = ""; 147 | }; 148 | /* End PBXGroup section */ 149 | 150 | /* Begin PBXHeadersBuildPhase section */ 151 | 4968C89F1F77A88300C48278 /* Headers */ = { 152 | isa = PBXHeadersBuildPhase; 153 | buildActionMask = 2147483647; 154 | files = ( 155 | 4968C8A71F77A88400C48278 /* SummerSlider.h in Headers */, 156 | ); 157 | runOnlyForDeploymentPostprocessing = 0; 158 | }; 159 | /* End PBXHeadersBuildPhase section */ 160 | 161 | /* Begin PBXNativeTarget section */ 162 | 4968C8A11F77A88300C48278 /* SummerSlider */ = { 163 | isa = PBXNativeTarget; 164 | buildConfigurationList = 4968C8AA1F77A88400C48278 /* Build configuration list for PBXNativeTarget "SummerSlider" */; 165 | buildPhases = ( 166 | 4968C89D1F77A88300C48278 /* Sources */, 167 | 4968C89E1F77A88300C48278 /* Frameworks */, 168 | 4968C89F1F77A88300C48278 /* Headers */, 169 | 4968C8A01F77A88300C48278 /* Resources */, 170 | ); 171 | buildRules = ( 172 | ); 173 | dependencies = ( 174 | ); 175 | name = SummerSlider; 176 | productName = SummerSlider; 177 | productReference = 4968C8A21F77A88300C48278 /* SummerSlider.framework */; 178 | productType = "com.apple.product-type.framework"; 179 | }; 180 | 4968C8F81F77AAD300C48278 /* SummerSliderDemo */ = { 181 | isa = PBXNativeTarget; 182 | buildConfigurationList = 4968C90A1F77AAD300C48278 /* Build configuration list for PBXNativeTarget "SummerSliderDemo" */; 183 | buildPhases = ( 184 | 4968C8F51F77AAD300C48278 /* Sources */, 185 | 4968C8F61F77AAD300C48278 /* Frameworks */, 186 | 4968C8F71F77AAD300C48278 /* Resources */, 187 | 4968C90F1F77AADE00C48278 /* Embed Frameworks */, 188 | ); 189 | buildRules = ( 190 | ); 191 | dependencies = ( 192 | 4968C90E1F77AADE00C48278 /* PBXTargetDependency */, 193 | ); 194 | name = SummerSliderDemo; 195 | productName = SummerSliderDemo; 196 | productReference = 4968C8F91F77AAD300C48278 /* SummerSliderDemo.app */; 197 | productType = "com.apple.product-type.application"; 198 | }; 199 | /* End PBXNativeTarget section */ 200 | 201 | /* Begin PBXProject section */ 202 | 4968C8991F77A88300C48278 /* Project object */ = { 203 | isa = PBXProject; 204 | attributes = { 205 | LastSwiftUpdateCheck = 0830; 206 | LastUpgradeCheck = 1030; 207 | ORGANIZATIONNAME = SuperbDerrick; 208 | TargetAttributes = { 209 | 4968C8A11F77A88300C48278 = { 210 | CreatedOnToolsVersion = 8.3.2; 211 | DevelopmentTeam = 5MKPJ9K6N6; 212 | LastSwiftMigration = 1030; 213 | ProvisioningStyle = Automatic; 214 | }; 215 | 4968C8F81F77AAD300C48278 = { 216 | CreatedOnToolsVersion = 8.3.2; 217 | LastSwiftMigration = 1030; 218 | ProvisioningStyle = Automatic; 219 | }; 220 | }; 221 | }; 222 | buildConfigurationList = 4968C89C1F77A88300C48278 /* Build configuration list for PBXProject "SummerSlider" */; 223 | compatibilityVersion = "Xcode 3.2"; 224 | developmentRegion = en; 225 | hasScannedForEncodings = 0; 226 | knownRegions = ( 227 | en, 228 | Base, 229 | ); 230 | mainGroup = 4968C8981F77A88300C48278; 231 | productRefGroup = 4968C8A31F77A88300C48278 /* Products */; 232 | projectDirPath = ""; 233 | projectRoot = ""; 234 | targets = ( 235 | 4968C8A11F77A88300C48278 /* SummerSlider */, 236 | 4968C8F81F77AAD300C48278 /* SummerSliderDemo */, 237 | ); 238 | }; 239 | /* End PBXProject section */ 240 | 241 | /* Begin PBXResourcesBuildPhase section */ 242 | 4968C8A01F77A88300C48278 /* Resources */ = { 243 | isa = PBXResourcesBuildPhase; 244 | buildActionMask = 2147483647; 245 | files = ( 246 | ); 247 | runOnlyForDeploymentPostprocessing = 0; 248 | }; 249 | 4968C8F71F77AAD300C48278 /* Resources */ = { 250 | isa = PBXResourcesBuildPhase; 251 | buildActionMask = 2147483647; 252 | files = ( 253 | 4968C9061F77AAD300C48278 /* LaunchScreen.storyboard in Resources */, 254 | 4968C9031F77AAD300C48278 /* Assets.xcassets in Resources */, 255 | 4968C9011F77AAD300C48278 /* Main.storyboard in Resources */, 256 | ); 257 | runOnlyForDeploymentPostprocessing = 0; 258 | }; 259 | /* End PBXResourcesBuildPhase section */ 260 | 261 | /* Begin PBXSourcesBuildPhase section */ 262 | 4968C89D1F77A88300C48278 /* Sources */ = { 263 | isa = PBXSourcesBuildPhase; 264 | buildActionMask = 2147483647; 265 | files = ( 266 | 4968C8AF1F77A8DB00C48278 /* Constants.swift in Sources */, 267 | 49A7BAA81F7A55EC00997EC3 /* SliderFactory.swift in Sources */, 268 | 49A7BAA71F7A55EC00997EC3 /* SliderDrawingProtocol.swift in Sources */, 269 | 49A7BA9F1F79298500997EC3 /* SummerSliderTypes.swift in Sources */, 270 | 49A7BAA91F7A55EC00997EC3 /* VerticalSlider.swift in Sources */, 271 | 49A7BAA51F7A55EC00997EC3 /* HorizontalSlider.swift in Sources */, 272 | 4968C8B01F77A8DB00C48278 /* SummerSlider.swift in Sources */, 273 | 49A7BAA61F7A55EC00997EC3 /* Slider.swift in Sources */, 274 | ); 275 | runOnlyForDeploymentPostprocessing = 0; 276 | }; 277 | 4968C8F51F77AAD300C48278 /* Sources */ = { 278 | isa = PBXSourcesBuildPhase; 279 | buildActionMask = 2147483647; 280 | files = ( 281 | 49CA0E8E1F78CED9008CA1F2 /* HorizontalViewController.swift in Sources */, 282 | 4968C8FC1F77AAD300C48278 /* AppDelegate.swift in Sources */, 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | }; 286 | /* End PBXSourcesBuildPhase section */ 287 | 288 | /* Begin PBXTargetDependency section */ 289 | 4968C90E1F77AADE00C48278 /* PBXTargetDependency */ = { 290 | isa = PBXTargetDependency; 291 | target = 4968C8A11F77A88300C48278 /* SummerSlider */; 292 | targetProxy = 4968C90D1F77AADE00C48278 /* PBXContainerItemProxy */; 293 | }; 294 | /* End PBXTargetDependency section */ 295 | 296 | /* Begin PBXVariantGroup section */ 297 | 4968C8FF1F77AAD300C48278 /* Main.storyboard */ = { 298 | isa = PBXVariantGroup; 299 | children = ( 300 | 4968C9001F77AAD300C48278 /* Base */, 301 | ); 302 | name = Main.storyboard; 303 | sourceTree = ""; 304 | }; 305 | 4968C9041F77AAD300C48278 /* LaunchScreen.storyboard */ = { 306 | isa = PBXVariantGroup; 307 | children = ( 308 | 4968C9051F77AAD300C48278 /* Base */, 309 | ); 310 | name = LaunchScreen.storyboard; 311 | sourceTree = ""; 312 | }; 313 | /* End PBXVariantGroup section */ 314 | 315 | /* Begin XCBuildConfiguration section */ 316 | 4968C8A81F77A88400C48278 /* Debug */ = { 317 | isa = XCBuildConfiguration; 318 | buildSettings = { 319 | ALWAYS_SEARCH_USER_PATHS = NO; 320 | CLANG_ANALYZER_NONNULL = YES; 321 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 322 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 323 | CLANG_CXX_LIBRARY = "libc++"; 324 | CLANG_ENABLE_MODULES = YES; 325 | CLANG_ENABLE_OBJC_ARC = YES; 326 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 327 | CLANG_WARN_BOOL_CONVERSION = YES; 328 | CLANG_WARN_COMMA = YES; 329 | CLANG_WARN_CONSTANT_CONVERSION = YES; 330 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 331 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 332 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 333 | CLANG_WARN_EMPTY_BODY = YES; 334 | CLANG_WARN_ENUM_CONVERSION = YES; 335 | CLANG_WARN_INFINITE_RECURSION = YES; 336 | CLANG_WARN_INT_CONVERSION = YES; 337 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 338 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 339 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 340 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 341 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 342 | CLANG_WARN_STRICT_PROTOTYPES = YES; 343 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 344 | CLANG_WARN_UNREACHABLE_CODE = YES; 345 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 346 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 347 | COPY_PHASE_STRIP = NO; 348 | CURRENT_PROJECT_VERSION = 1; 349 | DEBUG_INFORMATION_FORMAT = dwarf; 350 | ENABLE_STRICT_OBJC_MSGSEND = YES; 351 | ENABLE_TESTABILITY = YES; 352 | GCC_C_LANGUAGE_STANDARD = gnu99; 353 | GCC_DYNAMIC_NO_PIC = NO; 354 | GCC_NO_COMMON_BLOCKS = YES; 355 | GCC_OPTIMIZATION_LEVEL = 0; 356 | GCC_PREPROCESSOR_DEFINITIONS = ( 357 | "DEBUG=1", 358 | "$(inherited)", 359 | ); 360 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 361 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 362 | GCC_WARN_UNDECLARED_SELECTOR = YES; 363 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 364 | GCC_WARN_UNUSED_FUNCTION = YES; 365 | GCC_WARN_UNUSED_VARIABLE = YES; 366 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 367 | MTL_ENABLE_DEBUG_INFO = YES; 368 | ONLY_ACTIVE_ARCH = YES; 369 | SDKROOT = iphoneos; 370 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 371 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 372 | SWIFT_VERSION = 4.0; 373 | TARGETED_DEVICE_FAMILY = "1,2"; 374 | VERSIONING_SYSTEM = "apple-generic"; 375 | VERSION_INFO_PREFIX = ""; 376 | }; 377 | name = Debug; 378 | }; 379 | 4968C8A91F77A88400C48278 /* Release */ = { 380 | isa = XCBuildConfiguration; 381 | buildSettings = { 382 | ALWAYS_SEARCH_USER_PATHS = NO; 383 | CLANG_ANALYZER_NONNULL = YES; 384 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 385 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 386 | CLANG_CXX_LIBRARY = "libc++"; 387 | CLANG_ENABLE_MODULES = YES; 388 | CLANG_ENABLE_OBJC_ARC = YES; 389 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 390 | CLANG_WARN_BOOL_CONVERSION = YES; 391 | CLANG_WARN_COMMA = YES; 392 | CLANG_WARN_CONSTANT_CONVERSION = YES; 393 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 394 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 395 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 396 | CLANG_WARN_EMPTY_BODY = YES; 397 | CLANG_WARN_ENUM_CONVERSION = YES; 398 | CLANG_WARN_INFINITE_RECURSION = YES; 399 | CLANG_WARN_INT_CONVERSION = YES; 400 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 401 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 402 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 403 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 404 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 405 | CLANG_WARN_STRICT_PROTOTYPES = YES; 406 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 407 | CLANG_WARN_UNREACHABLE_CODE = YES; 408 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 409 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 410 | COPY_PHASE_STRIP = NO; 411 | CURRENT_PROJECT_VERSION = 1; 412 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 413 | ENABLE_NS_ASSERTIONS = NO; 414 | ENABLE_STRICT_OBJC_MSGSEND = YES; 415 | GCC_C_LANGUAGE_STANDARD = gnu99; 416 | GCC_NO_COMMON_BLOCKS = YES; 417 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 418 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 419 | GCC_WARN_UNDECLARED_SELECTOR = YES; 420 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 421 | GCC_WARN_UNUSED_FUNCTION = YES; 422 | GCC_WARN_UNUSED_VARIABLE = YES; 423 | IPHONEOS_DEPLOYMENT_TARGET = 10.3; 424 | MTL_ENABLE_DEBUG_INFO = NO; 425 | SDKROOT = iphoneos; 426 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 427 | SWIFT_VERSION = 4.0; 428 | TARGETED_DEVICE_FAMILY = "1,2"; 429 | VALIDATE_PRODUCT = YES; 430 | VERSIONING_SYSTEM = "apple-generic"; 431 | VERSION_INFO_PREFIX = ""; 432 | }; 433 | name = Release; 434 | }; 435 | 4968C8AB1F77A88400C48278 /* Debug */ = { 436 | isa = XCBuildConfiguration; 437 | buildSettings = { 438 | CLANG_ENABLE_MODULES = YES; 439 | CODE_SIGN_IDENTITY = ""; 440 | DEFINES_MODULE = YES; 441 | DEVELOPMENT_TEAM = 5MKPJ9K6N6; 442 | DYLIB_COMPATIBILITY_VERSION = 1; 443 | DYLIB_CURRENT_VERSION = 1; 444 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 445 | INFOPLIST_FILE = SummerSlider/Info.plist; 446 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 447 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 448 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.github.io.SummerSlider; 449 | PRODUCT_NAME = "$(TARGET_NAME)"; 450 | SKIP_INSTALL = YES; 451 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 452 | SWIFT_VERSION = 5.0; 453 | }; 454 | name = Debug; 455 | }; 456 | 4968C8AC1F77A88400C48278 /* Release */ = { 457 | isa = XCBuildConfiguration; 458 | buildSettings = { 459 | CLANG_ENABLE_MODULES = YES; 460 | CODE_SIGN_IDENTITY = ""; 461 | DEFINES_MODULE = YES; 462 | DEVELOPMENT_TEAM = 5MKPJ9K6N6; 463 | DYLIB_COMPATIBILITY_VERSION = 1; 464 | DYLIB_CURRENT_VERSION = 1; 465 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 466 | INFOPLIST_FILE = SummerSlider/Info.plist; 467 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 468 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 469 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.github.io.SummerSlider; 470 | PRODUCT_NAME = "$(TARGET_NAME)"; 471 | SKIP_INSTALL = YES; 472 | SWIFT_VERSION = 5.0; 473 | }; 474 | name = Release; 475 | }; 476 | 4968C9081F77AAD300C48278 /* Debug */ = { 477 | isa = XCBuildConfiguration; 478 | buildSettings = { 479 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 480 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 481 | DEVELOPMENT_TEAM = ""; 482 | INFOPLIST_FILE = SummerSliderDemo/Info.plist; 483 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 484 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.github.io.SummerSliderDemo; 485 | PRODUCT_NAME = "$(TARGET_NAME)"; 486 | SWIFT_VERSION = 5.0; 487 | }; 488 | name = Debug; 489 | }; 490 | 4968C9091F77AAD300C48278 /* Release */ = { 491 | isa = XCBuildConfiguration; 492 | buildSettings = { 493 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 494 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 495 | DEVELOPMENT_TEAM = ""; 496 | INFOPLIST_FILE = SummerSliderDemo/Info.plist; 497 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 498 | PRODUCT_BUNDLE_IDENTIFIER = superbderrick.github.io.SummerSliderDemo; 499 | PRODUCT_NAME = "$(TARGET_NAME)"; 500 | SWIFT_VERSION = 5.0; 501 | }; 502 | name = Release; 503 | }; 504 | /* End XCBuildConfiguration section */ 505 | 506 | /* Begin XCConfigurationList section */ 507 | 4968C89C1F77A88300C48278 /* Build configuration list for PBXProject "SummerSlider" */ = { 508 | isa = XCConfigurationList; 509 | buildConfigurations = ( 510 | 4968C8A81F77A88400C48278 /* Debug */, 511 | 4968C8A91F77A88400C48278 /* Release */, 512 | ); 513 | defaultConfigurationIsVisible = 0; 514 | defaultConfigurationName = Release; 515 | }; 516 | 4968C8AA1F77A88400C48278 /* Build configuration list for PBXNativeTarget "SummerSlider" */ = { 517 | isa = XCConfigurationList; 518 | buildConfigurations = ( 519 | 4968C8AB1F77A88400C48278 /* Debug */, 520 | 4968C8AC1F77A88400C48278 /* Release */, 521 | ); 522 | defaultConfigurationIsVisible = 0; 523 | defaultConfigurationName = Release; 524 | }; 525 | 4968C90A1F77AAD300C48278 /* Build configuration list for PBXNativeTarget "SummerSliderDemo" */ = { 526 | isa = XCConfigurationList; 527 | buildConfigurations = ( 528 | 4968C9081F77AAD300C48278 /* Debug */, 529 | 4968C9091F77AAD300C48278 /* Release */, 530 | ); 531 | defaultConfigurationIsVisible = 0; 532 | defaultConfigurationName = Release; 533 | }; 534 | /* End XCConfigurationList section */ 535 | }; 536 | rootObject = 4968C8991F77A88300C48278 /* Project object */; 537 | } 538 | --------------------------------------------------------------------------------