Marino Faggiana 6 жил өмнө
parent
commit
720e724be8
100 өөрчлөгдсөн 4111 нэмэгдсэн , 218 устгасан
  1. 1 0
      Cartfile
  2. 2 0
      Cartfile.resolved
  3. 35 0
      Carthage/Checkouts/EAIntroView/.gitignore
  4. 23 0
      Carthage/Checkouts/EAIntroView/.travis.yml
  5. 78 0
      Carthage/Checkouts/EAIntroView/CHANGELOG.md
  6. 1 0
      Carthage/Checkouts/EAIntroView/Cartfile
  7. 20 0
      Carthage/Checkouts/EAIntroView/EAIntroView.podspec
  8. 2 2
      Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroPage.h
  9. 1 1
      Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroPage.m
  10. 3 6
      Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroView.h
  11. 318 209
      Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroView.m
  12. 10 0
      Carthage/Checkouts/EAIntroView/Example/EAIntroView.xcworkspace/contents.xcworkspacedata
  13. 7 0
      Carthage/Checkouts/EAIntroView/Example/Podfile
  14. 22 0
      Carthage/Checkouts/EAIntroView/Example/Podfile.lock
  15. 0 0
      Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.h
  16. 0 0
      Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.m
  17. 19 0
      Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/LICENSE
  18. 30 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Local Podspecs/EAIntroView.podspec.json
  19. 22 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Manifest.lock
  20. 19 0
      Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/LICENSE
  21. 76 0
      Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/SMPageControl.h
  22. 727 0
      Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/SMPageControl.m
  23. 5 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-dummy.m
  24. 12 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-prefix.pch
  25. 18 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-umbrella.h
  26. 6 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView.modulemap
  27. 10 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView.xcconfig
  28. 26 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/Info.plist
  29. 5 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-dummy.m
  30. 12 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-prefix.pch
  31. 17 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-umbrella.h
  32. 6 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView.modulemap
  33. 9 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView.xcconfig
  34. 26 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/Info.plist
  35. 26 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Info.plist
  36. 70 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-acknowledgements.markdown
  37. 114 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-acknowledgements.plist
  38. 5 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-dummy.m
  39. 116 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-frameworks.sh
  40. 106 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-resources.sh
  41. 16 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-umbrella.h
  42. 9 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.debug.xcconfig
  43. 6 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.modulemap
  44. 9 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.release.xcconfig
  45. 26 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/Info.plist
  46. 5 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-dummy.m
  47. 12 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-prefix.pch
  48. 17 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-umbrella.h
  49. 6 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl.modulemap
  50. 9 0
      Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl.xcconfig
  51. 53 0
      Carthage/Checkouts/EAIntroView/Example/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
  52. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg1@2x.png
  53. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg2@2x.png
  54. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg3@2x.png
  55. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg4@2x.png
  56. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bigLogo@2x.png
  57. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon1@2x.png
  58. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon2@2x.png
  59. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon3@2x.png
  60. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/pageDot.png
  61. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/pageDot@2x.png
  62. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/skipButton@2x.png
  63. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title1@2x.png
  64. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title2@2x.png
  65. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title3@2x.png
  66. BIN
      Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title4@2x.png
  67. 54 0
      Carthage/Checkouts/EAIntroView/Example/Resources/IntroPage.xib
  68. 41 0
      Carthage/Checkouts/EAIntroView/Example/Resources/LaunchScreen.xib
  69. 224 0
      Carthage/Checkouts/EAIntroView/Example/Resources/MainStoryboard.storyboard
  70. 12 0
      Carthage/Checkouts/EAIntroView/Example/Source/AppDelegate.h
  71. 20 0
      Carthage/Checkouts/EAIntroView/Example/Source/AppDelegate.m
  72. 11 0
      Carthage/Checkouts/EAIntroView/Example/Source/ViewController.h
  73. 390 0
      Carthage/Checkouts/EAIntroView/Example/Source/ViewController.m
  74. 40 0
      Carthage/Checkouts/EAIntroView/Example/Supporting-files/Info.plist
  75. 13 0
      Carthage/Checkouts/EAIntroView/Example/Supporting-files/main.m
  76. 21 0
      Carthage/Checkouts/EAIntroView/LICENSE.md
  77. BIN
      Carthage/Checkouts/EAIntroView/Screenshot01.png
  78. BIN
      Carthage/Checkouts/EAIntroView/Screenshot02.png
  79. 34 0
      Carthage/Checkouts/EARestrictedScrollView/.gitignore
  80. 23 0
      Carthage/Checkouts/EARestrictedScrollView/.travis.yml
  81. 24 0
      Carthage/Checkouts/EARestrictedScrollView/CHANGELOG.md
  82. BIN
      Carthage/Checkouts/EARestrictedScrollView/Demo.gif
  83. 18 0
      Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView.podspec
  84. 42 0
      Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.h
  85. 119 0
      Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.m
  86. 15 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Podfile
  87. 36 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Podfile.lock
  88. 14 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h
  89. 284 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m
  90. 17 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h
  91. 25 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.m
  92. 22 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/LICENSE.md
  93. 25 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.h
  94. 60 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.m
  95. 17 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDefines.h
  96. 13 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDoubleTuple.h
  97. 45 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDoubleTuple.m
  98. 45 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPExpect.h
  99. 221 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPExpect.m
  100. 13 0
      Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPFloatTuple.h

+ 1 - 0
Cartfile

@@ -4,3 +4,4 @@ github "danielsaidi/Sheeeeeeeeet"
 github "sgr-ksmt/PDFGenerator" ~> 2.1
 github "MortimerGoro/MGSwipeTableCell"
 github "dzenbot/DZNEmptyDataSet"
+github "ealeksandrov/EAIntroView"

+ 2 - 0
Cartfile.resolved

@@ -1,6 +1,8 @@
 github "MortimerGoro/MGSwipeTableCell" "1.6.7"
 github "danielsaidi/Sheeeeeeeeet" "1.0.1"
 github "dzenbot/DZNEmptyDataSet" "v1.8.1"
+github "ealeksandrov/EAIntroView" "2.12.0"
+github "ealeksandrov/EARestrictedScrollView" "1.1.0"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "sgr-ksmt/PDFGenerator" "2.1"
 github "tilltue/TLPhotoPicker" "1.7.7"

+ 35 - 0
Carthage/Checkouts/EAIntroView/.gitignore

@@ -0,0 +1,35 @@
+# OS noise
+*.DS_Store
+._*
+*~
+
+# Other CSM
+.hg
+.svn
+CVS
+
+# Xcode settings
+xcuserdata/
+
+# Xcode noise
+*.log
+*~.nib
+*.moved-aside
+*.xccheckout
+*.xcscmblueprint
+
+# Build generated
+[Bb]uild/
+DerivedData/
+
+# Obj-C/Swift specific
+*.hmap
+*.ipa
+*.dSYM.zip
+*.dSYM
+
+# Carthage
+Carthage/
+
+# Swift Package Manager
+.build/

+ 23 - 0
Carthage/Checkouts/EAIntroView/.travis.yml

@@ -0,0 +1,23 @@
+language: objective-c
+osx_image: xcode9
+before_install:
+  - export LANG=en_US.UTF-8
+  - brew update
+  - brew outdated carthage || brew upgrade carthage
+  - gem install cocoapods --no-rdoc --no-ri --no-document --quiet
+  - pod install --project-directory=Example
+script:
+  - set -o pipefail && xcodebuild -workspace Example/EAIntroView.xcworkspace -scheme EAIntroView-Example -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO | xcpretty
+  - pod lib lint
+before_deploy:
+  - carthage build --no-skip-current
+  - carthage archive EAIntroView
+deploy:
+  provider: releases
+  api_key:
+    secure: KVRgXHYFgNRhn55Sg1ubMBdFRSghJoTJZ7vVc/kY69grj5husQnkKGEikMkGWjQAVetjE0KgQ/UzAXkxf9m4y0BJXc0WCOOzVwmSec3lw4wbPl5QoHSyy7Etfz6ji0FSLTAjLWKz7bU35o3KHB+MU12LzaV82Yvc4h8XcpSnRj8=
+  file: EAIntroView.framework.zip
+  skip_cleanup: true
+  on:
+    repo: ealeksandrov/EAIntroView
+    tags: true

+ 78 - 0
Carthage/Checkouts/EAIntroView/CHANGELOG.md

@@ -0,0 +1,78 @@
+# EAIntroView
+
+## Upcoming
+
+
+
+## Version 2.12.0
+
+* Adds Carthage compatibility ([#204](https://github.com/ealeksandrov/EAIntroView/issues/204))
+* Removes `setCurrentPageIndex:` and `setCurrentPageIndex:animated:` (see discussion in [#213](https://github.com/ealeksandrov/EAIntroView/issues/213))
+* Fixes `scrollToPageForIndex:animated:` not triggering lifecycle actions for `animated:NO` ([#213](https://github.com/ealeksandrov/EAIntroView/issues/213))
+* Fixes unintended behavior for `pageControl` action while manually swiping pages ([#201](https://github.com/ealeksandrov/EAIntroView/issues/201))
+
+## Version 2.11.0
+
+* Adds obj-c lightweight generics
+* Adds autolayout constraints to keep titleIconView inside page frame ([#212](https://github.com/ealeksandrov/EAIntroView/issues/212))
+
+## Version 2.10.0
+
+* Adds "Tap to next" support on custom views
+* Adds delegate method `introWillFinish:wasSkipped:`
+* Adds delegate method `intro:didScrollWithOffset:`
+* Fixes crash when removing EAIntroView from the view hierarchy ([#168](https://github.com/ealeksandrov/EAIntroView/issues/168))
+* Fixes bug when tapping a page to advance does not call the delegate method `pageAppeared` ([#174](https://github.com/ealeksandrov/EAIntroView/issues/174))
+* Fixes constraints for `skipButton` and `pageControl` ([#185](https://github.com/ealeksandrov/EAIntroView/issues/185))
+* Fixes layout issue on rotation for iPad ([#149](https://github.com/ealeksandrov/EAIntroView/issues/149))
+
+## Version 2.9.0
+
+* Adds Cocoapods 1.0.0 support for example project
+* Adds text alignment to title and description labels
+* Updates accessibility (better VoiceOver support)
+* Replaces delegate call `introDidFinish:` with `introDidFinish:wasSkipped:` to include flag if intro was skipped
+
+## Version 2.8.3
+
+* Fixes scrolling restriction
+* Replaces `limitScrollingToPage:` method with `limitPageIndex` property
+
+## Version 2.8.2
+
+* Adds exposed `[EAIntroView pageWithCustomViewFromNibNamed:bundle:]` to allow choosing a bundle
+* Fixes black background for pages with custom view
+
+## Version 2.8.1
+
+* Fixes import statement to support swift installation
+* Adds description label side margins property
+
+## Version 2.8.0
+
+* Adds rotation support
+* Adds autolayout to page elements
+* Fixes constraints for custom skip button Y position
+* Fixes import statement to support manual installation
+* Fixes delegate method `introDidFinish:` fired too early
+* Fixes `currentPage` property on `setPages:`
+* Fixes `setCurrentPageIndex:` called with `animated:NO` - updates ivar directly
+* Updates pod deployment target to iOS 6
+
+## Version 2.7.4
+
+* Fixes autolayout for custom views
+* Updates `EARestrictedScrollView` dependency to fix autolayout crash
+* Updates custom view bg color to use page bg color
+
+## Version 2.7.3
+
+* Adds skip button height constraint
+* Adds autolayout on pages from Xib
+* Adds fullscreen presentation
+* Removes autolayout conditional checks and resizing masks
+* Fixes page control hiding
+* Fixes skip button hiding
+* Fixes resizing
+
+## Version 2.7.0

+ 1 - 0
Carthage/Checkouts/EAIntroView/Cartfile

@@ -0,0 +1 @@
+github "ealeksandrov/EARestrictedScrollView" ~> 1.1.0

+ 20 - 0
Carthage/Checkouts/EAIntroView/EAIntroView.podspec

@@ -0,0 +1,20 @@
+Pod::Spec.new do |s|
+
+  s.name         = 'EAIntroView'
+  s.version      = '2.12.0'
+  s.summary      = 'Highly customizable drop-in solution for introduction views.'
+  s.screenshot   = 'https://raw.githubusercontent.com/ealeksandrov/EAIntroView/master/Screenshot01.png'
+  s.homepage     = 'https://github.com/ealeksandrov/EAIntroView'
+  s.license      = { :type => 'MIT', :file => 'LICENSE.md' }
+  s.author       = { 'Evgeny Aleksandrov' => 'evgeny@aleksandrov.ws' }
+  s.social_media_url = 'https://twitter.com/ealeksandrov'
+
+  s.platform     = :ios, '6.0'
+  s.source       = { :git => 'https://github.com/ealeksandrov/EAIntroView.git', :tag => s.version.to_s }
+  s.source_files = 'EAIntroView/EAIntro{Page,View}.{h,m}'
+  s.requires_arc = true
+  s.public_header_files = 'EAIntroView/EAIntro{Page,View}.h'
+
+  s.dependency 'EARestrictedScrollView', '~> 1.1.0'
+
+end

+ 2 - 2
Libraries external/EAIntroView/EAIntroPage.h → Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroPage.h

@@ -1,12 +1,12 @@
 //
 //  EAIntroPage.h
 //
-//  Copyright (c) 2013-2015 Evgeny Aleksandrov. License: MIT. 
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
 
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
 
-typedef void (^VoidBlock)();
+typedef void (^VoidBlock)(void);
 
 @interface EAIntroPage : NSObject
 

+ 1 - 1
Libraries external/EAIntroView/EAIntroPage.m → Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroPage.m

@@ -1,7 +1,7 @@
 //
 //  EAIntroPage.m
 //
-//  Copyright (c) 2013-2015 Evgeny Aleksandrov. License: MIT. 
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
 
 #import "EAIntroPage.h"
 

+ 3 - 6
Libraries external/EAIntroView/EAIntroView.h → Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroView.h

@@ -1,7 +1,7 @@
 //
 //  EAIntroView.h
 //
-//  Copyright (c) 2013-2015 Evgeny Aleksandrov. License: MIT. 
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
 
 #import <UIKit/UIKit.h>
 #import <EARestrictedScrollView/EARestrictedScrollView.h>
@@ -64,7 +64,8 @@ typedef NS_ENUM(NSUInteger, EAViewAlignment) {
 // Page Control (Y position - from bottom of the screen)
 @property (nonatomic, strong) UIPageControl *pageControl;
 @property (nonatomic, assign) CGFloat pageControlY;
-@property (nonatomic, assign) NSUInteger currentPageIndex;
+
+@property (nonatomic, assign, readonly) NSUInteger currentPageIndex;
 @property (nonatomic, assign, readonly) NSUInteger visiblePageIndex;
 
 // Skip button (Y position - from bottom of the screen)
@@ -91,10 +92,6 @@ typedef NS_ENUM(NSUInteger, EAViewAlignment) {
 
 - (void)hideWithFadeOutDuration:(CGFloat)duration;
 
-- (void)setCurrentPageIndex:(NSUInteger)currentPageIndex;
-- (void)setCurrentPageIndex:(NSUInteger)currentPageIndex animated:(BOOL)animated;
-
-
 - (void)scrollToPageForIndex:(NSUInteger)newPageIndex animated:(BOOL)animated;
 
 @end

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 318 - 209
Carthage/Checkouts/EAIntroView/EAIntroView/EAIntroView.m


+ 10 - 0
Carthage/Checkouts/EAIntroView/Example/EAIntroView.xcworkspace/contents.xcworkspacedata

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Workspace
+   version = "1.0">
+   <FileRef
+      location = "group:EAIntroView.xcodeproj">
+   </FileRef>
+   <FileRef
+      location = "group:Pods/Pods.xcodeproj">
+   </FileRef>
+</Workspace>

+ 7 - 0
Carthage/Checkouts/EAIntroView/Example/Podfile

@@ -0,0 +1,7 @@
+source 'https://github.com/CocoaPods/Specs.git'
+use_frameworks!
+
+target 'EAIntroView' do
+  pod 'EAIntroView', :path => '../'
+  pod 'SMPageControl', '~> 1.2'
+end

+ 22 - 0
Carthage/Checkouts/EAIntroView/Example/Podfile.lock

@@ -0,0 +1,22 @@
+PODS:
+  - EAIntroView (2.12.0):
+    - EARestrictedScrollView (~> 1.1.0)
+  - EARestrictedScrollView (1.1.0)
+  - SMPageControl (1.2)
+
+DEPENDENCIES:
+  - EAIntroView (from `../`)
+  - SMPageControl (~> 1.2)
+
+EXTERNAL SOURCES:
+  EAIntroView:
+    :path: ../
+
+SPEC CHECKSUMS:
+  EAIntroView: 249559079ddfdbe80e5bcb755c04c3b964b2ac27
+  EARestrictedScrollView: b0c2a3f92fb2610bb44d71c5e4893777c89e45ef
+  SMPageControl: 922892813001cfaf059e86e6801f46a967e9ee29
+
+PODFILE CHECKSUM: ccd78dd24340deb55420824d45fb13fac359a077
+
+COCOAPODS: 1.3.1

+ 0 - 0
Libraries external/EARestrictedScrollView/EARestrictedScrollView.h → Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.h


+ 0 - 0
Libraries external/EARestrictedScrollView/EARestrictedScrollView.m → Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.m


+ 19 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/EARestrictedScrollView/LICENSE

@@ -0,0 +1,19 @@
+Copyright (c) 2015-2016 Evgeny Aleksandrov <evgeny@aleksandrov.ws>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 30 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Local Podspecs/EAIntroView.podspec.json

@@ -0,0 +1,30 @@
+{
+  "name": "EAIntroView",
+  "version": "2.12.0",
+  "summary": "Highly customizable drop-in solution for introduction views.",
+  "screenshots": "https://raw.githubusercontent.com/ealeksandrov/EAIntroView/master/Screenshot01.png",
+  "homepage": "https://github.com/ealeksandrov/EAIntroView",
+  "license": {
+    "type": "MIT",
+    "file": "LICENSE.md"
+  },
+  "authors": {
+    "Evgeny Aleksandrov": "evgeny@aleksandrov.ws"
+  },
+  "social_media_url": "https://twitter.com/ealeksandrov",
+  "platforms": {
+    "ios": "6.0"
+  },
+  "source": {
+    "git": "https://github.com/ealeksandrov/EAIntroView.git",
+    "tag": "2.12.0"
+  },
+  "source_files": "EAIntroView/EAIntro{Page,View}.{h,m}",
+  "requires_arc": true,
+  "public_header_files": "EAIntroView/EAIntro{Page,View}.h",
+  "dependencies": {
+    "EARestrictedScrollView": [
+      "~> 1.1.0"
+    ]
+  }
+}

+ 22 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Manifest.lock

@@ -0,0 +1,22 @@
+PODS:
+  - EAIntroView (2.12.0):
+    - EARestrictedScrollView (~> 1.1.0)
+  - EARestrictedScrollView (1.1.0)
+  - SMPageControl (1.2)
+
+DEPENDENCIES:
+  - EAIntroView (from `../`)
+  - SMPageControl (~> 1.2)
+
+EXTERNAL SOURCES:
+  EAIntroView:
+    :path: ../
+
+SPEC CHECKSUMS:
+  EAIntroView: 249559079ddfdbe80e5bcb755c04c3b964b2ac27
+  EARestrictedScrollView: b0c2a3f92fb2610bb44d71c5e4893777c89e45ef
+  SMPageControl: 922892813001cfaf059e86e6801f46a967e9ee29
+
+PODFILE CHECKSUM: ccd78dd24340deb55420824d45fb13fac359a077
+
+COCOAPODS: 1.3.1

+ 19 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/LICENSE

@@ -0,0 +1,19 @@
+Copyright (C) 2012 by Spaceman Labs (http://www.spacemanlabs.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

+ 76 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/SMPageControl.h

@@ -0,0 +1,76 @@
+//
+//  SMPageControl.h
+//  SMPageControl
+//
+//  Created by Jerry Jones on 10/13/12.
+//  Copyright (c) 2012 Spaceman Labs. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+typedef NS_ENUM(NSUInteger, SMPageControlAlignment) {
+	SMPageControlAlignmentLeft = 1,
+	SMPageControlAlignmentCenter,
+	SMPageControlAlignmentRight
+};
+
+typedef NS_ENUM(NSUInteger, SMPageControlVerticalAlignment) {
+	SMPageControlVerticalAlignmentTop = 1,
+	SMPageControlVerticalAlignmentMiddle,
+	SMPageControlVerticalAlignmentBottom
+};
+
+typedef NS_ENUM(NSUInteger, SMPageControlTapBehavior) {
+	SMPageControlTapBehaviorStep	= 1,
+	SMPageControlTapBehaviorJump
+};
+
+@interface SMPageControl : UIControl
+
+@property (nonatomic) NSInteger numberOfPages;
+@property (nonatomic) NSInteger currentPage;
+@property (nonatomic) CGFloat indicatorMargin							UI_APPEARANCE_SELECTOR; // deafult is 10
+@property (nonatomic) CGFloat indicatorDiameter							UI_APPEARANCE_SELECTOR; // deafult is 6
+@property (nonatomic) CGFloat minHeight									UI_APPEARANCE_SELECTOR; // default is 36, cannot be less than indicatorDiameter
+@property (nonatomic) SMPageControlAlignment alignment					UI_APPEARANCE_SELECTOR; // deafult is Center
+@property (nonatomic) SMPageControlVerticalAlignment verticalAlignment	UI_APPEARANCE_SELECTOR;	// deafult is Middle
+
+@property (nonatomic, strong) UIImage *pageIndicatorImage				UI_APPEARANCE_SELECTOR;
+@property (nonatomic, strong) UIImage *pageIndicatorMaskImage			UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set
+@property (nonatomic, strong) UIColor *pageIndicatorTintColor			UI_APPEARANCE_SELECTOR; // ignored if pageIndicatorImage is set
+@property (nonatomic, strong) UIImage *currentPageIndicatorImage		UI_APPEARANCE_SELECTOR;
+@property (nonatomic, strong) UIColor *currentPageIndicatorTintColor	UI_APPEARANCE_SELECTOR; // ignored if currentPageIndicatorImage is set
+
+@property (nonatomic) BOOL hidesForSinglePage;			// hide the the indicator if there is only one page. default is NO
+@property (nonatomic) BOOL defersCurrentPageDisplay;	// if set, clicking to a new page won't update the currently displayed page until -updateCurrentPageDisplay is called. default is NO
+
+@property (nonatomic) SMPageControlTapBehavior tapBehavior;	// SMPageControlTapBehaviorStep provides an increment/decrement behavior exactly like UIPageControl. SMPageControlTapBehaviorJump allows specific pages to be selected by tapping their respective indicator. Default is SMPageControlTapBehaviorStep
+
+- (void)updateCurrentPageDisplay;						// update page display to match the currentPage. ignored if defersCurrentPageDisplay is NO. setting the page value directly will update immediately
+
+- (CGRect)rectForPageIndicator:(NSInteger)pageIndex;
+- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount;
+
+- (void)setImage:(UIImage *)image forPage:(NSInteger)pageIndex;
+- (void)setCurrentImage:(UIImage *)image forPage:(NSInteger)pageIndex;
+- (void)setImageMask:(UIImage *)image forPage:(NSInteger)pageIndex;
+
+- (UIImage *)imageForPage:(NSInteger)pageIndex;
+- (UIImage *)currentImageForPage:(NSInteger)pageIndex;
+- (UIImage *)imageMaskForPage:(NSInteger)pageIndex;
+
+- (void)updatePageNumberForScrollView:(UIScrollView *)scrollView;
+- (void)setScrollViewContentOffsetForCurrentPage:(UIScrollView *)scrollView animated:(BOOL)animated;
+
+#pragma mark - UIAccessibility
+
+// SMPageControl mirrors UIPageControl's standard accessibility functionality by default.
+// Basically, the accessibility label is set to "[current page index + 1] of [page count]".
+
+// SMPageControl extends UIPageControl's functionality by allowing you to name specific pages. This is especially useful when using
+// the per-page indicator images, and allows you to provide more context to the user.
+
+- (void)setName:(NSString *)name forPage:(NSInteger)pageIndex;
+- (NSString *)nameForPage:(NSInteger)pageIndex;
+
+@end 

+ 727 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/SMPageControl/SMPageControl.m

@@ -0,0 +1,727 @@
+//
+//  SMPageControl.m
+//  SMPageControl
+//
+//  Created by Jerry Jones on 10/13/12.
+//  Copyright (c) 2012 Spaceman Labs. All rights reserved.
+//
+
+#import "SMPageControl.h"
+
+#if ! __has_feature(objc_arc)
+#warning This file must be compiled with ARC. Use -fobjc-arc flag (or convert project to ARC).
+#endif
+
+
+#define DEFAULT_INDICATOR_WIDTH 6.0f
+#define DEFAULT_INDICATOR_MARGIN 10.0f
+#define DEFAULT_MIN_HEIGHT 36.0f
+
+#define DEFAULT_INDICATOR_WIDTH_LARGE 7.0f
+#define DEFAULT_INDICATOR_MARGIN_LARGE 9.0f
+#define DEFAULT_MIN_HEIGHT_LARGE 36.0f
+
+typedef NS_ENUM(NSUInteger, SMPageControlImageType) {
+	SMPageControlImageTypeNormal = 1,
+	SMPageControlImageTypeCurrent,
+	SMPageControlImageTypeMask
+};
+
+typedef NS_ENUM(NSUInteger, SMPageControlStyleDefaults) {
+	SMPageControlDefaultStyleClassic = 0,
+	SMPageControlDefaultStyleModern
+};
+
+static SMPageControlStyleDefaults _defaultStyleForSystemVersion;
+
+@interface SMPageControl ()
+@property (strong, readonly, nonatomic) NSMutableDictionary *pageNames;
+@property (strong, readonly, nonatomic) NSMutableDictionary *pageImages;
+@property (strong, readonly, nonatomic) NSMutableDictionary *currentPageImages;
+@property (strong, readonly, nonatomic) NSMutableDictionary *pageImageMasks;
+@property (strong, readonly, nonatomic) NSMutableDictionary *cgImageMasks;
+@property (strong, readwrite, nonatomic) NSArray *pageRects;
+
+// Page Control used for stealing page number localizations for accessibility labels
+// I'm not sure I love this technique, but it's the best way to get exact translations for all the languages
+// that Apple supports out of the box
+@property (nonatomic, strong) UIPageControl *accessibilityPageControl;
+@end
+
+@implementation SMPageControl
+{
+@private
+    NSInteger			_displayedPage;
+	CGFloat				_measuredIndicatorWidth;
+	CGFloat				_measuredIndicatorHeight;
+	CGImageRef			_pageImageMask;
+}
+
+@synthesize pageNames = _pageNames;
+@synthesize pageImages = _pageImages;
+@synthesize currentPageImages = _currentPageImages;
+@synthesize pageImageMasks = _pageImageMasks;
+@synthesize cgImageMasks = _cgImageMasks;
+
++ (void)initialize
+{
+	NSString *reqSysVer = @"7.0";
+	NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
+	if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
+		_defaultStyleForSystemVersion = SMPageControlDefaultStyleModern;
+	} else {
+		_defaultStyleForSystemVersion = SMPageControlDefaultStyleClassic;
+	}
+}
+
+- (void)_initialize
+{
+	_numberOfPages = 0;
+	_tapBehavior = SMPageControlTapBehaviorStep;
+    
+	self.backgroundColor = [UIColor clearColor];
+	
+	// If the app wasn't linked against iOS 7 or newer, always use the classic style
+	// otherwise, use the style of the current OS.
+#ifdef __IPHONE_7_0
+	[self setStyleWithDefaults:_defaultStyleForSystemVersion];
+#else
+	[self setStyleWithDefaults:SMPageControlDefaultStyleClassic];
+#endif
+	
+	_alignment = SMPageControlAlignmentCenter;
+	_verticalAlignment = SMPageControlVerticalAlignmentMiddle;
+	
+	self.isAccessibilityElement = YES;
+	self.accessibilityTraits = UIAccessibilityTraitUpdatesFrequently;
+	self.accessibilityPageControl = [[UIPageControl alloc] init];
+	self.contentMode = UIViewContentModeRedraw;
+}
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (nil == self) {
+		return nil;
+    }
+	
+	[self _initialize];
+    return self;
+}
+
+- (id)initWithCoder:(NSCoder *)aDecoder
+{
+    self = [super initWithCoder:aDecoder];
+    if (nil == self) {
+        return nil;
+    }
+
+    [self _initialize];
+    return self;
+}
+
+- (void)dealloc
+{
+	if (_pageImageMask) {
+		CGImageRelease(_pageImageMask);
+	}	
+}
+
+- (void)drawRect:(CGRect)rect
+{
+	CGContextRef context = UIGraphicsGetCurrentContext();
+	[self _renderPages:context rect:rect];
+}
+
+- (void)_renderPages:(CGContextRef)context rect:(CGRect)rect
+{
+	NSMutableArray *pageRects = [NSMutableArray arrayWithCapacity:self.numberOfPages];
+    
+	if (_numberOfPages < 2 && _hidesForSinglePage) {
+		return;
+	}
+		
+	CGFloat left = [self _leftOffset];
+		
+	CGFloat xOffset = left;
+	CGFloat yOffset = 0.0f;
+	UIColor *fillColor = nil;
+	UIImage *image = nil;
+	CGImageRef maskingImage = nil;
+	CGSize maskSize = CGSizeZero;
+	
+	for (NSInteger i = 0; i < _numberOfPages; i++) {
+		NSNumber *indexNumber = @(i);
+		
+		if (i == _displayedPage) {
+			fillColor = _currentPageIndicatorTintColor ? _currentPageIndicatorTintColor : [UIColor whiteColor];
+			image = _currentPageImages[indexNumber];
+			if (nil == image) {
+				image = _currentPageIndicatorImage;
+			}
+		} else {
+			fillColor = _pageIndicatorTintColor ? _pageIndicatorTintColor : [[UIColor whiteColor] colorWithAlphaComponent:0.3f];
+			image = _pageImages[indexNumber];
+			if (nil == image) {
+				image = _pageIndicatorImage;
+			}
+		}
+		
+		// If no finished images have been set, try a masking image
+		if (nil == image) {
+			maskingImage = (__bridge CGImageRef)_cgImageMasks[indexNumber];
+			UIImage *originalImage = _pageImageMasks[indexNumber];
+			maskSize = originalImage.size;
+
+			// If no per page mask is set, try for a global page mask!
+			if (nil == maskingImage) {
+				maskingImage = _pageImageMask;
+				maskSize = _pageIndicatorMaskImage.size;
+			}
+		}
+				
+		[fillColor set];
+		CGRect indicatorRect;
+		if (image) {
+			yOffset = [self _topOffsetForHeight:image.size.height rect:rect];
+			CGFloat centeredXOffset = xOffset + floorf((_measuredIndicatorWidth - image.size.width) / 2.0f);
+			[image drawAtPoint:CGPointMake(centeredXOffset, yOffset)];
+            indicatorRect = CGRectMake(centeredXOffset, yOffset, image.size.width, image.size.height);
+		} else if (maskingImage) {
+			yOffset = [self _topOffsetForHeight:maskSize.height rect:rect];
+			CGFloat centeredXOffset = xOffset + floorf((_measuredIndicatorWidth - maskSize.width) / 2.0f);
+			indicatorRect = CGRectMake(centeredXOffset, yOffset, maskSize.width, maskSize.height);
+			CGContextDrawImage(context, indicatorRect, maskingImage);
+		} else {
+			yOffset = [self _topOffsetForHeight:_indicatorDiameter rect:rect];
+			CGFloat centeredXOffset = xOffset + floorf((_measuredIndicatorWidth - _indicatorDiameter) / 2.0f);
+            indicatorRect = CGRectMake(centeredXOffset, yOffset, _indicatorDiameter, _indicatorDiameter);
+			CGContextFillEllipseInRect(context, indicatorRect);
+		}
+		
+        [pageRects addObject:[NSValue valueWithCGRect:indicatorRect]];
+		maskingImage = NULL;
+		xOffset += _measuredIndicatorWidth + _indicatorMargin;
+	}
+	
+	self.pageRects = pageRects;
+	
+}
+
+- (CGFloat)_leftOffset
+{
+	CGRect rect = self.bounds;
+	CGSize size = [self sizeForNumberOfPages:self.numberOfPages];
+	CGFloat left = 0.0f;
+	switch (_alignment) {
+		case SMPageControlAlignmentCenter:
+			left = ceilf(CGRectGetMidX(rect) - (size.width / 2.0f));
+			break;
+		case SMPageControlAlignmentRight:
+			left = CGRectGetMaxX(rect) - size.width;
+			break;
+		default:
+			break;
+	}
+	
+	return left;
+}
+
+- (CGFloat)_topOffsetForHeight:(CGFloat)height rect:(CGRect)rect
+{
+	CGFloat top = 0.0f;
+	switch (_verticalAlignment) {
+		case SMPageControlVerticalAlignmentMiddle:
+			top = CGRectGetMidY(rect) - (height / 2.0f);
+			break;
+		case SMPageControlVerticalAlignmentBottom:
+			top = CGRectGetMaxY(rect) - height;
+			break;
+		default:
+			break;
+	}
+	
+	return top;
+}
+
+- (void)updateCurrentPageDisplay
+{
+	_displayedPage = _currentPage;
+	[self setNeedsDisplay];
+}
+
+- (CGSize)sizeForNumberOfPages:(NSInteger)pageCount
+{
+	CGFloat marginSpace = MAX(0, pageCount - 1) * _indicatorMargin;
+	CGFloat indicatorSpace = pageCount * _measuredIndicatorWidth;
+	CGSize size = CGSizeMake(marginSpace + indicatorSpace, _measuredIndicatorHeight);
+	return size;
+}
+
+- (CGRect)rectForPageIndicator:(NSInteger)pageIndex
+{
+	if (pageIndex < 0 || pageIndex >= _numberOfPages) {
+		return CGRectZero;
+	}
+	
+	CGFloat left = [self _leftOffset];
+	CGSize size = [self sizeForNumberOfPages:pageIndex + 1];
+	CGRect rect = CGRectMake(left + size.width - _measuredIndicatorWidth, 0, _measuredIndicatorWidth, _measuredIndicatorWidth);
+	return rect;
+}
+
+- (void)_setImage:(UIImage *)image forPage:(NSInteger)pageIndex type:(SMPageControlImageType)type
+{
+	if (pageIndex < 0 || pageIndex >= _numberOfPages) {
+		return;
+	}
+	
+	NSMutableDictionary *dictionary = nil;
+	switch (type) {
+		case SMPageControlImageTypeCurrent:
+			dictionary = self.currentPageImages;
+			break;
+		case SMPageControlImageTypeNormal:
+			dictionary = self.pageImages;
+			break;
+		case SMPageControlImageTypeMask:
+			dictionary = self.pageImageMasks;
+			break;
+		default:
+			break;
+	}
+    
+    if (image) {
+        dictionary[@(pageIndex)] = image;
+    } else {
+        [dictionary removeObjectForKey:@(pageIndex)];
+    }
+}
+
+- (void)setImage:(UIImage *)image forPage:(NSInteger)pageIndex
+{
+    [self _setImage:image forPage:pageIndex type:SMPageControlImageTypeNormal];
+	[self _updateMeasuredIndicatorSizes];
+}
+
+- (void)setCurrentImage:(UIImage *)image forPage:(NSInteger)pageIndex
+{
+	[self _setImage:image forPage:pageIndex type:SMPageControlImageTypeCurrent];;
+	[self _updateMeasuredIndicatorSizes];
+}
+
+- (void)setImageMask:(UIImage *)image forPage:(NSInteger)pageIndex
+{
+	[self _setImage:image forPage:pageIndex type:SMPageControlImageTypeMask];
+	
+	if (nil == image) {
+		[self.cgImageMasks removeObjectForKey:@(pageIndex)];
+		return;
+	}
+	
+	CGImageRef maskImage = [self createMaskForImage:image];
+
+	if (maskImage) {
+		self.cgImageMasks[@(pageIndex)] = (__bridge id)maskImage;
+		CGImageRelease(maskImage);
+		[self _updateMeasuredIndicatorSizeWithSize:image.size];
+		[self setNeedsDisplay];
+	}
+}
+
+- (id)_imageForPage:(NSInteger)pageIndex type:(SMPageControlImageType)type
+{
+	if (pageIndex < 0 || pageIndex >= _numberOfPages) {
+		return nil;
+	}
+	
+	NSDictionary *dictionary = nil;
+	switch (type) {
+		case SMPageControlImageTypeCurrent:
+			dictionary = _currentPageImages;
+			break;
+		case SMPageControlImageTypeNormal:
+			dictionary = _pageImages;
+			break;
+		case SMPageControlImageTypeMask:
+			dictionary = _pageImageMasks;
+			break;
+		default:
+			break;
+	}
+	
+	return dictionary[@(pageIndex)];
+}
+
+- (UIImage *)imageForPage:(NSInteger)pageIndex
+{
+	return [self _imageForPage:pageIndex type:SMPageControlImageTypeNormal];
+}
+
+- (UIImage *)currentImageForPage:(NSInteger)pageIndex
+{
+	return [self _imageForPage:pageIndex type:SMPageControlImageTypeCurrent];
+}
+
+- (UIImage *)imageMaskForPage:(NSInteger)pageIndex
+{
+	return [self _imageForPage:pageIndex type:SMPageControlImageTypeMask];
+}
+
+- (CGSize)sizeThatFits:(CGSize)size
+{
+	CGSize sizeThatFits = [self sizeForNumberOfPages:self.numberOfPages];
+	sizeThatFits.height = MAX(sizeThatFits.height, _minHeight);
+	return sizeThatFits;
+}
+
+- (CGSize)intrinsicContentSize
+{
+	if (_numberOfPages < 1 || (_numberOfPages < 2 && _hidesForSinglePage)) {
+		return CGSizeMake(UIViewNoIntrinsicMetric, 0.0f);
+	}
+	CGSize intrinsicContentSize = CGSizeMake(UIViewNoIntrinsicMetric, MAX(_measuredIndicatorHeight, _minHeight));
+	return intrinsicContentSize;
+}
+
+- (void)updatePageNumberForScrollView:(UIScrollView *)scrollView
+{
+	NSInteger page = (int)floorf(scrollView.contentOffset.x / scrollView.bounds.size.width);
+	self.currentPage = page;
+}
+
+- (void)setScrollViewContentOffsetForCurrentPage:(UIScrollView *)scrollView animated:(BOOL)animated
+{
+	CGPoint offset = scrollView.contentOffset;
+	offset.x = scrollView.bounds.size.width * self.currentPage;
+	[scrollView setContentOffset:offset animated:animated];
+}
+
+- (void)setStyleWithDefaults:(SMPageControlStyleDefaults)defaultStyle
+{
+	switch (defaultStyle) {
+		case SMPageControlDefaultStyleModern:
+			self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH_LARGE;
+			self.indicatorMargin = DEFAULT_INDICATOR_MARGIN_LARGE;
+			self.pageIndicatorTintColor = [[UIColor whiteColor] colorWithAlphaComponent:0.2f];
+			self.minHeight = DEFAULT_MIN_HEIGHT_LARGE;
+			break;
+		case SMPageControlDefaultStyleClassic:
+		default:
+			self.indicatorDiameter = DEFAULT_INDICATOR_WIDTH;
+			self.indicatorMargin = DEFAULT_INDICATOR_MARGIN;
+			self.pageIndicatorTintColor = [[UIColor whiteColor] colorWithAlphaComponent:0.3f];
+			self.minHeight = DEFAULT_MIN_HEIGHT;
+			break;
+	}
+}
+
+#pragma mark -
+
+- (CGImageRef)createMaskForImage:(UIImage *)image CF_RETURNS_RETAINED
+{
+	size_t pixelsWide = image.size.width * image.scale;
+	size_t pixelsHigh = image.size.height * image.scale;
+	size_t bitmapBytesPerRow = (pixelsWide * 1);
+	CGContextRef context = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh, CGImageGetBitsPerComponent(image.CGImage), bitmapBytesPerRow, NULL, (CGBitmapInfo)kCGImageAlphaOnly);
+	CGContextTranslateCTM(context, 0.f, pixelsHigh);
+	CGContextScaleCTM(context, 1.0f, -1.0f);
+	
+	CGContextDrawImage(context, CGRectMake(0, 0, pixelsWide, pixelsHigh), image.CGImage);
+	CGImageRef maskImage = CGBitmapContextCreateImage(context);
+	CGContextRelease(context);
+
+	return maskImage;
+}
+
+- (void)_updateMeasuredIndicatorSizeWithSize:(CGSize)size
+{
+	_measuredIndicatorWidth = MAX(_measuredIndicatorWidth, size.width);
+	_measuredIndicatorHeight = MAX(_measuredIndicatorHeight, size.height);
+}
+
+- (void)_updateMeasuredIndicatorSizes
+{
+	_measuredIndicatorWidth = _indicatorDiameter;
+	_measuredIndicatorHeight = _indicatorDiameter;
+	
+	// If we're only using images, ignore the _indicatorDiameter
+	if ( (self.pageIndicatorImage || self.pageIndicatorMaskImage) && self.currentPageIndicatorImage )
+	{
+		_measuredIndicatorWidth = 0;
+		_measuredIndicatorHeight = 0;
+	}
+	
+	if (self.pageIndicatorImage) {
+		[self _updateMeasuredIndicatorSizeWithSize:self.pageIndicatorImage.size];
+	}
+	
+	if (self.currentPageIndicatorImage) {
+		[self _updateMeasuredIndicatorSizeWithSize:self.currentPageIndicatorImage.size];
+	}
+	
+	if (self.pageIndicatorMaskImage) {
+		[self _updateMeasuredIndicatorSizeWithSize:self.pageIndicatorMaskImage.size];
+	}
+
+	if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) {
+		[self invalidateIntrinsicContentSize];
+	}
+}
+
+
+#pragma mark - Tap Gesture
+
+// We're using touchesEnded: because we want to mimick UIPageControl as close as possible
+// As of iOS 6, UIPageControl still (as far as we know) does not use a tap gesture recognizer. This means that actions like
+// touching down, sliding around, and releasing, still results in the page incrementing or decrementing.
+- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
+{
+	UITouch *touch = [touches anyObject];
+	CGPoint point = [touch locationInView:self];
+    
+    if (SMPageControlTapBehaviorJump == self.tapBehavior) {
+		
+        __block NSInteger tappedIndicatorIndex = NSNotFound;
+		
+        [self.pageRects enumerateObjectsUsingBlock:^(NSValue *value, NSUInteger index, BOOL *stop) {
+            CGRect indicatorRect = [value CGRectValue];
+						
+            if (CGRectContainsPoint(indicatorRect, point)) {
+                tappedIndicatorIndex = index;
+                *stop = YES;
+            }
+        }];
+        
+        if (NSNotFound != tappedIndicatorIndex) {
+            [self setCurrentPage:tappedIndicatorIndex sendEvent:YES canDefer:YES];
+            return;
+        }
+    }
+    
+    CGSize size = [self sizeForNumberOfPages:self.numberOfPages];
+    CGFloat left = [self _leftOffset];
+    CGFloat middle = left + (size.width / 2.0f);
+    if (point.x < middle) {
+        [self setCurrentPage:self.currentPage - 1 sendEvent:YES canDefer:YES];
+    } else {
+        [self setCurrentPage:self.currentPage + 1 sendEvent:YES canDefer:YES];
+    }
+    
+}
+
+#pragma mark - Accessors
+
+- (void)setFrame:(CGRect)frame
+{
+	[super setFrame:frame];
+	[self setNeedsDisplay];
+}
+
+- (void)setIndicatorDiameter:(CGFloat)indicatorDiameter
+{
+	if (indicatorDiameter == _indicatorDiameter) {
+		return;
+	}
+	
+	_indicatorDiameter = indicatorDiameter;
+
+	// Absolute minimum height of the control is the indicator diameter
+	if (_minHeight < indicatorDiameter) {
+		self.minHeight = indicatorDiameter;
+	}
+
+	[self _updateMeasuredIndicatorSizes];
+	[self setNeedsDisplay];
+}
+
+- (void)setIndicatorMargin:(CGFloat)indicatorMargin
+{
+	if (indicatorMargin == _indicatorMargin) {
+		return;
+	}
+	
+	_indicatorMargin = indicatorMargin;
+	[self setNeedsDisplay];
+}
+
+- (void)setMinHeight:(CGFloat)minHeight
+{
+	if (minHeight == _minHeight) {
+		return;
+	}
+
+   // Absolute minimum height of the control is the indicator diameter
+	if (minHeight < _indicatorDiameter) {
+		minHeight = _indicatorDiameter;
+	}
+
+	_minHeight = minHeight;
+	if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) {
+		[self invalidateIntrinsicContentSize];
+	}
+	[self setNeedsLayout];
+}
+
+- (void)setNumberOfPages:(NSInteger)numberOfPages
+{
+	if (numberOfPages == _numberOfPages) {
+		return;
+	}
+	
+	self.accessibilityPageControl.numberOfPages = numberOfPages;
+	
+	_numberOfPages = MAX(0, numberOfPages);
+	if ([self respondsToSelector:@selector(invalidateIntrinsicContentSize)]) {
+		[self invalidateIntrinsicContentSize];
+	}
+	[self updateAccessibilityValue];
+	[self setNeedsDisplay];
+}
+
+- (void)setCurrentPage:(NSInteger)currentPage
+{
+	[self setCurrentPage:currentPage sendEvent:NO canDefer:NO];
+}
+
+- (void)setCurrentPage:(NSInteger)currentPage sendEvent:(BOOL)sendEvent canDefer:(BOOL)defer
+{	
+	_currentPage = MIN(MAX(0, currentPage), _numberOfPages - 1);
+	self.accessibilityPageControl.currentPage = self.currentPage;
+	
+	[self updateAccessibilityValue];
+	
+	if (NO == self.defersCurrentPageDisplay || NO == defer) {
+		_displayedPage = _currentPage;
+		[self setNeedsDisplay];
+	}
+	
+	if (sendEvent) {
+		[self sendActionsForControlEvents:UIControlEventValueChanged];
+	}
+}
+
+- (void)setCurrentPageIndicatorImage:(UIImage *)currentPageIndicatorImage
+{
+	if ([currentPageIndicatorImage isEqual:_currentPageIndicatorImage]) {
+		return;
+	}
+	
+	_currentPageIndicatorImage = currentPageIndicatorImage;
+	[self _updateMeasuredIndicatorSizes];
+	[self setNeedsDisplay];
+}
+
+- (void)setPageIndicatorImage:(UIImage *)pageIndicatorImage
+{
+	if ([pageIndicatorImage isEqual:_pageIndicatorImage]) {
+		return;
+	}
+	
+	_pageIndicatorImage = pageIndicatorImage;
+	[self _updateMeasuredIndicatorSizes];
+	[self setNeedsDisplay];
+}
+
+- (void)setPageIndicatorMaskImage:(UIImage *)pageIndicatorMaskImage
+{
+	if ([pageIndicatorMaskImage isEqual:_pageIndicatorMaskImage]) {
+		return;
+	}
+	
+	_pageIndicatorMaskImage = pageIndicatorMaskImage;
+	
+	if (_pageImageMask) {
+		CGImageRelease(_pageImageMask);
+	}
+	
+	_pageImageMask = [self createMaskForImage:_pageIndicatorMaskImage];
+	
+	[self _updateMeasuredIndicatorSizes];
+	[self setNeedsDisplay];
+}
+
+- (NSMutableDictionary *)pageNames
+{
+	if (nil != _pageNames) {
+		return _pageNames;
+	}
+	
+	_pageNames = [[NSMutableDictionary alloc] init];
+	return _pageNames;
+}
+
+- (NSMutableDictionary *)pageImages
+{
+	if (nil != _pageImages) {
+		return _pageImages;
+	}
+	
+	_pageImages = [[NSMutableDictionary alloc] init];
+	return _pageImages;
+}
+
+- (NSMutableDictionary *)currentPageImages
+{
+	if (nil != _currentPageImages) {
+		return _currentPageImages;
+	}
+	
+	_currentPageImages = [[NSMutableDictionary alloc] init];
+	return _currentPageImages;
+}
+
+- (NSMutableDictionary *)pageImageMasks
+{
+	if (nil != _pageImageMasks) {
+		return _pageImageMasks;
+	}
+	
+	_pageImageMasks = [[NSMutableDictionary alloc] init];
+	return _pageImageMasks;
+}
+
+- (NSMutableDictionary *)cgImageMasks
+{
+	if (nil != _cgImageMasks) {
+		return _cgImageMasks;
+	}
+	
+	_cgImageMasks = [[NSMutableDictionary alloc] init];
+	return _cgImageMasks;
+}
+
+#pragma mark - UIAccessibility
+
+- (void)setName:(NSString *)name forPage:(NSInteger)pageIndex
+{
+	if (pageIndex < 0 || pageIndex >= _numberOfPages) {
+		return;
+	}
+	
+	self.pageNames[@(pageIndex)] = name;
+	
+}
+
+- (NSString *)nameForPage:(NSInteger)pageIndex
+{
+	if (pageIndex < 0 || pageIndex >= _numberOfPages) {
+		return nil;
+	}
+	
+	return self.pageNames[@(pageIndex)];
+}
+
+- (void)updateAccessibilityValue
+{
+	NSString *pageName = [self nameForPage:self.currentPage];
+	NSString *accessibilityValue = self.accessibilityPageControl.accessibilityValue;
+	
+	if (pageName) {
+		self.accessibilityValue = [NSString stringWithFormat:@"%@ - %@", pageName, accessibilityValue];
+	} else {
+		self.accessibilityValue = accessibilityValue;
+	}
+}
+
+@end

+ 5 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_EAIntroView : NSObject
+@end
+@implementation PodsDummy_EAIntroView
+@end

+ 12 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 18 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView-umbrella.h

@@ -0,0 +1,18 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "EAIntroPage.h"
+#import "EAIntroView.h"
+
+FOUNDATION_EXPORT double EAIntroViewVersionNumber;
+FOUNDATION_EXPORT const unsigned char EAIntroViewVersionString[];
+

+ 6 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView.modulemap

@@ -0,0 +1,6 @@
+framework module EAIntroView {
+  umbrella header "EAIntroView-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 10 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/EAIntroView.xcconfig

@@ -0,0 +1,10 @@
+CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/EAIntroView
+FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
+PODS_BUILD_DIR = $BUILD_DIR
+PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/../..
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES

+ 26 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EAIntroView/Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>2.12.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_EARestrictedScrollView : NSObject
+@end
+@implementation PodsDummy_EARestrictedScrollView
+@end

+ 12 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 17 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView-umbrella.h

@@ -0,0 +1,17 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "EARestrictedScrollView.h"
+
+FOUNDATION_EXPORT double EARestrictedScrollViewVersionNumber;
+FOUNDATION_EXPORT const unsigned char EARestrictedScrollViewVersionString[];
+

+ 6 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView.modulemap

@@ -0,0 +1,6 @@
+framework module EARestrictedScrollView {
+  umbrella header "EARestrictedScrollView-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 9 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/EARestrictedScrollView.xcconfig

@@ -0,0 +1,9 @@
+CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
+PODS_BUILD_DIR = $BUILD_DIR
+PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/EARestrictedScrollView
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES

+ 26 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/EARestrictedScrollView/Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.1.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 26 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.0.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 70 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-acknowledgements.markdown

@@ -0,0 +1,70 @@
+# Acknowledgements
+This application makes use of the following third party libraries:
+
+## EAIntroView
+
+MIT License
+
+Copyright (c) 2013-2017 Evgeny Aleksandrov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+## EARestrictedScrollView
+
+Copyright (c) 2015-2016 Evgeny Aleksandrov <evgeny@aleksandrov.ws>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+## SMPageControl
+
+Copyright (C) 2012 by Spaceman Labs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Generated by CocoaPods - https://cocoapods.org

+ 114 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-acknowledgements.plist

@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>PreferenceSpecifiers</key>
+	<array>
+		<dict>
+			<key>FooterText</key>
+			<string>This application makes use of the following third party libraries:</string>
+			<key>Title</key>
+			<string>Acknowledgements</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>MIT License
+
+Copyright (c) 2013-2017 Evgeny Aleksandrov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>EAIntroView</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (c) 2015-2016 Evgeny Aleksandrov &lt;evgeny@aleksandrov.ws&gt;
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>EARestrictedScrollView</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Copyright (C) 2012 by Spaceman Labs
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or
+substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+</string>
+			<key>License</key>
+			<string>MIT</string>
+			<key>Title</key>
+			<string>SMPageControl</string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+		<dict>
+			<key>FooterText</key>
+			<string>Generated by CocoaPods - https://cocoapods.org</string>
+			<key>Title</key>
+			<string></string>
+			<key>Type</key>
+			<string>PSGroupSpecifier</string>
+		</dict>
+	</array>
+	<key>StringsTable</key>
+	<string>Acknowledgements</string>
+	<key>Title</key>
+	<string>Acknowledgements</string>
+</dict>
+</plist>

+ 5 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_Pods_EAIntroView : NSObject
+@end
+@implementation PodsDummy_Pods_EAIntroView
+@end

+ 116 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-frameworks.sh

@@ -0,0 +1,116 @@
+#!/bin/sh
+set -e
+
+echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+install_framework()
+{
+  if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$1"
+  elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
+    local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
+  elif [ -r "$1" ]; then
+    local source="$1"
+  fi
+
+  local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+  if [ -L "${source}" ]; then
+      echo "Symlinked..."
+      source="$(readlink "${source}")"
+  fi
+
+  # Use filter instead of exclude so missing patterns don't throw errors.
+  echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
+  rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
+
+  local basename
+  basename="$(basename -s .framework "$1")"
+  binary="${destination}/${basename}.framework/${basename}"
+  if ! [ -r "$binary" ]; then
+    binary="${destination}/${basename}"
+  fi
+
+  # Strip invalid architectures so "fat" simulator / device frameworks work on device
+  if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
+    strip_invalid_archs "$binary"
+  fi
+
+  # Resign the code if required by the build settings to avoid unstable apps
+  code_sign_if_enabled "${destination}/$(basename "$1")"
+
+  # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
+  if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
+    local swift_runtime_libs
+    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit ${PIPESTATUS[0]})
+    for lib in $swift_runtime_libs; do
+      echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
+      rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
+      code_sign_if_enabled "${destination}/${lib}"
+    done
+  fi
+}
+
+# Copies the dSYM of a vendored framework
+install_dsym() {
+  local source="$1"
+  if [ -r "$source" ]; then
+    echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\""
+    rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}"
+  fi
+}
+
+# Signs a framework with the provided identity
+code_sign_if_enabled() {
+  if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
+    # Use the current code_sign_identitiy
+    echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+    local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'"
+
+    if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+      code_sign_cmd="$code_sign_cmd &"
+    fi
+    echo "$code_sign_cmd"
+    eval "$code_sign_cmd"
+  fi
+}
+
+# Strip invalid architectures
+strip_invalid_archs() {
+  binary="$1"
+  # Get architectures for current file
+  archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)"
+  stripped=""
+  for arch in $archs; do
+    if ! [[ "${ARCHS}" == *"$arch"* ]]; then
+      # Strip non-valid architectures in-place
+      lipo -remove "$arch" -output "$binary" "$binary" || exit 1
+      stripped="$stripped $arch"
+    fi
+  done
+  if [[ "$stripped" ]]; then
+    echo "Stripped $binary of architectures:$stripped"
+  fi
+}
+
+
+if [[ "$CONFIGURATION" == "Debug" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/EAIntroView/EAIntroView.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/EARestrictedScrollView/EARestrictedScrollView.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/SMPageControl/SMPageControl.framework"
+fi
+if [[ "$CONFIGURATION" == "Release" ]]; then
+  install_framework "${BUILT_PRODUCTS_DIR}/EAIntroView/EAIntroView.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/EARestrictedScrollView/EARestrictedScrollView.framework"
+  install_framework "${BUILT_PRODUCTS_DIR}/SMPageControl/SMPageControl.framework"
+fi
+if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
+  wait
+fi

+ 106 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-resources.sh

@@ -0,0 +1,106 @@
+#!/bin/sh
+set -e
+
+mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+
+RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
+> "$RESOURCES_TO_COPY"
+
+XCASSET_FILES=()
+
+# This protects against multiple targets copying the same framework dependency at the same time. The solution
+# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
+RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
+
+case "${TARGETED_DEVICE_FAMILY}" in
+  1,2)
+    TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
+    ;;
+  1)
+    TARGET_DEVICE_ARGS="--target-device iphone"
+    ;;
+  2)
+    TARGET_DEVICE_ARGS="--target-device ipad"
+    ;;
+  3)
+    TARGET_DEVICE_ARGS="--target-device tv"
+    ;;
+  4)
+    TARGET_DEVICE_ARGS="--target-device watch"
+    ;;
+  *)
+    TARGET_DEVICE_ARGS="--target-device mac"
+    ;;
+esac
+
+install_resource()
+{
+  if [[ "$1" = /* ]] ; then
+    RESOURCE_PATH="$1"
+  else
+    RESOURCE_PATH="${PODS_ROOT}/$1"
+  fi
+  if [[ ! -e "$RESOURCE_PATH" ]] ; then
+    cat << EOM
+error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
+EOM
+    exit 1
+  fi
+  case $RESOURCE_PATH in
+    *.storyboard)
+      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
+      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
+      ;;
+    *.xib)
+      echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true
+      ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS}
+      ;;
+    *.framework)
+      echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
+      mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+      echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
+      rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+      ;;
+    *.xcdatamodel)
+      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
+      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
+      ;;
+    *.xcdatamodeld)
+      echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
+      xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
+      ;;
+    *.xcmappingmodel)
+      echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
+      xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
+      ;;
+    *.xcassets)
+      ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
+      XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
+      ;;
+    *)
+      echo "$RESOURCE_PATH" || true
+      echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
+      ;;
+  esac
+}
+
+mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
+  mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+  rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+fi
+rm -f "$RESOURCES_TO_COPY"
+
+if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ]
+then
+  # Find all other xcassets (this unfortunately includes those of path pods and other targets).
+  OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
+  while read line; do
+    if [[ $line != "${PODS_ROOT}*" ]]; then
+      XCASSET_FILES+=("$line")
+    fi
+  done <<<"$OTHER_XCASSETS"
+
+  printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
+fi

+ 16 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView-umbrella.h

@@ -0,0 +1,16 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+
+FOUNDATION_EXPORT double Pods_EAIntroViewVersionNumber;
+FOUNDATION_EXPORT const unsigned char Pods_EAIntroViewVersionString[];
+

+ 9 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.debug.xcconfig

@@ -0,0 +1,9 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/EAIntroView" "$PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView" "$PODS_CONFIGURATION_BUILD_DIR/SMPageControl"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
+OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/EAIntroView/EAIntroView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView/EARestrictedScrollView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMPageControl/SMPageControl.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "EAIntroView" -framework "EARestrictedScrollView" -framework "SMPageControl"
+PODS_BUILD_DIR = $BUILD_DIR
+PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods

+ 6 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.modulemap

@@ -0,0 +1,6 @@
+framework module Pods_EAIntroView {
+  umbrella header "Pods-EAIntroView-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 9 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/Pods-EAIntroView/Pods-EAIntroView.release.xcconfig

@@ -0,0 +1,9 @@
+FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/EAIntroView" "$PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView" "$PODS_CONFIGURATION_BUILD_DIR/SMPageControl"
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks'
+OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/EAIntroView/EAIntroView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/EARestrictedScrollView/EARestrictedScrollView.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SMPageControl/SMPageControl.framework/Headers"
+OTHER_LDFLAGS = $(inherited) -framework "EAIntroView" -framework "EARestrictedScrollView" -framework "SMPageControl"
+PODS_BUILD_DIR = $BUILD_DIR
+PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
+PODS_ROOT = ${SRCROOT}/Pods

+ 26 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/Info.plist

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+  <key>CFBundleDevelopmentRegion</key>
+  <string>en</string>
+  <key>CFBundleExecutable</key>
+  <string>${EXECUTABLE_NAME}</string>
+  <key>CFBundleIdentifier</key>
+  <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+  <key>CFBundleInfoDictionaryVersion</key>
+  <string>6.0</string>
+  <key>CFBundleName</key>
+  <string>${PRODUCT_NAME}</string>
+  <key>CFBundlePackageType</key>
+  <string>FMWK</string>
+  <key>CFBundleShortVersionString</key>
+  <string>1.2.0</string>
+  <key>CFBundleSignature</key>
+  <string>????</string>
+  <key>CFBundleVersion</key>
+  <string>${CURRENT_PROJECT_VERSION}</string>
+  <key>NSPrincipalClass</key>
+  <string></string>
+</dict>
+</plist>

+ 5 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-dummy.m

@@ -0,0 +1,5 @@
+#import <Foundation/Foundation.h>
+@interface PodsDummy_SMPageControl : NSObject
+@end
+@implementation PodsDummy_SMPageControl
+@end

+ 12 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-prefix.pch

@@ -0,0 +1,12 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+

+ 17 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl-umbrella.h

@@ -0,0 +1,17 @@
+#ifdef __OBJC__
+#import <UIKit/UIKit.h>
+#else
+#ifndef FOUNDATION_EXPORT
+#if defined(__cplusplus)
+#define FOUNDATION_EXPORT extern "C"
+#else
+#define FOUNDATION_EXPORT extern
+#endif
+#endif
+#endif
+
+#import "SMPageControl.h"
+
+FOUNDATION_EXPORT double SMPageControlVersionNumber;
+FOUNDATION_EXPORT const unsigned char SMPageControlVersionString[];
+

+ 6 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl.modulemap

@@ -0,0 +1,6 @@
+framework module SMPageControl {
+  umbrella header "SMPageControl-umbrella.h"
+
+  export *
+  module * { export * }
+}

+ 9 - 0
Carthage/Checkouts/EAIntroView/Example/Pods/Target Support Files/SMPageControl/SMPageControl.xcconfig

@@ -0,0 +1,9 @@
+CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SMPageControl
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
+HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public"
+PODS_BUILD_DIR = $BUILD_DIR
+PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
+PODS_ROOT = ${SRCROOT}
+PODS_TARGET_SRCROOT = ${PODS_ROOT}/SMPageControl
+PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
+SKIP_INSTALL = YES

+ 53 - 0
Carthage/Checkouts/EAIntroView/Example/Resources/Images.xcassets/AppIcon.appiconset/Contents.json

@@ -0,0 +1,53 @@
+{
+  "images" : [
+    {
+      "idiom" : "iphone",
+      "size" : "20x20",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "20x20",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "29x29",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "40x40",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "iphone",
+      "size" : "60x60",
+      "scale" : "3x"
+    },
+    {
+      "idiom" : "ios-marketing",
+      "size" : "1024x1024",
+      "scale" : "1x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg1@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg2@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg3@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bg4@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/bigLogo@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon1@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon2@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/icon3@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/pageDot.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/pageDot@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/skipButton@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title1@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title2@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title3@2x.png


BIN
Carthage/Checkouts/EAIntroView/Example/Resources/Intro/title4@2x.png


+ 54 - 0
Carthage/Checkouts/EAIntroView/Example/Resources/IntroPage.xib

@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7531" systemVersion="14D131" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7520"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" placeholderIntrinsicWidth="375" placeholderIntrinsicHeight="667" id="NPD-GC-We3">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Ai2-Cl-hMW">
+                    <rect key="frame" x="58" y="254" width="260" height="160"/>
+                    <subviews>
+                        <switch opaque="NO" tag="1" contentMode="scaleToFill" horizontalHuggingPriority="750" verticalHuggingPriority="750" fixedFrame="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" on="YES" translatesAutoresizingMaskIntoConstraints="NO" id="fyF-mF-TLC">
+                            <rect key="frame" x="197" y="109" width="51" height="31"/>
+                        </switch>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Hello World!" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aWx-XZ-ed8">
+                            <rect key="frame" x="77" y="29" width="119" height="21"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="21"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                        <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" text="Intro scrolling enabled:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="aou-Fp-Fq1">
+                            <rect key="frame" x="14" y="114" width="175" height="21"/>
+                            <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                            <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
+                            <nil key="highlightedColor"/>
+                        </label>
+                    </subviews>
+                    <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+                    <constraints>
+                        <constraint firstAttribute="height" constant="160" id="Z8C-NA-IBn"/>
+                        <constraint firstAttribute="width" constant="260" id="iXF-WU-jNH"/>
+                    </constraints>
+                </view>
+            </subviews>
+            <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/>
+            <constraints>
+                <constraint firstAttribute="centerX" secondItem="Ai2-Cl-hMW" secondAttribute="centerX" id="fxN-Qe-08f"/>
+                <constraint firstAttribute="centerY" secondItem="Ai2-Cl-hMW" secondAttribute="centerY" id="oxP-EY-Hn9"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <simulatedScreenMetrics key="simulatedDestinationMetrics" type="retina47"/>
+            <point key="canvasLocation" x="232.5" y="442.5"/>
+        </view>
+    </objects>
+    <simulatedMetricsContainer key="defaultSimulatedMetrics">
+        <simulatedStatusBarMetrics key="statusBar"/>
+        <simulatedOrientationMetrics key="orientation"/>
+        <simulatedScreenMetrics key="destination" type="retina4"/>
+    </simulatedMetricsContainer>
+</document>

+ 41 - 0
Carthage/Checkouts/EAIntroView/Example/Resources/LaunchScreen.xib

@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="6214" systemVersion="14A314h" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6207"/>
+        <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <view contentMode="scaleToFill" id="iN0-l3-epB">
+            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
+            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+            <subviews>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  Copyright (c) 2015 SampleCorp. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
+                    <rect key="frame" x="20" y="439" width="441" height="21"/>
+                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                    <nil key="highlightedColor"/>
+                </label>
+                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="EAIntroView" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
+                    <rect key="frame" x="20" y="140" width="441" height="43"/>
+                    <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                    <nil key="highlightedColor"/>
+                </label>
+            </subviews>
+            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
+            <constraints>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
+                <constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
+                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
+                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
+                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
+                <constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
+            </constraints>
+            <nil key="simulatedStatusBarMetrics"/>
+            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
+            <point key="canvasLocation" x="548" y="455"/>
+        </view>
+    </objects>
+</document>

+ 224 - 0
Carthage/Checkouts/EAIntroView/Example/Resources/MainStoryboard.storyboard

@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6254" systemVersion="14C106a" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" initialViewController="Ara-AR-HwA">
+    <dependencies>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6247"/>
+    </dependencies>
+    <scenes>
+        <!--EAIntroView demo-->
+        <scene sceneID="8vH-ae-LG6">
+            <objects>
+                <tableViewController id="ezg-st-FcR" customClass="ViewController" sceneMemberID="viewController">
+                    <tableView key="view" opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="static" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="kyP-gY-J5T">
+                        <rect key="frame" x="0.0" y="64" width="320" height="504"/>
+                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+                        <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/>
+                        <sections>
+                            <tableViewSection id="OFT-xE-eco">
+                                <cells>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="JFY-HU-Wqx" detailTextLabel="unu-Q5-Wf8" style="IBUITableViewCellStyleSubtitle" id="sSo-1G-uGM">
+                                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="sSo-1G-uGM" id="Zen-x6-XC3">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithCrossDissolve" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="JFY-HU-Wqx">
+                                                    <rect key="frame" x="10" y="2" width="239" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="pages with custom packgrounds &amp; title images" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="unu-Q5-Wf8">
+                                                    <rect key="frame" x="10" y="24" width="288" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="VPz-YK-5b6" detailTextLabel="d98-KB-XQI" style="IBUITableViewCellStyleSubtitle" id="guq-Zn-az2">
+                                        <rect key="frame" x="0.0" y="44" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="guq-Zn-az2" id="Vvb-cG-32s">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithFixedTitleView" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VPz-YK-5b6">
+                                                    <rect key="frame" x="10" y="2" width="241" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="introView colored background &amp; fixed title image" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="d98-KB-XQI">
+                                                    <rect key="frame" x="10" y="24" width="299" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="qff-qy-aNu" detailTextLabel="VPb-VE-wlA" style="IBUITableViewCellStyleSubtitle" id="5MB-Cz-QH2">
+                                        <rect key="frame" x="0.0" y="88" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="5MB-Cz-QH2" id="fXC-rf-Kh8">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithCustomPages" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="qff-qy-aNu">
+                                                    <rect key="frame" x="10" y="2" width="238" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="basic pages with custom settings" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="VPb-VE-wlA">
+                                                    <rect key="frame" x="10" y="24" width="205" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="Uu6-H0-cUm" detailTextLabel="Eik-qB-Cz7" style="IBUITableViewCellStyleSubtitle" id="fc1-Xi-ClL">
+                                        <rect key="frame" x="0.0" y="132" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="fc1-Xi-ClL" id="ix6-vE-2lu">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithCustomView" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Uu6-H0-cUm">
+                                                    <rect key="frame" x="10" y="2" width="225" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="using page with custom view" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Eik-qB-Cz7">
+                                                    <rect key="frame" x="10" y="24" width="179" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="PxA-z1-tIy" detailTextLabel="li5-75-OwD" style="IBUITableViewCellStyleSubtitle" id="68g-lD-FTR">
+                                        <rect key="frame" x="0.0" y="176" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="68g-lD-FTR" id="MAk-Uy-nar">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithCustomViewFromNib" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="PxA-z1-tIy">
+                                                    <rect key="frame" x="10" y="2" width="296" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="using page with custom view from nib" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="li5-75-OwD">
+                                                    <rect key="frame" x="10" y="24" width="233" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="a6E-08-xEL" detailTextLabel="0xz-nj-zcw" style="IBUITableViewCellStyleSubtitle" id="gtl-Ha-qT1">
+                                        <rect key="frame" x="0.0" y="220" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="gtl-Ha-qT1" id="e6W-oD-Wt1">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showIntroWithSeparatePagesInitAndPageCallback" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="a6E-08-xEL">
+                                                    <rect key="frame" x="10" y="2" width="300" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="separate init and using page block callback" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="0xz-nj-zcw">
+                                                    <rect key="frame" x="10" y="24" width="267" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078430000002" green="0.50196078430000002" blue="0.50196078430000002" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                    <tableViewCell contentMode="scaleToFill" selectionStyle="blue" hidesAccessoryWhenEditing="NO" indentationLevel="1" indentationWidth="0.0" textLabel="eOB-BY-jhK" detailTextLabel="CZd-Ae-jru" style="IBUITableViewCellStyleSubtitle" id="DYF-FP-GMc">
+                                        <rect key="frame" x="0.0" y="264" width="320" height="44"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="DYF-FP-GMc" id="6V8-tD-q3v">
+                                            <rect key="frame" x="0.0" y="0.0" width="375" height="43"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="showCustomIntro" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="eOB-BY-jhK">
+                                                    <rect key="frame" x="10" y="2" width="148" height="22"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
+                                                    <color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                                <label opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="left" text="show custom intro" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="CZd-Ae-jru">
+                                                    <rect key="frame" x="10" y="24" width="113" height="17"/>
+                                                    <autoresizingMask key="autoresizingMask"/>
+                                                    <fontDescription key="fontDescription" name="Helvetica" family="Helvetica" pointSize="14"/>
+                                                    <color key="textColor" red="0.50196078431372548" green="0.50196078431372548" blue="0.50196078431372548" alpha="1" colorSpace="calibratedRGB"/>
+                                                    <color key="highlightedColor" red="1" green="1" blue="1" alpha="1" colorSpace="calibratedRGB"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                    </tableViewCell>
+                                </cells>
+                            </tableViewSection>
+                        </sections>
+                        <connections>
+                            <outlet property="dataSource" destination="ezg-st-FcR" id="4ue-Vg-sWg"/>
+                            <outlet property="delegate" destination="ezg-st-FcR" id="Xhu-ij-S8A"/>
+                        </connections>
+                    </tableView>
+                    <navigationItem key="navigationItem" title="EAIntroView demo" id="toh-OM-6xR"/>
+                </tableViewController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="dpw-9v-IlS" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="1302" y="251"/>
+        </scene>
+        <!--Navigation Controller-->
+        <scene sceneID="4av-C7-05h">
+            <objects>
+                <navigationController automaticallyAdjustsScrollViewInsets="NO" id="Ara-AR-HwA" sceneMemberID="viewController">
+                    <toolbarItems/>
+                    <navigationBar key="navigationBar" contentMode="scaleToFill" translucent="NO" id="81p-WW-JkZ">
+                        <rect key="frame" x="0.0" y="0.0" width="320" height="44"/>
+                        <autoresizingMask key="autoresizingMask"/>
+                    </navigationBar>
+                    <nil name="viewControllers"/>
+                    <connections>
+                        <segue destination="ezg-st-FcR" kind="relationship" relationship="rootViewController" id="7Sg-kL-7b1"/>
+                    </connections>
+                </navigationController>
+                <placeholder placeholderIdentifier="IBFirstResponder" id="xh0-gV-IYy" userLabel="First Responder" sceneMemberID="firstResponder"/>
+            </objects>
+            <point key="canvasLocation" x="776" y="251"/>
+        </scene>
+    </scenes>
+    <simulatedMetricsContainer key="defaultSimulatedMetrics">
+        <simulatedStatusBarMetrics key="statusBar"/>
+        <simulatedOrientationMetrics key="orientation"/>
+        <simulatedScreenMetrics key="destination" type="retina4"/>
+    </simulatedMetricsContainer>
+</document>

+ 12 - 0
Carthage/Checkouts/EAIntroView/Example/Source/AppDelegate.h

@@ -0,0 +1,12 @@
+//
+//  AppDelegate.h
+//
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
+
+#import <UIKit/UIKit.h>
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+
+@property (strong, nonatomic) UIWindow *window;
+
+@end

+ 20 - 0
Carthage/Checkouts/EAIntroView/Example/Source/AppDelegate.m

@@ -0,0 +1,20 @@
+//
+//  AppDelegate.m
+//
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
+
+#import "AppDelegate.h"
+#import "ViewController.h"
+
+@interface AppDelegate ()
+
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+
+    return YES;
+}
+
+@end

+ 11 - 0
Carthage/Checkouts/EAIntroView/Example/Source/ViewController.h

@@ -0,0 +1,11 @@
+//
+//  ViewController.h
+//
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
+
+#import <UIKit/UIKit.h>
+
+@interface ViewController : UITableViewController
+
+@end
+

+ 390 - 0
Carthage/Checkouts/EAIntroView/Example/Source/ViewController.m

@@ -0,0 +1,390 @@
+//
+//  ViewController.m
+//
+//  Copyright (c) 2013-2017 Evgeny Aleksandrov. License: MIT.
+
+#import <EAIntroView/EAIntroView.h>
+#import <SMPageControl/SMPageControl.h>
+
+#import "ViewController.h"
+
+static NSString * const sampleDescription1 = @"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
+static NSString * const sampleDescription2 = @"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore.";
+static NSString * const sampleDescription3 = @"Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem.";
+static NSString * const sampleDescription4 = @"Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit.";
+
+@interface ViewController () <EAIntroDelegate> {
+    UIView *rootView;
+    EAIntroView *_intro;
+}
+
+@end
+
+@implementation ViewController
+
+#pragma mark - View lifecycle
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+
+    // using self.navigationController.view - to display EAIntroView above navigation bar
+    rootView = self.navigationController.view;
+}
+
+#pragma mark - Demo
+
+- (void)showIntroWithCrossDissolve {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+    page1.bgImage = [UIImage imageNamed:@"bg1"];
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+
+    EAIntroPage *page2 = [EAIntroPage page];
+    page2.title = @"This is page 2";
+    page2.desc = sampleDescription2;
+    page2.bgImage = [UIImage imageNamed:@"bg2"];
+    page2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title2"]];
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.desc = sampleDescription3;
+    page3.bgImage = [UIImage imageNamed:@"bg3"];
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title3"]];
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+    page4.bgImage = [UIImage imageNamed:@"bg4"];
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title4"]];
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    intro.skipButtonAlignment = EAViewAlignmentCenter;
+    intro.skipButtonY = 80.f;
+    intro.pageControlY = 42.f;
+
+    [intro setDelegate:self];
+
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+- (void)showIntroWithFixedTitleView {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+
+    EAIntroPage *page2 = [EAIntroPage page];
+    page2.title = @"This is page 2";
+    page2.desc = sampleDescription2;
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.desc = sampleDescription3;
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    [intro setDelegate:self];
+    UIImageView *titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+    intro.titleView = titleView;
+    intro.titleViewY = 90;
+    intro.backgroundColor = [UIColor colorWithRed:0.f green:0.49f blue:0.96f alpha:1.f]; //iOS7 dark blue
+
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+- (void)showIntroWithCustomPages {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+
+    EAIntroPage *page2 = [EAIntroPage page];
+    page2.title = @"This is page 2";
+    page2.titlePositionY = self.view.bounds.size.height/2 - 10;
+    page2.desc = sampleDescription2;
+    page2.descPositionY = self.view.bounds.size.height/2 - 50;
+    page2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title2"]];
+    page2.titleIconPositionY = 70;
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.titleFont = [UIFont fontWithName:@"Georgia-BoldItalic" size:20];
+    page3.titlePositionY = 220;
+    page3.desc = sampleDescription2;
+    page3.descFont = [UIFont fontWithName:@"Georgia-Italic" size:18];
+    page3.descPositionY = 200;
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title3"]];
+    page3.titleIconPositionY = 100;
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title4"]];
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    intro.bgImage = [UIImage imageNamed:@"bg2"];
+
+    intro.pageControlY = 250.f;
+
+    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
+    [btn setFrame:CGRectMake(0, 0, 230, 40)];
+    [btn setTitle:@"SKIP NOW" forState:UIControlStateNormal];
+    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
+    btn.layer.borderWidth = 2.f;
+    btn.layer.cornerRadius = 10;
+    btn.layer.borderColor = [[UIColor whiteColor] CGColor];
+    intro.skipButton = btn;
+    intro.skipButtonY = 60.f;
+    intro.skipButtonAlignment = EAViewAlignmentCenter;
+
+    [intro setDelegate:self];
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+- (void)showIntroWithCustomView {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+    page1.bgImage = [UIImage imageNamed:@"bg1"];
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+
+    UIView *viewForPage2 = [[UIView alloc] initWithFrame:rootView.bounds];
+    UILabel *labelForPage2 = [[UILabel alloc] initWithFrame:CGRectMake(0, 300, rootView.bounds.size.width, 30)];
+    labelForPage2.text = @"Some custom view";
+    labelForPage2.font = [UIFont systemFontOfSize:32];
+    labelForPage2.textColor = [UIColor whiteColor];
+    labelForPage2.backgroundColor = [UIColor clearColor];
+    labelForPage2.transform = CGAffineTransformMakeRotation(M_PI_2*3);
+    [viewForPage2 addSubview:labelForPage2];
+    EAIntroPage *page2 = [EAIntroPage pageWithCustomView:viewForPage2];
+    page2.bgImage = [UIImage imageNamed:@"bg2"];
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.desc = sampleDescription3;
+    page3.bgImage = [UIImage imageNamed:@"bg3"];
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title3"]];
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+    page4.bgImage = [UIImage imageNamed:@"bg4"];
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title4"]];
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    [intro.skipButton setTitle:@"Skip now" forState:UIControlStateNormal];
+    [intro setDelegate:self];
+    intro.tapToNext = YES;
+
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+- (void)showIntroWithCustomViewFromNib {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+    page1.bgImage = [UIImage imageNamed:@"bg1"];
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+
+    EAIntroPage *page2 = [EAIntroPage pageWithCustomViewFromNibNamed:@"IntroPage"];
+    page2.bgImage = [UIImage imageNamed:@"bg2"];
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.desc = sampleDescription3;
+    page3.bgImage = [UIImage imageNamed:@"bg3"];
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title3"]];
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+    page4.bgImage = [UIImage imageNamed:@"bg4"];
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title4"]];
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    [intro setDelegate:self];
+
+    UISwitch *switchControl = (UISwitch *)[page2.pageView viewWithTag:1];
+    if(switchControl) {
+        [switchControl addTarget:self action:@selector(switchFlip:) forControlEvents:UIControlEventValueChanged];
+    }
+
+    [intro showInView:rootView animateDuration:0.3];
+    _intro = intro;
+}
+
+- (void)showIntroWithSeparatePagesInitAndPageCallback {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.desc = sampleDescription1;
+    page1.bgImage = [UIImage imageNamed:@"bg1"];
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+
+    EAIntroPage *page2 = [EAIntroPage page];
+    page2.title = @"This is page 2";
+    page2.desc = sampleDescription2;
+    page2.bgImage = [UIImage imageNamed:@"bg2"];
+    page2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title2"]];
+    page2.onPageDidAppear = ^{
+        NSLog(@"Page 2 did appear block");
+    };
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.desc = sampleDescription3;
+    page3.bgImage = [UIImage imageNamed:@"bg3"];
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title3"]];
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.desc = sampleDescription4;
+    page4.bgImage = [UIImage imageNamed:@"bg4"];
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title4"]];
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds];
+    [intro setDelegate:self];
+
+    // show skipButton only on 3rd page + animation
+    intro.skipButton.alpha = 0.f;
+    intro.skipButton.enabled = NO;
+    page3.onPageDidAppear = ^{
+        intro.skipButton.enabled = YES;
+        [UIView animateWithDuration:0.3f animations:^{
+            intro.skipButton.alpha = 1.f;
+        }];
+    };
+    page3.onPageDidDisappear = ^{
+        intro.skipButton.enabled = NO;
+        [UIView animateWithDuration:0.3f animations:^{
+            intro.skipButton.alpha = 0.f;
+        }];
+    };
+
+    [intro setPages:@[page1,page2,page3,page4]];
+
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+- (void)showCustomIntro {
+    EAIntroPage *page1 = [EAIntroPage page];
+    page1.title = @"Hello world";
+    page1.titlePositionY = 240;
+    page1.desc = sampleDescription1;
+    page1.descPositionY = 220;
+    page1.bgImage = [UIImage imageNamed:@"bg1"];
+    page1.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"title1"]];
+    page1.titleIconPositionY = 100;
+    page1.showTitleView = NO;
+
+    EAIntroPage *page2 = [EAIntroPage page];
+    page2.title = @"This is page 2";
+    page2.titlePositionY = 240;
+    page2.desc = sampleDescription2;
+    page2.descPositionY = 220;
+    page2.bgImage = [UIImage imageNamed:@"bg2"];
+    page2.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon1"]];
+    page2.titleIconPositionY = 260;
+
+    EAIntroPage *page3 = [EAIntroPage page];
+    page3.title = @"This is page 3";
+    page3.titlePositionY = 240;
+    page3.desc = sampleDescription3;
+    page3.descPositionY = 220;
+    page3.bgImage = [UIImage imageNamed:@"bg3"];
+    page3.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon2"]];
+    page3.titleIconPositionY = 260;
+
+    EAIntroPage *page4 = [EAIntroPage page];
+    page4.title = @"This is page 4";
+    page4.titlePositionY = 240;
+    page4.desc = sampleDescription4;
+    page4.descPositionY = 220;
+    page4.bgImage = [UIImage imageNamed:@"bg4"];
+    page4.titleIconView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon3"]];
+    page4.titleIconPositionY = 260;
+
+    EAIntroView *intro = [[EAIntroView alloc] initWithFrame:rootView.bounds andPages:@[page1,page2,page3,page4]];
+    intro.titleView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bigLogo"]];
+    intro.titleViewY = 120;
+    intro.tapToNext = YES;
+    [intro setDelegate:self];
+
+    SMPageControl *pageControl = [[SMPageControl alloc] init];
+    pageControl.pageIndicatorImage = [UIImage imageNamed:@"pageDot"];
+    pageControl.currentPageIndicatorImage = [UIImage imageNamed:@"selectedPageDot"];
+    [pageControl sizeToFit];
+
+    // This is a hack - not recommended for Swift, more information: https://github.com/ealeksandrov/EAIntroView/issues/161
+    intro.pageControl = (UIPageControl *)pageControl;
+    intro.pageControlY = 130.f;
+
+    UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
+    [btn setBackgroundImage:[UIImage imageNamed:@"skipButton"] forState:UIControlStateNormal];
+    [btn setFrame:CGRectMake(0, 0, 270, 50)];
+    intro.skipButton = btn;
+    intro.skipButtonY = 80.f;
+    intro.skipButtonAlignment = EAViewAlignmentCenter;
+
+    [intro showInView:rootView animateDuration:0.3];
+}
+
+#pragma mark - EAIntroView delegate
+
+- (void)introDidFinish:(EAIntroView *)introView wasSkipped:(BOOL)wasSkipped {
+    if(wasSkipped) {
+        NSLog(@"Intro skipped");
+    } else {
+        NSLog(@"Intro finished");
+    }
+}
+
+#pragma mark - Custom actions
+
+- (IBAction)switchFlip:(id)sender {
+    UISwitch *switchControl = (UISwitch *) sender;
+    NSLog(@"%@", switchControl.on ? @"On" : @"Off");
+
+    // limit scrolling on one, currently visible page (can't go previous or next page)
+    //[_intro setScrollingEnabled:switchControl.on];
+
+    if(!switchControl.on) {
+        // scroll no further selected page (can go previous pages, but not next)
+        _intro.limitPageIndex = _intro.visiblePageIndex;
+    } else {
+        [_intro setScrollingEnabled:YES];
+    }
+}
+
+#pragma mark - UITableView delegate
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (indexPath.row == 0) {
+        // all settings are basic, pages with custom packgrounds, title image on each page
+        [self showIntroWithCrossDissolve];
+    } else if (indexPath.row == 1) {
+        // all settings are basic, introview with colored background, fixed title image
+        [self showIntroWithFixedTitleView];
+    } else if (indexPath.row == 2) {
+        // basic pages with custom settings
+        [self showIntroWithCustomPages];
+    } else if (indexPath.row == 3) {
+        // using page with custom view
+        [self showIntroWithCustomView];
+    } else if (indexPath.row == 4) {
+        // using page with custom view from nib
+        [self showIntroWithCustomViewFromNib];
+    } else if (indexPath.row == 5) {
+        // pages separate init and using block callback in one of pages
+        [self showIntroWithSeparatePagesInitAndPageCallback];
+    } else if (indexPath.row == 6) {
+        // show custom intro
+        [self showCustomIntro];
+    }
+
+    [tableView deselectRowAtIndexPath:indexPath animated:YES];
+}
+
+@end

+ 40 - 0
Carthage/Checkouts/EAIntroView/Example/Supporting-files/Info.plist

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>CFBundleDevelopmentRegion</key>
+	<string>en</string>
+	<key>CFBundleExecutable</key>
+	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIdentifier</key>
+	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+	<key>CFBundleInfoDictionaryVersion</key>
+	<string>6.0</string>
+	<key>CFBundleName</key>
+	<string>$(PRODUCT_NAME)</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+	<key>CFBundleShortVersionString</key>
+	<string>1.0</string>
+	<key>CFBundleSignature</key>
+	<string>????</string>
+	<key>CFBundleVersion</key>
+	<string>1</string>
+	<key>LSRequiresIPhoneOS</key>
+	<true/>
+	<key>UILaunchStoryboardName</key>
+	<string>LaunchScreen</string>
+	<key>UIMainStoryboardFile</key>
+	<string>MainStoryboard</string>
+	<key>UIRequiredDeviceCapabilities</key>
+	<array>
+		<string>armv7</string>
+	</array>
+	<key>UISupportedInterfaceOrientations</key>
+	<array>
+		<string>UIInterfaceOrientationPortrait</string>
+		<string>UIInterfaceOrientationLandscapeLeft</string>
+		<string>UIInterfaceOrientationLandscapeRight</string>
+	</array>
+</dict>
+</plist>

+ 13 - 0
Carthage/Checkouts/EAIntroView/Example/Supporting-files/main.m

@@ -0,0 +1,13 @@
+//
+//  main.m
+//
+//  Copyright (c) 2015 Evgeny Aleksandrov. License: MIT.
+
+#import <UIKit/UIKit.h>
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}

+ 21 - 0
Carthage/Checkouts/EAIntroView/LICENSE.md

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2013-2017 Evgeny Aleksandrov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

BIN
Carthage/Checkouts/EAIntroView/Screenshot01.png


BIN
Carthage/Checkouts/EAIntroView/Screenshot02.png


+ 34 - 0
Carthage/Checkouts/EARestrictedScrollView/.gitignore

@@ -0,0 +1,34 @@
+#OS noise
+[Tt]humbs.db
+*.DS_Store
+*~
+*.swp
+*.out
+*.bak*
+
+#Other CSM
+.hg
+.svn
+CVS
+
+#Xcode noise
+*.log
+*~.nib
+*.moved-aside
+Example/*.xcodeproj/*
+!Example/*.xcodeproj/project.pbxproj
+Example/*.xcworkspace/*
+!Example/*.xcworkspace/contents.xcworkspacedata
+
+#Project files
+[Bb]uild/
+DerivedData/
+
+Carthage
+
+#CocoaPods
+Example/Pods/*.xcodeproj/*
+!Example/Pods/*.xcodeproj/project.pbxproj
+
+!xcshareddata
+*.xccheckout

+ 23 - 0
Carthage/Checkouts/EARestrictedScrollView/.travis.yml

@@ -0,0 +1,23 @@
+language: objective-c
+osx_image: xcode7.3
+before_install:
+  - export LANG=en_US.UTF-8
+#  - brew update
+#  - brew install carthage
+  - gem install cocoapods --no-rdoc --no-ri --no-document --quiet
+  - pod install --project-directory=Example
+script:
+  - set -o pipefail && xcodebuild test -workspace Example/EARestrictedScrollView.xcworkspace -scheme EARestrictedScrollView-Example -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 6s,OS=9.3' ONLY_ACTIVE_ARCH=NO | xcpretty
+  - pod lib lint
+before_deploy:
+  - carthage build --no-skip-current
+  - carthage archive EARestrictedScrollView
+deploy:
+  provider: releases
+  api_key:
+    secure: LnOWVVBpgByOSqHV8jTmtEP1M1WFC/79O9YLnnR1DzaiFGseM48ocXGTBKAn1t6CeGYO7NzjbpolWjYOs2T4IOFNLrfMLX7eeXE1nBfXkcrV2iAe8kN8ga9UvqI1MNWu8ryDQGoiQ2KY69eGxubm9CrKeKP/2AFNxichdo8U5jI=
+  file: EARestrictedScrollView.framework.zip
+  skip_cleanup: true
+  on:
+    repo: ealeksandrov/EARestrictedScrollView
+    tags: true

+ 24 - 0
Carthage/Checkouts/EARestrictedScrollView/CHANGELOG.md

@@ -0,0 +1,24 @@
+# EARestrictedScrollView
+
+## Version 1.1.0
+
+* Last obj-c release
+* Adds missing check to `sendSubviewToBack:`
+* Adds limitation on `containedSubviews` elements
+* Minor code cleanup
+
+## Version 1.0.0
+
+* Stable obj-c version
+
+## Version 0.3.0
+
+* Adds Carthage support
+
+## Version 0.2.0
+
+* Removes `subviews` override, fixes related autolayout crash
+
+## Version 0.1.0
+
+* Initial release

BIN
Carthage/Checkouts/EARestrictedScrollView/Demo.gif


+ 18 - 0
Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView.podspec

@@ -0,0 +1,18 @@
+Pod::Spec.new do |s|
+
+  s.name         = 'EARestrictedScrollView'
+  s.version      = '1.1.0'
+  s.summary      = 'UIScrollView sublass with ability to restrict or limit scrolling area.'
+  s.screenshot   = 'https://raw.githubusercontent.com/ealeksandrov/EARestrictedScrollView/master/Screenshot01.png'
+  s.homepage     = 'https://github.com/ealeksandrov/EARestrictedScrollView'
+  s.license      = { :type => 'MIT', :file => 'LICENSE' }
+  s.author       = { 'Evgeny Aleksandrov' => 'evgeny@aleksandrov.ws' }
+  s.social_media_url = 'https://twitter.com/ealeksandrov'
+
+  s.platform     = :ios, '5.0'
+  s.source       = { :git => 'https://github.com/ealeksandrov/EARestrictedScrollView.git', :tag => s.version.to_s }
+  s.source_files = 'EARestrictedScrollView/EARestrictedScrollView.{h,m}'
+  s.requires_arc = true
+  s.public_header_files = 'EARestrictedScrollView/*.h'
+
+end

+ 42 - 0
Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.h

@@ -0,0 +1,42 @@
+//
+//  EARestrictedScrollView.h
+//
+//  Copyright (c) 2015-2016 Evgeny Aleksandrov. License: MIT.
+
+#import <UIKit/UIKit.h>
+
+@interface EARestrictedScrollView : UIScrollView
+
+/**
+ *  This property leads to containerView.subviews - all subviews except scroll indicators are stored there.
+ */
+@property (nonatomic, copy, readonly) NSArray<UIView *> *containedSubviews;
+
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wproperty-attribute-mismatch"
+/**
+ *  When accessing this property with dot-notation - container offset will be used to calculate final value, so you can forget about implemetation details. Also lies in coordinate space of `contentView`.
+ */
+@property (nonatomic, assign, getter=alignedContentOffset, setter=setAlignedContentOffset:) CGPoint contentOffset;
+#pragma GCC diagnostic pop
+
+/**
+ *  This is the rect property which defines restriction area in coordinate space of `contentView`. Use CGRectZero to reset restriction.
+ */
+@property (nonatomic, assign) CGRect restrictionArea;
+
+/**
+ *  Should not be used, since it changes parent contentOffset that is being manipulated by subclass.
+ *
+ *  @see contentOffset
+ */
+- (void)setContentOffset:(CGPoint)contentOffset __attribute__((unavailable("use dot notation to access property")));
+
+/**
+ *  Should not be used, since it leads to parent contentOffset that is being manipulated by subclass.
+ *
+ *  @see contentOffset
+ */
+- (CGPoint)contentOffset __attribute__((unavailable("use dot notation to access property")));
+
+@end

+ 119 - 0
Carthage/Checkouts/EARestrictedScrollView/EARestrictedScrollView/EARestrictedScrollView.m

@@ -0,0 +1,119 @@
+//
+//  EARestrictedScrollView.m
+//
+//  Copyright (c) 2015-2016 Evgeny Aleksandrov. License: MIT.
+
+#import "EARestrictedScrollView.h"
+
+@interface EARestrictedScrollView ()
+
+@property(nonatomic, strong) UIView *containerView;
+
+@end
+
+@implementation EARestrictedScrollView
+
+#pragma mark - Subviews override
+
+- (void)addSubview:(UIView *)view {
+    if([self.subviews count] < 3 && [self checkIfScrollIndicator:view]) {
+        [super addSubview:view];
+    } else {
+        [self.containerView addSubview:view];
+    }
+}
+
+- (void)insertSubview:(UIView *)view aboveSubview:(UIView *)siblingSubview {
+    [self.containerView insertSubview:view aboveSubview:siblingSubview];
+}
+
+- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index {
+    [self.containerView insertSubview:view atIndex:index];
+}
+
+- (void)insertSubview:(UIView *)view belowSubview:(UIView *)siblingSubview {
+    [self.containerView insertSubview:view belowSubview:siblingSubview];
+}
+
+- (void)bringSubviewToFront:(UIView *)view {
+    if(view.superview == self) {
+        [super bringSubviewToFront:view];
+    } else {
+        [self.containerView bringSubviewToFront:view];
+    }
+}
+
+- (void)sendSubviewToBack:(UIView *)view {
+    if(view.superview == self) {
+        [super sendSubviewToBack:view];
+    } else {
+        [self.containerView sendSubviewToBack:view];
+    }
+}
+
+- (UIView *)viewWithTag:(NSInteger)tag {
+    return [self.containerView viewWithTag:tag];
+}
+
+- (NSArray *)containedSubviews {
+    return self.containerView.subviews;
+}
+
+#pragma mark - Private checks
+
+- (BOOL)checkIfScrollIndicator:(UIView *)view {
+    return ((self.showsHorizontalScrollIndicator && view.frame.size.height == 2.5f) || (self.showsVerticalScrollIndicator && view.frame.size.width == 2.5f)) && [view isKindOfClass:[UIImageView class]];
+}
+
+#pragma mark - Lazy properties
+
+- (UIView *)containerView {
+    if(!_containerView || ![_containerView superview]) {
+        _containerView = [[UIView alloc] init];
+        [super addSubview:_containerView];
+    }
+    
+    return _containerView;
+}
+
+#pragma mark - Custom offset getters and setters
+
+- (CGPoint)alignedContentOffset {
+    CGPoint originalOffset = [super contentOffset];
+    CGPoint newOffset = CGPointMake(originalOffset.x + self.restrictionArea.origin.x, originalOffset.y + self.restrictionArea.origin.y);
+    
+    return newOffset;
+}
+
+- (void)setAlignedContentOffset:(CGPoint)contentOffset {
+    CGPoint newOffset = CGPointMake(contentOffset.x - self.restrictionArea.origin.x, contentOffset.y - self.restrictionArea.origin.y);
+    
+    [super setContentOffset:newOffset];
+}
+
+- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
+    CGPoint newOffset = CGPointMake(contentOffset.x - self.restrictionArea.origin.x, contentOffset.y - self.restrictionArea.origin.y);
+    
+    [super setContentOffset:newOffset animated:animated];
+}
+
+- (void)setContentSize:(CGSize)contentSize {
+    [self.containerView setFrame:CGRectMake(self.containerView.frame.origin.x, self.containerView.frame.origin.y, contentSize.width, contentSize.height)];
+    [self setRestrictionArea:CGRectMake(self.restrictionArea.origin.x, self.restrictionArea.origin.y, contentSize.width, contentSize.height)];
+}
+
+- (void)setRestrictionArea:(CGRect)restrictionArea {
+    _restrictionArea = restrictionArea;
+    
+    if(CGRectEqualToRect(restrictionArea, CGRectZero)) {
+        [super setContentOffset:CGPointMake([super contentOffset].x - self.containerView.frame.origin.x, [super contentOffset].y - self.containerView.frame.origin.y)];
+        [self.containerView setFrame:CGRectMake(0.f, 0.f, self.containerView.frame.size.width, self.containerView.frame.size.height)];
+        [super setContentSize:self.containerView.frame.size];
+    } else {
+        [self.containerView setFrame:CGRectMake(-restrictionArea.origin.x, -restrictionArea.origin.y, self.containerView.frame.size.width, self.containerView.frame.size.height)];
+        [super setContentOffset:CGPointMake([super contentOffset].x - restrictionArea.origin.x, [super contentOffset].y - restrictionArea.origin.y)];
+        [super setContentSize:restrictionArea.size];
+    }
+}
+
+@end

+ 15 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Podfile

@@ -0,0 +1,15 @@
+source 'https://github.com/CocoaPods/Specs.git'
+use_frameworks!
+
+target 'EARestrictedScrollView', :exclusive => true do
+  pod 'EARestrictedScrollView', :path => '../'
+end
+
+target 'Tests', :exclusive => true do
+    pod 'EARestrictedScrollView', :path => '../'
+    
+    pod 'Specta'
+    pod 'Expecta'
+    pod 'FBSnapshotTestCase/Core'
+    pod 'Expecta+Snapshots', :git => 'https://github.com/dblock/ios-snapshot-test-case-expecta.git'
+end

+ 36 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Podfile.lock

@@ -0,0 +1,36 @@
+PODS:
+  - EARestrictedScrollView (1.1.0)
+  - Expecta (1.0.5)
+  - Expecta+Snapshots (3.0.0):
+    - Expecta (~> 1.0)
+    - FBSnapshotTestCase/Core (~> 2.0)
+    - Specta (~> 1.0)
+  - FBSnapshotTestCase/Core (2.1.0)
+  - Specta (1.0.5)
+
+DEPENDENCIES:
+  - EARestrictedScrollView (from `../`)
+  - Expecta
+  - Expecta+Snapshots (from `https://github.com/dblock/ios-snapshot-test-case-expecta.git`)
+  - FBSnapshotTestCase/Core
+  - Specta
+
+EXTERNAL SOURCES:
+  EARestrictedScrollView:
+    :path: "../"
+  Expecta+Snapshots:
+    :git: https://github.com/dblock/ios-snapshot-test-case-expecta.git
+
+CHECKOUT OPTIONS:
+  Expecta+Snapshots:
+    :commit: fedaf506a7e672ea309b759200b593df374aaece
+    :git: https://github.com/dblock/ios-snapshot-test-case-expecta.git
+
+SPEC CHECKSUMS:
+  EARestrictedScrollView: b0c2a3f92fb2610bb44d71c5e4893777c89e45ef
+  Expecta: e1c022fcd33910b6be89c291d2775b3fe27a89fe
+  Expecta+Snapshots: c7ae063e5f327b5995d0cbdc3981f189f23dc75f
+  FBSnapshotTestCase: 366ecd378511d7716c79991cd8067d1eed23578d
+  Specta: ac94d110b865115fe60ff2c6d7281053c6f8e8a2
+
+COCOAPODS: 0.39.0

+ 14 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.h

@@ -0,0 +1,14 @@
+#import <Expecta/Expecta.h>
+#import "ExpectaObject+FBSnapshotTest.h"
+
+@interface EXPExpectFBSnapshotTest : NSObject
+@end
+
+/// Set the default folder for image tests to run in
+extern void setGlobalReferenceImageDir(char *reference);
+
+EXPMatcherInterface(haveValidSnapshot, (void));
+EXPMatcherInterface(recordSnapshot, (void));
+
+EXPMatcherInterface(haveValidSnapshotNamed, (NSString *snapshot));
+EXPMatcherInterface(recordSnapshotNamed, (NSString *snapshot));

+ 284 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/EXPMatchers+FBSnapshotTest.m

@@ -0,0 +1,284 @@
+#import "EXPMatchers+FBSnapshotTest.h"
+#import <Expecta/EXPMatcherHelpers.h>
+#import <FBSnapshotTestCase/FBSnapshotTestController.h>
+
+@interface EXPExpectFBSnapshotTest()
+@property (nonatomic, strong) NSString *referenceImagesDirectory;
+@end
+
+@implementation EXPExpectFBSnapshotTest
+
++ (id)instance
+{
+    static EXPExpectFBSnapshotTest *instance = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        instance = [[self alloc] init];
+    });
+    return instance;
+}
+
++ (BOOL)compareSnapshotOfViewOrLayer:(id)viewOrLayer snapshot:(NSString *)snapshot testCase:(id)testCase record:(BOOL)record referenceDirectory:(NSString *)referenceDirectory error:(NSError **)error
+
+{
+    FBSnapshotTestController *snapshotController = [[FBSnapshotTestController alloc] initWithTestClass:[testCase class]];
+    snapshotController.recordMode = record;
+    snapshotController.referenceImagesDirectory = referenceDirectory;
+    snapshotController.usesDrawViewHierarchyInRect = [Expecta usesDrawViewHierarchyInRect];
+
+    if (! snapshotController.referenceImagesDirectory) {
+        [NSException raise:@"Missing value for referenceImagesDirectory" format:@"Call [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory"];
+    }
+
+    return [snapshotController compareSnapshotOfViewOrLayer:viewOrLayer
+                                                   selector:NSSelectorFromString(snapshot)
+                                                 identifier:nil
+                                                  tolerance:0
+                                                      error:error];
+}
+
++ (NSString *)combinedError:(NSString *)message test:(NSString *)test error:(NSError *)error
+{
+    NSAssert(message, @"missing message");
+    NSAssert(test, @"missing test name");
+
+    NSMutableArray *ary = [NSMutableArray array];
+
+    [ary addObject:[NSString stringWithFormat:@"%@ %@", message, test]];
+
+    for(NSString *key in error.userInfo.keyEnumerator) {
+        [ary addObject:[NSString stringWithFormat:@" %@: %@", key, [error.userInfo valueForKey:key]]];
+    }
+
+    return [ary componentsJoinedByString:@"\n"];
+}
+
+@end
+
+void setGlobalReferenceImageDir(char *reference) {
+    NSString *referenceImagesDirectory = [NSString stringWithFormat:@"%s", reference];
+    [[EXPExpectFBSnapshotTest instance] setReferenceImagesDirectory:referenceImagesDirectory];
+};
+
+@interface EXPExpect(ReferenceDirExtension)
+- (NSString *)_getDefaultReferenceDirectory;
+@end
+
+@implementation EXPExpect(ReferenceDirExtension)
+
+- (NSString *)_getDefaultReferenceDirectory
+{
+    NSString *globalReference = [[EXPExpectFBSnapshotTest instance] referenceImagesDirectory];
+    if (globalReference) {
+        return globalReference;
+    }
+
+    // Search the test file's path to find the first folder with the substring "tests"
+    // then append "/ReferenceImages" and use that
+
+    NSString *testFileName = [NSString stringWithCString:self.fileName encoding:NSUTF8StringEncoding];
+    NSArray *pathComponents = [testFileName pathComponents];
+
+    for (NSString *folder in pathComponents) {
+        if ([folder.lowercaseString rangeOfString:@"tests"].location != NSNotFound) {
+
+            NSArray *folderPathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents indexOfObject:folder] + 1)];
+            return [NSString stringWithFormat:@"%@/ReferenceImages", [folderPathComponents componentsJoinedByString:@"/"]];
+
+        }
+    }
+
+    [NSException raise:@"Could not infer reference image folder" format:@"You should provide a reference dir using setGlobalReferenceImageDir(FB_REFERENCE_IMAGE_DIR);"];
+    return nil;
+}
+@end
+
+
+#import <Specta/Specta.h>
+#import <Specta/SpectaUtility.h>
+#import <Specta/SPTExample.h>
+
+NSString *sanitizedTestPath();
+
+NSString *sanitizedTestPath(){
+    id compiledExample = [[NSThread currentThread] threadDictionary][@"SPTCurrentSpec"]; // SPTSpec
+    NSString *name;
+    if ([compiledExample respondsToSelector:@selector(name)]) {
+        // Specta 0.3 syntax
+        name = [compiledExample performSelector:@selector(name)];
+    } else if ([compiledExample respondsToSelector:@selector(fileName)]) {
+        // Specta 0.2 syntax
+        name = [compiledExample performSelector:@selector(fileName)];
+    }
+    name = [[[[name componentsSeparatedByString:@" test_"] lastObject] stringByReplacingOccurrencesOfString:@"__" withString:@"_"] stringByReplacingOccurrencesOfString:@"]" withString:@""];
+    return name;
+}
+
+EXPMatcherImplementationBegin(haveValidSnapshot, (void)){
+    __block NSError *error = nil;
+
+    prerequisite(^BOOL{
+        return actual;
+    });
+
+
+    match(^BOOL{
+        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
+        NSString *name = sanitizedTestPath();
+        if ([actual isKindOfClass:UIViewController.class]) {
+            [actual beginAppearanceTransition:YES animated:NO];
+            [actual endAppearanceTransition];
+            
+            actual = [actual view];
+        }
+
+        return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:name testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];
+    });
+
+    failureMessageForTo(^NSString *{
+        if (!actual) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into haveValidSnapshot." test:sanitizedTestPath() error:nil];
+        }
+
+        return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot in" test:sanitizedTestPath() error:error];
+    });
+
+    failureMessageForNotTo(^NSString *{
+        return [EXPExpectFBSnapshotTest combinedError:@"expected to not have a matching snapshot in" test:sanitizedTestPath() error:error];
+    });
+}
+EXPMatcherImplementationEnd
+
+EXPMatcherImplementationBegin(recordSnapshot, (void)) {
+    __block NSError *error = nil;
+
+    BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
+
+    prerequisite(^BOOL{
+        return actual && actualIsViewLayerOrViewController;
+    });
+
+    match(^BOOL{
+        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
+
+        // For view controllers do the viewWill/viewDid dance, then pass view through
+        if ([actual isKindOfClass:UIViewController.class]) {
+
+            [actual beginAppearanceTransition:YES animated:NO];
+            [actual endAppearanceTransition];
+            actual = [actual view];
+        }
+
+        [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:sanitizedTestPath() testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];
+        return NO;
+    });
+
+    failureMessageForTo(^NSString *{
+        if (!actual) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into recordSnapshot." test:sanitizedTestPath() error:nil];
+        }
+
+        if (!actualIsViewLayerOrViewController) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:sanitizedTestPath() error:nil];
+        }
+        if (error) {
+            return [EXPExpectFBSnapshotTest combinedError:@"expected to record a snapshot in" test:sanitizedTestPath() error:error];
+        } else {
+            return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", sanitizedTestPath()];
+        }
+    });
+
+    failureMessageForNotTo(^NSString *{
+        if (error) {
+            return [EXPExpectFBSnapshotTest combinedError:@"expected to record a snapshot in" test:sanitizedTestPath() error:error];
+        } else {
+            return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", sanitizedTestPath()];
+        }
+    });
+}
+EXPMatcherImplementationEnd
+
+EXPMatcherImplementationBegin(haveValidSnapshotNamed, (NSString *snapshot)){
+    BOOL snapshotIsNil = (snapshot == nil);
+    __block NSError *error = nil;
+
+    prerequisite(^BOOL{
+        return actual && !(snapshotIsNil);
+    });
+
+    match(^BOOL{
+        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
+        if ([actual isKindOfClass:UIViewController.class]) {
+            [actual beginAppearanceTransition:YES animated:NO];
+            [actual endAppearanceTransition];
+
+            actual = [actual view];
+        }
+        return [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:NO referenceDirectory:referenceImageDir error:&error];
+    });
+
+    failureMessageForTo(^NSString *{
+        if (!actual) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into haveValidSnapshotNamed." test:sanitizedTestPath() error:nil];
+        }
+
+        return [EXPExpectFBSnapshotTest combinedError:@"expected a matching snapshot named" test:snapshot error:error];
+
+    });
+
+    failureMessageForNotTo(^NSString *{
+        return [EXPExpectFBSnapshotTest combinedError:@"expected not to have a matching snapshot named" test:snapshot error:error];
+    });
+}
+EXPMatcherImplementationEnd
+
+EXPMatcherImplementationBegin(recordSnapshotNamed, (NSString *snapshot)) {
+    BOOL snapshotExists = (snapshot != nil);
+    BOOL actualIsViewLayerOrViewController = ([actual isKindOfClass:UIView.class] || [actual isKindOfClass:CALayer.class] || [actual isKindOfClass:UIViewController.class]);
+    __block NSError *error = nil;
+    id actualRef = actual;
+
+    prerequisite(^BOOL{
+        return actualRef && snapshotExists && actualIsViewLayerOrViewController;
+    });
+
+    match(^BOOL{
+        NSString *referenceImageDir = [self _getDefaultReferenceDirectory];
+
+        // For view controllers do the viewWill/viewDid dance, then pass view through
+        if ([actual isKindOfClass:UIViewController.class]) {
+            [actual beginAppearanceTransition:YES animated:NO];
+            [actual endAppearanceTransition];
+            actual = [actual view];
+        }
+
+        [EXPExpectFBSnapshotTest compareSnapshotOfViewOrLayer:actual snapshot:snapshot testCase:[self testCase] record:YES referenceDirectory:referenceImageDir error:&error];
+        return NO;
+    });
+
+    failureMessageForTo(^NSString *{
+        if (!actual) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Nil was passed into recordSnapshotNamed." test:sanitizedTestPath() error:nil];
+        }
+        if (!actualIsViewLayerOrViewController) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil];
+        }
+        if (error) {
+            return [EXPExpectFBSnapshotTest combinedError:@"expected to record a matching snapshot named" test:snapshot error:error];
+        } else {
+            return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", snapshot];
+        }
+    });
+
+    failureMessageForNotTo(^NSString *{
+        if (!actualIsViewLayerOrViewController) {
+            return [EXPExpectFBSnapshotTest combinedError:@"Expected a View, Layer or View Controller." test:snapshot error:nil];
+        }
+        if (error) {
+            return [EXPExpectFBSnapshotTest combinedError:@"expected to record a matching snapshot named" test:snapshot error:error];
+        } else {
+            return [NSString stringWithFormat:@"snapshot %@ successfully recorded, replace recordSnapshot with a check", snapshot];
+        }
+    });
+}
+EXPMatcherImplementationEnd

+ 17 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.h

@@ -0,0 +1,17 @@
+//
+//  ExpectaObject+FBSnapshotTest.h
+//  Expecta+Snapshots
+//
+//  Created by John Boiles on 8/3/15.
+//  Copyright (c) 2015 Expecta+Snapshots All rights reserved.
+//
+
+#import <Expecta/ExpectaObject.h>
+
+@interface Expecta (FBSnapshotTest)
+
++ (void)setUsesDrawViewHierarchyInRect:(BOOL)usesDrawViewHierarchyInRect;
+
++ (BOOL)usesDrawViewHierarchyInRect;
+
+@end

+ 25 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/ExpectaObject+FBSnapshotTest.m

@@ -0,0 +1,25 @@
+//
+//  ExpectaObject+FBSnapshotTest.m
+//  Expecta+Snapshots
+//
+//  Created by John Boiles on 8/3/15.
+//  Copyright (c) 2015 Expecta+Snapshots All rights reserved.
+//
+
+#import "ExpectaObject+FBSnapshotTest.h"
+#import <objc/runtime.h>
+
+static NSString const *kUsesDrawViewHierarchyInRectKey = @"ExpectaObject+FBSnapshotTest.usesDrawViewHierarchyInRect";
+
+@implementation Expecta (FBSnapshotTest)
+
++ (void)setUsesDrawViewHierarchyInRect:(BOOL)usesDrawViewHierarchyInRect {
+    objc_setAssociatedObject(self, (__bridge const void *)(kUsesDrawViewHierarchyInRectKey), @(usesDrawViewHierarchyInRect), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
+}
+
++ (BOOL)usesDrawViewHierarchyInRect {
+    NSNumber *usesDrawViewHierarchyInRect = objc_getAssociatedObject(self, (__bridge const void *)(kUsesDrawViewHierarchyInRectKey));
+    return usesDrawViewHierarchyInRect.boolValue;
+}
+
+@end

+ 22 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta+Snapshots/LICENSE.md

@@ -0,0 +1,22 @@
+MIT License
+
+Copyright (c) 2014 Daniel Doubrovkine, Artsy Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 25 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.h

@@ -0,0 +1,25 @@
+//
+//  EXPRuntimeMatcher.h
+//  Expecta
+//
+//  Created by Luke Redpath on 26/03/2012.
+//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "EXPMatcher.h"
+#import "EXPDefines.h"
+
+@interface EXPBlockDefinedMatcher : NSObject <EXPMatcher> {
+  EXPBoolBlock prerequisiteBlock;
+  EXPBoolBlock matchBlock;
+  EXPStringBlock failureMessageForToBlock;
+  EXPStringBlock failureMessageForNotToBlock;
+}
+
+@property(nonatomic, copy) EXPBoolBlock prerequisiteBlock;
+@property(nonatomic, copy) EXPBoolBlock matchBlock;
+@property(nonatomic, copy) EXPStringBlock failureMessageForToBlock;
+@property(nonatomic, copy) EXPStringBlock failureMessageForNotToBlock;
+
+@end

+ 60 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPBlockDefinedMatcher.m

@@ -0,0 +1,60 @@
+//
+//  EXPRuntimeMatcher.m
+//  Expecta
+//
+//  Created by Luke Redpath on 26/03/2012.
+//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
+//
+
+#import "EXPBlockDefinedMatcher.h"
+
+@implementation EXPBlockDefinedMatcher
+
+- (void)dealloc
+{
+    self.prerequisiteBlock = nil;
+    self.matchBlock = nil;
+    self.failureMessageForToBlock = nil;
+    self.failureMessageForNotToBlock = nil;
+    
+    [super dealloc];
+}
+
+@synthesize prerequisiteBlock;
+@synthesize matchBlock;
+@synthesize failureMessageForToBlock;
+@synthesize failureMessageForNotToBlock;
+
+- (BOOL)meetsPrerequesiteFor:(id)actual
+{
+  if (self.prerequisiteBlock) {
+    return self.prerequisiteBlock();
+  }
+  return YES;
+}
+
+- (BOOL)matches:(id)actual
+{
+  if (self.matchBlock) {
+    return self.matchBlock();
+  }
+  return YES;
+}
+
+- (NSString *)failureMessageForTo:(id)actual
+{
+  if (self.failureMessageForToBlock) {
+    return self.failureMessageForToBlock();
+  }
+  return nil;
+}
+
+- (NSString *)failureMessageForNotTo:(id)actual
+{
+  if (self.failureMessageForNotToBlock) {
+    return self.failureMessageForNotToBlock();
+  }
+  return nil;
+}
+
+@end

+ 17 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDefines.h

@@ -0,0 +1,17 @@
+//
+//  EXPDefines.h
+//  Expecta
+//
+//  Created by Luke Redpath on 26/03/2012.
+//  Copyright (c) 2012 Peter Jihoon Kim. All rights reserved.
+//
+
+#ifndef Expecta_EXPDefines_h
+#define Expecta_EXPDefines_h
+
+typedef void (^EXPBasicBlock)();
+typedef id (^EXPIdBlock)();
+typedef BOOL (^EXPBoolBlock)();
+typedef NSString *(^EXPStringBlock)();
+
+#endif

+ 13 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDoubleTuple.h

@@ -0,0 +1,13 @@
+#import <Foundation/Foundation.h>
+
+@interface EXPDoubleTuple : NSObject {
+    double *_values;
+    size_t _size;
+}
+
+@property (nonatomic, assign) double *values;
+@property (nonatomic, assign) size_t size;
+
+- (instancetype)initWithDoubleValues:(double *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;
+
+@end

+ 45 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPDoubleTuple.m

@@ -0,0 +1,45 @@
+#import "EXPDoubleTuple.h"
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+@implementation EXPDoubleTuple
+#pragma clang diagnostic pop
+
+@synthesize values = _values, size = _size;
+
+- (instancetype)initWithDoubleValues:(double *)values size:(size_t)size {
+    if ((self = [super init])) {
+        self.values = malloc(sizeof(double) * size);
+        memcpy(self.values, values, sizeof(double) * size);
+        self.size = size;
+    }
+    return self;
+}
+
+- (void)dealloc {
+    free(self.values);
+    [super dealloc];
+}
+
+- (BOOL)isEqual:(id)object {
+    if (![object isKindOfClass:[EXPDoubleTuple class]]) return NO;
+    EXPDoubleTuple *other = (EXPDoubleTuple *)object;
+    if (self.size == other.size) {
+        for (int i = 0; i < self.size; ++i) {
+            if (self.values[i] != other.values[i]) return NO;
+        }
+        return YES;
+    }
+    return NO;
+}
+
+- (NSString *)description {
+    if (self.size == 2) {
+        return [NSString stringWithFormat:@"Double tuple: {%f, %f}", self.values[0], self.values[1]];
+    } else if (self.size == 4) {
+        return [NSString stringWithFormat:@"Double tuple: {%f, %f, %f, %f}", self.values[0], self.values[1], self.values[2], self.values[3]];
+    }
+    return [NSString stringWithFormat:@"Double tuple of unexpected size %zd, sadly", self.size];
+}
+
+@end

+ 45 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPExpect.h

@@ -0,0 +1,45 @@
+#import <Foundation/Foundation.h>
+#import "EXPMatcher.h"
+#import "EXPDefines.h"
+
+@interface EXPExpect : NSObject {
+  EXPIdBlock _actualBlock;
+  id _testCase;
+  int _lineNumber;
+  char *_fileName;
+  BOOL _negative;
+  BOOL _asynchronous;
+  NSTimeInterval _timeout;
+}
+
+@property(nonatomic, copy) EXPIdBlock actualBlock;
+@property(nonatomic, readonly) id actual;
+@property(nonatomic, assign) id testCase;
+@property(nonatomic) int lineNumber;
+@property(nonatomic) const char *fileName;
+@property(nonatomic) BOOL negative;
+@property(nonatomic) BOOL asynchronous;
+@property(nonatomic) NSTimeInterval timeout;
+
+@property(nonatomic, readonly) EXPExpect *to;
+@property(nonatomic, readonly) EXPExpect *toNot;
+@property(nonatomic, readonly) EXPExpect *notTo;
+@property(nonatomic, readonly) EXPExpect *will;
+@property(nonatomic, readonly) EXPExpect *willNot;
+@property(nonatomic, readonly) EXPExpect *(^after)(NSTimeInterval timeInterval);
+
+- (instancetype)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName NS_DESIGNATED_INITIALIZER;
++ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName;
+
+- (void)applyMatcher:(id<EXPMatcher>)matcher;
+- (void)applyMatcher:(id<EXPMatcher>)matcher to:(NSObject **)actual;
+
+@end
+
+@interface EXPDynamicPredicateMatcher : NSObject <EXPMatcher> {
+  EXPExpect *_expectation;
+  SEL _selector;
+}
+- (instancetype)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector NS_DESIGNATED_INITIALIZER;
+@property (nonatomic, readonly, copy) void (^dispatch)(void);
+@end

+ 221 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPExpect.m

@@ -0,0 +1,221 @@
+#import "EXPExpect.h"
+#import "NSObject+Expecta.h"
+#import "Expecta.h"
+#import "EXPUnsupportedObject.h"
+#import "EXPMatcher.h"
+#import "EXPBlockDefinedMatcher.h"
+#import <libkern/OSAtomic.h>
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+@implementation EXPExpect
+#pragma clang diagnostic pop
+
+@dynamic
+  actual,
+  to,
+  toNot,
+  notTo,
+  will,
+  willNot,
+  after;
+
+@synthesize
+  actualBlock=_actualBlock,
+  testCase=_testCase,
+  negative=_negative,
+  asynchronous=_asynchronous,
+  timeout=_timeout,
+  lineNumber=_lineNumber,
+  fileName=_fileName;
+
+- (instancetype)initWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName {
+  self = [super init];
+  if(self) {
+    self.actualBlock = actualBlock;
+    self.testCase = testCase;
+    self.negative = NO;
+    self.asynchronous = NO;
+    self.timeout = [Expecta asynchronousTestTimeout];
+    self.lineNumber = lineNumber;
+    self.fileName = fileName;
+  }
+  return self;
+}
+
+- (void)dealloc
+{
+  [_actualBlock release];
+  _actualBlock = nil;
+  [super dealloc];
+}
+
++ (EXPExpect *)expectWithActualBlock:(id)actualBlock testCase:(id)testCase lineNumber:(int)lineNumber fileName:(const char *)fileName {
+  return [[[EXPExpect alloc] initWithActualBlock:actualBlock testCase:(id)testCase lineNumber:lineNumber fileName:fileName] autorelease];
+}
+
+#pragma mark -
+
+- (EXPExpect *)to {
+  return self;
+}
+
+- (EXPExpect *)toNot {
+  self.negative = !self.negative;
+  return self;
+}
+
+- (EXPExpect *)notTo {
+  return [self toNot];
+}
+
+- (EXPExpect *)will {
+  self.asynchronous = YES;
+  return self;
+}
+
+- (EXPExpect *)willNot {
+  return self.will.toNot;
+}
+
+- (EXPExpect *(^)(NSTimeInterval))after
+{
+  EXPExpect * (^block)(NSTimeInterval) = [^EXPExpect *(NSTimeInterval timeout) {
+    self.asynchronous = YES;
+    self.timeout = timeout;
+    return self;
+  } copy];
+
+  return [block autorelease];
+}
+
+#pragma mark -
+
+- (id)actual {
+  if(self.actualBlock) {
+    return self.actualBlock();
+  }
+  return nil;
+}
+
+- (void)applyMatcher:(id<EXPMatcher>)matcher
+{
+  id actual = [self actual];
+  [self applyMatcher:matcher to:&actual];
+}
+
+- (void)applyMatcher:(id<EXPMatcher>)matcher to:(NSObject **)actual {
+  if([*actual isKindOfClass:[EXPUnsupportedObject class]]) {
+    EXPFail(self.testCase, self.lineNumber, self.fileName,
+            [NSString stringWithFormat:@"expecting a %@ is not supported", ((EXPUnsupportedObject *)*actual).type]);
+  } else {
+    BOOL failed = NO;
+    if([matcher respondsToSelector:@selector(meetsPrerequesiteFor:)] &&
+       ![matcher meetsPrerequesiteFor:*actual]) {
+      failed = YES;
+    } else {
+      BOOL matchResult = NO;
+      if(self.asynchronous) {
+        NSTimeInterval timeOut = self.timeout;
+        NSDate *expiryDate = [NSDate dateWithTimeIntervalSinceNow:timeOut];
+        while(1) {
+          matchResult = [matcher matches:*actual];
+          failed = self.negative ? matchResult : !matchResult;
+          if(!failed || ([(NSDate *)[NSDate date] compare:expiryDate] == NSOrderedDescending)) {
+            break;
+          }
+          [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
+          OSMemoryBarrier();
+          *actual = self.actual;
+        }
+      } else {
+        matchResult = [matcher matches:*actual];
+      }
+      failed = self.negative ? matchResult : !matchResult;
+    }
+    if(failed) {
+      NSString *message = nil;
+
+      if(self.negative) {
+        if ([matcher respondsToSelector:@selector(failureMessageForNotTo:)]) {
+          message = [matcher failureMessageForNotTo:*actual];
+        }
+      } else {
+        if ([matcher respondsToSelector:@selector(failureMessageForTo:)]) {
+          message = [matcher failureMessageForTo:*actual];
+        }
+      }
+      if (message == nil) {
+        message = @"Match Failed.";
+      }
+
+      EXPFail(self.testCase, self.lineNumber, self.fileName, message);
+    }
+  }
+  self.negative = NO;
+}
+
+#pragma mark - Dynamic predicate dispatch
+
+- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
+{
+  if ([self.actual respondsToSelector:aSelector]) {
+    return [self.actual methodSignatureForSelector:aSelector];
+  }
+  return [super methodSignatureForSelector:aSelector];
+}
+
+- (void)forwardInvocation:(NSInvocation *)anInvocation
+{
+  if ([self.actual respondsToSelector:anInvocation.selector]) {
+    EXPDynamicPredicateMatcher *matcher = [[EXPDynamicPredicateMatcher alloc] initWithExpectation:self selector:anInvocation.selector];
+    [anInvocation setSelector:@selector(dispatch)];
+    [anInvocation invokeWithTarget:matcher];
+    [matcher release];
+  }
+  else {
+    [super forwardInvocation:anInvocation];
+  }
+}
+
+@end
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wobjc-designated-initializers"
+@implementation EXPDynamicPredicateMatcher
+#pragma clang diagnostic pop
+
+- (instancetype)initWithExpectation:(EXPExpect *)expectation selector:(SEL)selector
+{
+  if ((self = [super init])) {
+    _expectation = expectation;
+    _selector = selector;
+  }
+  return self;
+}
+
+- (BOOL)matches:(id)actual
+{
+  return (BOOL)[actual performSelector:_selector];
+}
+
+- (NSString *)failureMessageForTo:(id)actual
+{
+  return [NSString stringWithFormat:@"expected %@ to be true", NSStringFromSelector(_selector)];
+}
+
+- (NSString *)failureMessageForNotTo:(id)actual
+{
+  return [NSString stringWithFormat:@"expected %@ to be false", NSStringFromSelector(_selector)];
+}
+
+- (void (^)(void))dispatch
+{
+  __block id blockExpectation = _expectation;
+
+  return [[^{
+    [blockExpectation applyMatcher:self];
+  } copy] autorelease];
+}
+
+@end

+ 13 - 0
Carthage/Checkouts/EARestrictedScrollView/Example/Pods/Expecta/Expecta/EXPFloatTuple.h

@@ -0,0 +1,13 @@
+#import <Foundation/Foundation.h>
+
+@interface EXPFloatTuple : NSObject {
+    float *_values;
+    size_t _size;
+}
+
+@property (nonatomic, assign) float *values;
+@property (nonatomic, assign) size_t size;
+
+- (instancetype)initWithFloatValues:(float *)values size:(size_t)size NS_DESIGNATED_INITIALIZER;
+
+@end

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно