├── ImageOpenTransition.podspec ├── ImageOpenTransition.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ ├── Matan.xcuserdatad │ │ └── UserInterfaceState.xcuserstate │ │ └── matan.cohen.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ ├── Matan.xcuserdatad │ └── xcschemes │ │ ├── ImageOpenTransition.xcscheme │ │ └── xcschememanagement.plist │ └── matan.cohen.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── ImageOpenTransition.xcscheme │ └── xcschememanagement.plist ├── ImageOpenTransition ├── 0.0.1 │ └── ImageOpenTransition.podspec ├── Delay.swift ├── ImageOpenTransition.h ├── ImageScaleTransitionDelegate.swift ├── ImageScaleTransitionDismiss.swift ├── ImageScaleTransitionExntentions.swift ├── ImageScaleTransitionObject.swift ├── ImageScaleTransitionPresent.swift ├── Info.plist ├── crossroads-destiny-clip-4x3.jpg └── windows-xp-background-image-jpg.jpg ├── ImageOpenTransitionExampleProject ├── ImageOpenTransitionExampleProject.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcuserdata │ │ │ └── matan.cohen.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ ├── Matan.xcuserdatad │ │ └── xcschemes │ │ │ ├── ImageOpenTransitionExampleProject.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── matan.cohen.xcuserdatad │ │ └── xcschemes │ │ ├── ImageOpenTransitionExampleProject.xcscheme │ │ └── xcschememanagement.plist ├── ImageOpenTransitionExampleProject.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ ├── Matan.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── matan.cohen.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist ├── ImageOpenTransitionExampleProject │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── DetailsViewController.swift │ ├── Info.plist │ ├── NoStoryBoardViewController.swift │ ├── ViewController.swift │ ├── ViewControllerCell.swift │ ├── crossroads-destiny-clip-4x3.jpg │ └── windows-xp-background-image-jpg.jpg ├── ImageOpenTransitionExampleProjectTests │ ├── ImageOpenTransitionExampleProjectTests.swift │ └── Info.plist ├── ImageOpenTransitionExampleProjectUITests │ ├── ImageOpenTransitionExampleProjectUITests.swift │ └── Info.plist ├── Podfile ├── Podfile.lock └── Pods │ ├── ImageOpenTransition │ ├── ImageOpenTransition.podspec │ └── ImageOpenTransition │ │ ├── ImageOpenTransition.h │ │ ├── ImageScaleTransitionDelegate.swift │ │ ├── ImageScaleTransitionDismiss.swift │ │ ├── ImageScaleTransitionExntentions.swift │ │ ├── ImageScaleTransitionObject.swift │ │ ├── ImageScaleTransitionPresent.swift │ │ ├── Info.plist │ │ ├── crossroads-destiny-clip-4x3.jpg │ │ └── windows-xp-background-image-jpg.jpg │ ├── Local Podspecs │ └── ImageOpenTransition.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ ├── Matan.xcuserdatad │ │ └── xcschemes │ │ │ ├── ImageOpenTransition.xcscheme │ │ │ ├── Pods-ImageOpenTransitionExampleProject.xcscheme │ │ │ ├── Pods-ImageOpenTransitionExampleProjectTests.xcscheme │ │ │ ├── Pods-ImageOpenTransitionExampleProjectUITests.xcscheme │ │ │ └── xcschememanagement.plist │ │ └── matan.cohen.xcuserdatad │ │ └── xcschemes │ │ ├── ImageOpenTransition.xcscheme │ │ ├── Pods-ImageOpenTransitionExampleProject.xcscheme │ │ ├── Pods-ImageOpenTransitionExampleProjectTests.xcscheme │ │ ├── Pods-ImageOpenTransitionExampleProjectUITests.xcscheme │ │ └── xcschememanagement.plist │ └── Target Support Files │ ├── ImageOpenTransition │ ├── ImageOpenTransition-dummy.m │ ├── ImageOpenTransition-prefix.pch │ ├── ImageOpenTransition-umbrella.h │ ├── ImageOpenTransition.modulemap │ ├── ImageOpenTransition.xcconfig │ └── Info.plist │ ├── Pods-ImageOpenTransitionExampleProject │ ├── Info.plist │ ├── Pods-ImageOpenTransitionExampleProject-acknowledgements.markdown │ ├── Pods-ImageOpenTransitionExampleProject-acknowledgements.plist │ ├── Pods-ImageOpenTransitionExampleProject-dummy.m │ ├── Pods-ImageOpenTransitionExampleProject-frameworks.sh │ ├── Pods-ImageOpenTransitionExampleProject-resources.sh │ ├── Pods-ImageOpenTransitionExampleProject-umbrella.h │ ├── Pods-ImageOpenTransitionExampleProject.debug.xcconfig │ ├── Pods-ImageOpenTransitionExampleProject.modulemap │ └── Pods-ImageOpenTransitionExampleProject.release.xcconfig │ ├── Pods-ImageOpenTransitionExampleProjectTests │ ├── Info.plist │ ├── Pods-ImageOpenTransitionExampleProjectTests-acknowledgements.markdown │ ├── Pods-ImageOpenTransitionExampleProjectTests-acknowledgements.plist │ ├── Pods-ImageOpenTransitionExampleProjectTests-dummy.m │ ├── Pods-ImageOpenTransitionExampleProjectTests-frameworks.sh │ ├── Pods-ImageOpenTransitionExampleProjectTests-resources.sh │ ├── Pods-ImageOpenTransitionExampleProjectTests-umbrella.h │ ├── Pods-ImageOpenTransitionExampleProjectTests.debug.xcconfig │ ├── Pods-ImageOpenTransitionExampleProjectTests.modulemap │ └── Pods-ImageOpenTransitionExampleProjectTests.release.xcconfig │ └── Pods-ImageOpenTransitionExampleProjectUITests │ ├── Info.plist │ ├── Pods-ImageOpenTransitionExampleProjectUITests-acknowledgements.markdown │ ├── Pods-ImageOpenTransitionExampleProjectUITests-acknowledgements.plist │ ├── Pods-ImageOpenTransitionExampleProjectUITests-dummy.m │ ├── Pods-ImageOpenTransitionExampleProjectUITests-frameworks.sh │ ├── Pods-ImageOpenTransitionExampleProjectUITests-resources.sh │ ├── Pods-ImageOpenTransitionExampleProjectUITests-umbrella.h │ ├── Pods-ImageOpenTransitionExampleProjectUITests.debug.xcconfig │ ├── Pods-ImageOpenTransitionExampleProjectUITests.modulemap │ └── Pods-ImageOpenTransitionExampleProjectUITests.release.xcconfig ├── ImageOpenTransitionTests ├── ImageOpenTransitionTests.swift └── Info.plist ├── LICENSE └── README.md /ImageOpenTransition.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'ImageOpenTransition' 4 | s.version = '0.1.7' 5 | s.summary = 'ImageOpenTransition' 6 | s.homepage = 'https://github.com/mcmatan/ImageOpenTransition' 7 | s.ios.deployment_target = '8.0' 8 | s.platform = :ios, '8.0' 9 | s.license = { 10 | :type => 'MIT', 11 | :file => 'LICENSE' 12 | } 13 | s.author = { 14 | 'YOURNAME' => 'Matan' 15 | } 16 | s.source = { 17 | :git => 'https://github.com/mcmatan/ImageOpenTransition.git', 18 | :tag => "#{s.version}" } 19 | 20 | s.framework = "UIKit" 21 | s.source_files = 'ImageOpenTransition*' , 'Vendor/*', 'Resource/*', 'ImageOpenTransition/*' 22 | s.requires_arc = true 23 | 24 | end 25 | 26 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | ED1CF32C1D3BA6C800FE7B68 /* ImageScaleTransitionExntentions.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED1CF32B1D3BA6C800FE7B68 /* ImageScaleTransitionExntentions.swift */; }; 11 | ED409CFB1D364F38002C50A4 /* ImageOpenTransition.h in Headers */ = {isa = PBXBuildFile; fileRef = ED409CFA1D364F38002C50A4 /* ImageOpenTransition.h */; settings = {ATTRIBUTES = (Public, ); }; }; 12 | ED409D021D364F38002C50A4 /* ImageOpenTransition.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED409CF71D364F38002C50A4 /* ImageOpenTransition.framework */; }; 13 | ED409D071D364F38002C50A4 /* ImageOpenTransitionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED409D061D364F38002C50A4 /* ImageOpenTransitionTests.swift */; }; 14 | ED409D161D364F88002C50A4 /* windows-xp-background-image-jpg.jpg in Resources */ = {isa = PBXBuildFile; fileRef = ED409D141D364F88002C50A4 /* windows-xp-background-image-jpg.jpg */; }; 15 | ED409D171D364F88002C50A4 /* crossroads-destiny-clip-4x3.jpg in Resources */ = {isa = PBXBuildFile; fileRef = ED409D151D364F88002C50A4 /* crossroads-destiny-clip-4x3.jpg */; }; 16 | ED409D1C1D364F8E002C50A4 /* ImageScaleTransitionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED409D181D364F8E002C50A4 /* ImageScaleTransitionDelegate.swift */; }; 17 | ED409D1D1D364F8E002C50A4 /* ImageScaleTransitionPresent.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED409D191D364F8E002C50A4 /* ImageScaleTransitionPresent.swift */; }; 18 | ED409D1E1D364F8E002C50A4 /* ImageScaleTransitionDismiss.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED409D1A1D364F8E002C50A4 /* ImageScaleTransitionDismiss.swift */; }; 19 | ED409D1F1D364F8E002C50A4 /* ImageScaleTransitionObject.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED409D1B1D364F8E002C50A4 /* ImageScaleTransitionObject.swift */; }; 20 | ED460C161D89867000E3BDA7 /* Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED460C151D89867000E3BDA7 /* Delay.swift */; }; 21 | EDB595F01D8EA8A4000F3F20 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EDB595EF1D8EA8A4000F3F20 /* UIKit.framework */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | ED409D031D364F38002C50A4 /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = ED409CEE1D364F38002C50A4 /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = ED409CF61D364F38002C50A4; 30 | remoteInfo = ImageOpenTransition; 31 | }; 32 | /* End PBXContainerItemProxy section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | ED1CF32B1D3BA6C800FE7B68 /* ImageScaleTransitionExntentions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageScaleTransitionExntentions.swift; sourceTree = ""; }; 36 | ED409CF71D364F38002C50A4 /* ImageOpenTransition.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ImageOpenTransition.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 37 | ED409CFA1D364F38002C50A4 /* ImageOpenTransition.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageOpenTransition.h; sourceTree = ""; }; 38 | ED409CFC1D364F38002C50A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 39 | ED409D011D364F38002C50A4 /* ImageOpenTransitionTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ImageOpenTransitionTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 40 | ED409D061D364F38002C50A4 /* ImageOpenTransitionTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageOpenTransitionTests.swift; sourceTree = ""; }; 41 | ED409D081D364F38002C50A4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 42 | ED409D141D364F88002C50A4 /* windows-xp-background-image-jpg.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "windows-xp-background-image-jpg.jpg"; sourceTree = ""; }; 43 | ED409D151D364F88002C50A4 /* crossroads-destiny-clip-4x3.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = "crossroads-destiny-clip-4x3.jpg"; sourceTree = ""; }; 44 | ED409D181D364F8E002C50A4 /* ImageScaleTransitionDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageScaleTransitionDelegate.swift; sourceTree = ""; }; 45 | ED409D191D364F8E002C50A4 /* ImageScaleTransitionPresent.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageScaleTransitionPresent.swift; sourceTree = ""; }; 46 | ED409D1A1D364F8E002C50A4 /* ImageScaleTransitionDismiss.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageScaleTransitionDismiss.swift; sourceTree = ""; }; 47 | ED409D1B1D364F8E002C50A4 /* ImageScaleTransitionObject.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageScaleTransitionObject.swift; sourceTree = ""; }; 48 | ED460C151D89867000E3BDA7 /* Delay.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Delay.swift; sourceTree = ""; }; 49 | EDB595EF1D8EA8A4000F3F20 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | ED409CF31D364F38002C50A4 /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | EDB595F01D8EA8A4000F3F20 /* UIKit.framework in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | ED409CFE1D364F38002C50A4 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | ED409D021D364F38002C50A4 /* ImageOpenTransition.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | ED409CED1D364F38002C50A4 = { 73 | isa = PBXGroup; 74 | children = ( 75 | ED409CF91D364F38002C50A4 /* ImageOpenTransition */, 76 | ED409D051D364F38002C50A4 /* ImageOpenTransitionTests */, 77 | ED409CF81D364F38002C50A4 /* Products */, 78 | EDB595EE1D8EA8A4000F3F20 /* Frameworks */, 79 | ); 80 | sourceTree = ""; 81 | }; 82 | ED409CF81D364F38002C50A4 /* Products */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | ED409CF71D364F38002C50A4 /* ImageOpenTransition.framework */, 86 | ED409D011D364F38002C50A4 /* ImageOpenTransitionTests.xctest */, 87 | ); 88 | name = Products; 89 | sourceTree = ""; 90 | }; 91 | ED409CF91D364F38002C50A4 /* ImageOpenTransition */ = { 92 | isa = PBXGroup; 93 | children = ( 94 | ED409CFA1D364F38002C50A4 /* ImageOpenTransition.h */, 95 | ED409CFC1D364F38002C50A4 /* Info.plist */, 96 | ED409D181D364F8E002C50A4 /* ImageScaleTransitionDelegate.swift */, 97 | ED409D191D364F8E002C50A4 /* ImageScaleTransitionPresent.swift */, 98 | ED409D1A1D364F8E002C50A4 /* ImageScaleTransitionDismiss.swift */, 99 | ED409D1B1D364F8E002C50A4 /* ImageScaleTransitionObject.swift */, 100 | ED1CF32B1D3BA6C800FE7B68 /* ImageScaleTransitionExntentions.swift */, 101 | ED409D131D364F72002C50A4 /* Exntetions */, 102 | ED409D111D364F67002C50A4 /* Ether */, 103 | ); 104 | path = ImageOpenTransition; 105 | sourceTree = ""; 106 | }; 107 | ED409D051D364F38002C50A4 /* ImageOpenTransitionTests */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | ED409D061D364F38002C50A4 /* ImageOpenTransitionTests.swift */, 111 | ED409D081D364F38002C50A4 /* Info.plist */, 112 | ); 113 | path = ImageOpenTransitionTests; 114 | sourceTree = ""; 115 | }; 116 | ED409D111D364F67002C50A4 /* Ether */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | ED409D141D364F88002C50A4 /* windows-xp-background-image-jpg.jpg */, 120 | ED409D151D364F88002C50A4 /* crossroads-destiny-clip-4x3.jpg */, 121 | ); 122 | name = Ether; 123 | sourceTree = ""; 124 | }; 125 | ED409D131D364F72002C50A4 /* Exntetions */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | ED460C151D89867000E3BDA7 /* Delay.swift */, 129 | ); 130 | name = Exntetions; 131 | sourceTree = ""; 132 | }; 133 | EDB595EE1D8EA8A4000F3F20 /* Frameworks */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | EDB595EF1D8EA8A4000F3F20 /* UIKit.framework */, 137 | ); 138 | name = Frameworks; 139 | sourceTree = ""; 140 | }; 141 | /* End PBXGroup section */ 142 | 143 | /* Begin PBXHeadersBuildPhase section */ 144 | ED409CF41D364F38002C50A4 /* Headers */ = { 145 | isa = PBXHeadersBuildPhase; 146 | buildActionMask = 2147483647; 147 | files = ( 148 | ED409CFB1D364F38002C50A4 /* ImageOpenTransition.h in Headers */, 149 | ); 150 | runOnlyForDeploymentPostprocessing = 0; 151 | }; 152 | /* End PBXHeadersBuildPhase section */ 153 | 154 | /* Begin PBXNativeTarget section */ 155 | ED409CF61D364F38002C50A4 /* ImageOpenTransition */ = { 156 | isa = PBXNativeTarget; 157 | buildConfigurationList = ED409D0B1D364F38002C50A4 /* Build configuration list for PBXNativeTarget "ImageOpenTransition" */; 158 | buildPhases = ( 159 | ED409CF21D364F38002C50A4 /* Sources */, 160 | ED409CF31D364F38002C50A4 /* Frameworks */, 161 | ED409CF41D364F38002C50A4 /* Headers */, 162 | ED409CF51D364F38002C50A4 /* Resources */, 163 | ); 164 | buildRules = ( 165 | ); 166 | dependencies = ( 167 | ); 168 | name = ImageOpenTransition; 169 | productName = ImageOpenTransition; 170 | productReference = ED409CF71D364F38002C50A4 /* ImageOpenTransition.framework */; 171 | productType = "com.apple.product-type.framework"; 172 | }; 173 | ED409D001D364F38002C50A4 /* ImageOpenTransitionTests */ = { 174 | isa = PBXNativeTarget; 175 | buildConfigurationList = ED409D0E1D364F38002C50A4 /* Build configuration list for PBXNativeTarget "ImageOpenTransitionTests" */; 176 | buildPhases = ( 177 | ED409CFD1D364F38002C50A4 /* Sources */, 178 | ED409CFE1D364F38002C50A4 /* Frameworks */, 179 | ED409CFF1D364F38002C50A4 /* Resources */, 180 | ); 181 | buildRules = ( 182 | ); 183 | dependencies = ( 184 | ED409D041D364F38002C50A4 /* PBXTargetDependency */, 185 | ); 186 | name = ImageOpenTransitionTests; 187 | productName = ImageOpenTransitionTests; 188 | productReference = ED409D011D364F38002C50A4 /* ImageOpenTransitionTests.xctest */; 189 | productType = "com.apple.product-type.bundle.unit-test"; 190 | }; 191 | /* End PBXNativeTarget section */ 192 | 193 | /* Begin PBXProject section */ 194 | ED409CEE1D364F38002C50A4 /* Project object */ = { 195 | isa = PBXProject; 196 | attributes = { 197 | LastSwiftUpdateCheck = 0730; 198 | LastUpgradeCheck = 0800; 199 | ORGANIZATIONNAME = Jive; 200 | TargetAttributes = { 201 | ED409CF61D364F38002C50A4 = { 202 | CreatedOnToolsVersion = 7.3.1; 203 | LastSwiftMigration = 0800; 204 | }; 205 | ED409D001D364F38002C50A4 = { 206 | CreatedOnToolsVersion = 7.3.1; 207 | LastSwiftMigration = 0800; 208 | }; 209 | }; 210 | }; 211 | buildConfigurationList = ED409CF11D364F38002C50A4 /* Build configuration list for PBXProject "ImageOpenTransition" */; 212 | compatibilityVersion = "Xcode 3.2"; 213 | developmentRegion = English; 214 | hasScannedForEncodings = 0; 215 | knownRegions = ( 216 | en, 217 | ); 218 | mainGroup = ED409CED1D364F38002C50A4; 219 | productRefGroup = ED409CF81D364F38002C50A4 /* Products */; 220 | projectDirPath = ""; 221 | projectRoot = ""; 222 | targets = ( 223 | ED409CF61D364F38002C50A4 /* ImageOpenTransition */, 224 | ED409D001D364F38002C50A4 /* ImageOpenTransitionTests */, 225 | ); 226 | }; 227 | /* End PBXProject section */ 228 | 229 | /* Begin PBXResourcesBuildPhase section */ 230 | ED409CF51D364F38002C50A4 /* Resources */ = { 231 | isa = PBXResourcesBuildPhase; 232 | buildActionMask = 2147483647; 233 | files = ( 234 | ED409D161D364F88002C50A4 /* windows-xp-background-image-jpg.jpg in Resources */, 235 | ED409D171D364F88002C50A4 /* crossroads-destiny-clip-4x3.jpg in Resources */, 236 | ); 237 | runOnlyForDeploymentPostprocessing = 0; 238 | }; 239 | ED409CFF1D364F38002C50A4 /* Resources */ = { 240 | isa = PBXResourcesBuildPhase; 241 | buildActionMask = 2147483647; 242 | files = ( 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | }; 246 | /* End PBXResourcesBuildPhase section */ 247 | 248 | /* Begin PBXSourcesBuildPhase section */ 249 | ED409CF21D364F38002C50A4 /* Sources */ = { 250 | isa = PBXSourcesBuildPhase; 251 | buildActionMask = 2147483647; 252 | files = ( 253 | ED409D1F1D364F8E002C50A4 /* ImageScaleTransitionObject.swift in Sources */, 254 | ED1CF32C1D3BA6C800FE7B68 /* ImageScaleTransitionExntentions.swift in Sources */, 255 | ED409D1C1D364F8E002C50A4 /* ImageScaleTransitionDelegate.swift in Sources */, 256 | ED460C161D89867000E3BDA7 /* Delay.swift in Sources */, 257 | ED409D1D1D364F8E002C50A4 /* ImageScaleTransitionPresent.swift in Sources */, 258 | ED409D1E1D364F8E002C50A4 /* ImageScaleTransitionDismiss.swift in Sources */, 259 | ); 260 | runOnlyForDeploymentPostprocessing = 0; 261 | }; 262 | ED409CFD1D364F38002C50A4 /* Sources */ = { 263 | isa = PBXSourcesBuildPhase; 264 | buildActionMask = 2147483647; 265 | files = ( 266 | ED409D071D364F38002C50A4 /* ImageOpenTransitionTests.swift in Sources */, 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | /* End PBXSourcesBuildPhase section */ 271 | 272 | /* Begin PBXTargetDependency section */ 273 | ED409D041D364F38002C50A4 /* PBXTargetDependency */ = { 274 | isa = PBXTargetDependency; 275 | target = ED409CF61D364F38002C50A4 /* ImageOpenTransition */; 276 | targetProxy = ED409D031D364F38002C50A4 /* PBXContainerItemProxy */; 277 | }; 278 | /* End PBXTargetDependency section */ 279 | 280 | /* Begin XCBuildConfiguration section */ 281 | ED409D091D364F38002C50A4 /* Debug */ = { 282 | isa = XCBuildConfiguration; 283 | buildSettings = { 284 | ALWAYS_SEARCH_USER_PATHS = NO; 285 | CLANG_ANALYZER_NONNULL = YES; 286 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 287 | CLANG_CXX_LIBRARY = "libc++"; 288 | CLANG_ENABLE_MODULES = YES; 289 | CLANG_ENABLE_OBJC_ARC = YES; 290 | CLANG_WARN_BOOL_CONVERSION = YES; 291 | CLANG_WARN_CONSTANT_CONVERSION = YES; 292 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 293 | CLANG_WARN_EMPTY_BODY = YES; 294 | CLANG_WARN_ENUM_CONVERSION = YES; 295 | CLANG_WARN_INFINITE_RECURSION = YES; 296 | CLANG_WARN_INT_CONVERSION = YES; 297 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 298 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 299 | CLANG_WARN_UNREACHABLE_CODE = YES; 300 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 301 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 302 | COPY_PHASE_STRIP = NO; 303 | CURRENT_PROJECT_VERSION = 1; 304 | DEBUG_INFORMATION_FORMAT = dwarf; 305 | ENABLE_STRICT_OBJC_MSGSEND = YES; 306 | ENABLE_TESTABILITY = YES; 307 | GCC_C_LANGUAGE_STANDARD = gnu99; 308 | GCC_DYNAMIC_NO_PIC = NO; 309 | GCC_NO_COMMON_BLOCKS = YES; 310 | GCC_OPTIMIZATION_LEVEL = 0; 311 | GCC_PREPROCESSOR_DEFINITIONS = ( 312 | "DEBUG=1", 313 | "$(inherited)", 314 | ); 315 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 316 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 317 | GCC_WARN_UNDECLARED_SELECTOR = YES; 318 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 319 | GCC_WARN_UNUSED_FUNCTION = YES; 320 | GCC_WARN_UNUSED_VARIABLE = YES; 321 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 322 | MTL_ENABLE_DEBUG_INFO = YES; 323 | ONLY_ACTIVE_ARCH = YES; 324 | SDKROOT = iphoneos; 325 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 326 | TARGETED_DEVICE_FAMILY = "1,2"; 327 | VERSIONING_SYSTEM = "apple-generic"; 328 | VERSION_INFO_PREFIX = ""; 329 | }; 330 | name = Debug; 331 | }; 332 | ED409D0A1D364F38002C50A4 /* Release */ = { 333 | isa = XCBuildConfiguration; 334 | buildSettings = { 335 | ALWAYS_SEARCH_USER_PATHS = NO; 336 | CLANG_ANALYZER_NONNULL = YES; 337 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 338 | CLANG_CXX_LIBRARY = "libc++"; 339 | CLANG_ENABLE_MODULES = YES; 340 | CLANG_ENABLE_OBJC_ARC = YES; 341 | CLANG_WARN_BOOL_CONVERSION = YES; 342 | CLANG_WARN_CONSTANT_CONVERSION = YES; 343 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 344 | CLANG_WARN_EMPTY_BODY = YES; 345 | CLANG_WARN_ENUM_CONVERSION = YES; 346 | CLANG_WARN_INFINITE_RECURSION = YES; 347 | CLANG_WARN_INT_CONVERSION = YES; 348 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 349 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 350 | CLANG_WARN_UNREACHABLE_CODE = YES; 351 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 352 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 353 | COPY_PHASE_STRIP = NO; 354 | CURRENT_PROJECT_VERSION = 1; 355 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 356 | ENABLE_NS_ASSERTIONS = NO; 357 | ENABLE_STRICT_OBJC_MSGSEND = YES; 358 | GCC_C_LANGUAGE_STANDARD = gnu99; 359 | GCC_NO_COMMON_BLOCKS = YES; 360 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 361 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 362 | GCC_WARN_UNDECLARED_SELECTOR = YES; 363 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 364 | GCC_WARN_UNUSED_FUNCTION = YES; 365 | GCC_WARN_UNUSED_VARIABLE = YES; 366 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 367 | MTL_ENABLE_DEBUG_INFO = NO; 368 | SDKROOT = iphoneos; 369 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 370 | TARGETED_DEVICE_FAMILY = "1,2"; 371 | VALIDATE_PRODUCT = YES; 372 | VERSIONING_SYSTEM = "apple-generic"; 373 | VERSION_INFO_PREFIX = ""; 374 | }; 375 | name = Release; 376 | }; 377 | ED409D0C1D364F38002C50A4 /* Debug */ = { 378 | isa = XCBuildConfiguration; 379 | buildSettings = { 380 | CLANG_ENABLE_MODULES = YES; 381 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 382 | DEFINES_MODULE = YES; 383 | DYLIB_COMPATIBILITY_VERSION = 1; 384 | DYLIB_CURRENT_VERSION = 1; 385 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 386 | INFOPLIST_FILE = ImageOpenTransition/Info.plist; 387 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 388 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 389 | PRODUCT_BUNDLE_IDENTIFIER = JVID.ImageOpenTransition; 390 | PRODUCT_NAME = "$(TARGET_NAME)"; 391 | SKIP_INSTALL = YES; 392 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 393 | SWIFT_VERSION = 3.0; 394 | }; 395 | name = Debug; 396 | }; 397 | ED409D0D1D364F38002C50A4 /* Release */ = { 398 | isa = XCBuildConfiguration; 399 | buildSettings = { 400 | CLANG_ENABLE_MODULES = YES; 401 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 402 | DEFINES_MODULE = YES; 403 | DYLIB_COMPATIBILITY_VERSION = 1; 404 | DYLIB_CURRENT_VERSION = 1; 405 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 406 | INFOPLIST_FILE = ImageOpenTransition/Info.plist; 407 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 408 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 409 | PRODUCT_BUNDLE_IDENTIFIER = JVID.ImageOpenTransition; 410 | PRODUCT_NAME = "$(TARGET_NAME)"; 411 | SKIP_INSTALL = YES; 412 | SWIFT_VERSION = 3.0; 413 | }; 414 | name = Release; 415 | }; 416 | ED409D0F1D364F38002C50A4 /* Debug */ = { 417 | isa = XCBuildConfiguration; 418 | buildSettings = { 419 | INFOPLIST_FILE = ImageOpenTransitionTests/Info.plist; 420 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 421 | PRODUCT_BUNDLE_IDENTIFIER = JVID.ImageOpenTransitionTests; 422 | PRODUCT_NAME = "$(TARGET_NAME)"; 423 | SWIFT_VERSION = 2.3; 424 | }; 425 | name = Debug; 426 | }; 427 | ED409D101D364F38002C50A4 /* Release */ = { 428 | isa = XCBuildConfiguration; 429 | buildSettings = { 430 | INFOPLIST_FILE = ImageOpenTransitionTests/Info.plist; 431 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 432 | PRODUCT_BUNDLE_IDENTIFIER = JVID.ImageOpenTransitionTests; 433 | PRODUCT_NAME = "$(TARGET_NAME)"; 434 | SWIFT_VERSION = 2.3; 435 | }; 436 | name = Release; 437 | }; 438 | /* End XCBuildConfiguration section */ 439 | 440 | /* Begin XCConfigurationList section */ 441 | ED409CF11D364F38002C50A4 /* Build configuration list for PBXProject "ImageOpenTransition" */ = { 442 | isa = XCConfigurationList; 443 | buildConfigurations = ( 444 | ED409D091D364F38002C50A4 /* Debug */, 445 | ED409D0A1D364F38002C50A4 /* Release */, 446 | ); 447 | defaultConfigurationIsVisible = 0; 448 | defaultConfigurationName = Release; 449 | }; 450 | ED409D0B1D364F38002C50A4 /* Build configuration list for PBXNativeTarget "ImageOpenTransition" */ = { 451 | isa = XCConfigurationList; 452 | buildConfigurations = ( 453 | ED409D0C1D364F38002C50A4 /* Debug */, 454 | ED409D0D1D364F38002C50A4 /* Release */, 455 | ); 456 | defaultConfigurationIsVisible = 0; 457 | defaultConfigurationName = Release; 458 | }; 459 | ED409D0E1D364F38002C50A4 /* Build configuration list for PBXNativeTarget "ImageOpenTransitionTests" */ = { 460 | isa = XCConfigurationList; 461 | buildConfigurations = ( 462 | ED409D0F1D364F38002C50A4 /* Debug */, 463 | ED409D101D364F38002C50A4 /* Release */, 464 | ); 465 | defaultConfigurationIsVisible = 0; 466 | defaultConfigurationName = Release; 467 | }; 468 | /* End XCConfigurationList section */ 469 | }; 470 | rootObject = ED409CEE1D364F38002C50A4 /* Project object */; 471 | } 472 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/project.xcworkspace/xcuserdata/Matan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransition.xcodeproj/project.xcworkspace/xcuserdata/Matan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/project.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransition.xcodeproj/project.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/ImageOpenTransition.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransition.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | ED409CF61D364F38002C50A4 16 | 17 | primary 18 | 19 | 20 | ED409D001D364F38002C50A4 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/ImageOpenTransition.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /ImageOpenTransition.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransition.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | ED409CF61D364F38002C50A4 16 | 17 | primary 18 | 19 | 20 | ED409D001D364F38002C50A4 21 | 22 | primary 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ImageOpenTransition/0.0.1/ImageOpenTransition.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'ImageOpenTransition' 4 | s.version = '0.0.1' 5 | s.summary = 'ImageOpenTransition' 6 | s.homepage = 'https://github.com/mcmatan/ImageOpenTransition' 7 | s.ios.deployment_target = '8.0' 8 | s.platform = :ios, '8.0' 9 | s.license = { 10 | :type => 'MIT', 11 | :file => 'LICENSE' 12 | } 13 | s.author = { 14 | 'YOURNAME' => 'Matan' 15 | } 16 | s.source = { 17 | :git => 'https://github.com/mcmatan/ImageOpenTransition.git', 18 | } 19 | s.framework = "UIKit" 20 | s.source_files = 'ImageOpenTransition*' , 'Vendor/*', 'Resource/*', 'ImageOpenTransition/*' 21 | s.requires_arc = true 22 | 23 | end 24 | 25 | -------------------------------------------------------------------------------- /ImageOpenTransition/Delay.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Delay.swift 3 | // ImageOpenTransition 4 | // 5 | // Created by Antonio Alves on 7/23/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | func afterDelay(seconds: Double, completion: @escaping () -> Void) { 13 | let dispatchTime: DispatchTime = DispatchTime.now() + Double(Int64(seconds * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC) 14 | DispatchQueue.main.asyncAfter(deadline: dispatchTime, execute:completion) 15 | } 16 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageOpenTransition.h: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransition.h 3 | // ImageOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/13/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ImageOpenTransition. 12 | FOUNDATION_EXPORT double ImageOpenTransitionVersionNumber; 13 | 14 | //! Project version string for ImageOpenTransition. 15 | FOUNDATION_EXPORT const unsigned char ImageOpenTransitionVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageScaleTransitionDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransition.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | /* 13 | //////////////////////////////////////////////////////////////////////////////////////////////////////// 14 | 15 | 16 | * ImageScaleTransitionObjects should be inserted in an array, first is lowest as subview, and the last object will be the top subview 17 | 18 | * UIImageView - view to translate from, has to be: 19 | imageView.contentMode = UIViewContentMode.ScaleAspectFill 20 | imageView.clipsToBounds = true 21 | 22 | 23 | //////////////////////////////////////////////////////////////////////////////////////////////////////// 24 | */ 25 | 26 | public class ImageScaleTransitionDelegate : NSObject , UIViewControllerTransitioningDelegate, UINavigationControllerDelegate { 27 | var transitionObjects : Array! 28 | var usingNavigationController : Bool 29 | var duration: TimeInterval 30 | public var fadeOutAnimationDuration : TimeInterval = 0.1 //After animation happends, this is the fade out of the image copy. 31 | public var fadeOutAnimationDelayPresent : TimeInterval = 0.1 //After animation happends, this is the delay before fade out of the image, use if original image takes time to load. 32 | public var fadeOutAnimationDelayDismiss : TimeInterval = 0.1 //After animation happends, this is the delay before fade out of the image, use if original image takes time to load. 33 | public var fromViewControllerScaleAnimation : CGFloat = 1.0 //When animation opens viewController, the view has a scale animation to make it zoom in. Make 1.0 for turning off. 34 | 35 | public init(transitionObjects : Array, usingNavigationController : Bool, duration: TimeInterval) { 36 | self.transitionObjects = transitionObjects 37 | self.usingNavigationController = usingNavigationController 38 | self.duration = duration 39 | } 40 | 41 | public final func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 42 | return self.createImageScaleTransitionPresent() 43 | } 44 | 45 | public final func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 46 | return self.createImageScaleTransitionDismiss() 47 | } 48 | 49 | //MARK: Navigation controller transition 50 | public final func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationControllerOperation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 51 | 52 | switch operation { 53 | case .pop: 54 | return self.createImageScaleTransitionDismiss() 55 | case .push: 56 | return self.createImageScaleTransitionPresent() 57 | case .none: 58 | return nil 59 | } 60 | } 61 | 62 | internal func createImageScaleTransitionDismiss()->ImageScaleTransitionDismiss { 63 | return ImageScaleTransitionDismiss(transitionObjects: self.transitionObjects, usingNavigationController: self.usingNavigationController, duration : duration, fadeOutAnimationDuration : self.fadeOutAnimationDuration, fadeOutAnimationDelay : self.fadeOutAnimationDelayDismiss) 64 | } 65 | 66 | internal func createImageScaleTransitionPresent()->ImageScaleTransitionPresent { 67 | return ImageScaleTransitionPresent(transitionObjects: self.transitionObjects, duration : duration, fadeOutAnimationDuration : self.fadeOutAnimationDuration, fadeOutAnimationDelay: self.fadeOutAnimationDelayPresent, fromViewControllerScaleAnimation : self.fromViewControllerScaleAnimation, usingNavigationController: self.usingNavigationController) 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageScaleTransitionDismiss.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionDismiss.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ImageScaleTransitionDismiss : NSObject , UIViewControllerAnimatedTransitioning { 13 | let animationOptions = UIViewAnimationOptions.curveEaseInOut 14 | var duration : TimeInterval! 15 | var transitionObjects: Array! 16 | var usingNavigationController : Bool 17 | let fadeOutAnimationDuration : TimeInterval 18 | let alphaZero : CGFloat = 0 19 | let fadeOutAnimationDelay : TimeInterval 20 | 21 | init(transitionObjects : Array, usingNavigationController : Bool, duration: TimeInterval, fadeOutAnimationDuration : TimeInterval, fadeOutAnimationDelay : TimeInterval) { 22 | self.transitionObjects = transitionObjects 23 | self.usingNavigationController = usingNavigationController 24 | self.fadeOutAnimationDuration = fadeOutAnimationDuration 25 | self.fadeOutAnimationDelay = fadeOutAnimationDelay 26 | super.init() 27 | self.duration = duration 28 | } 29 | 30 | @objc func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 31 | return self.duration 32 | } 33 | 34 | @objc func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 35 | let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) 36 | let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) 37 | let containerView = transitionContext.containerView 38 | 39 | if self.usingNavigationController == true { 40 | containerView.addSubview((toViewController!.view)!) 41 | } 42 | 43 | fromViewController!.view.alpha = 1 44 | containerView.addSubview((fromViewController!.view)!) 45 | 46 | for transitionObject in self.transitionObjects { 47 | self.animateTransitionObject(transitionObject: transitionObject, fromViewController: fromViewController!, toViewController: toViewController!, containerView: containerView) 48 | } 49 | 50 | UIView.animate(withDuration: self.duration, animations: { 51 | fromViewController?.view.alpha = self.alphaZero 52 | }, completion: nil) 53 | 54 | afterDelay(seconds: self.duration) { 55 | UIView.animate(withDuration: self.duration/2, animations: { 56 | toViewController?.view.alpha = 1.0 57 | }, completion: { (finish) in 58 | transitionContext.completeTransition(true) 59 | }) 60 | } 61 | } 62 | 63 | func animateTransitionObject(transitionObject : ImageScaleTransitionObject, fromViewController : UIViewController, toViewController : UIViewController, containerView : UIView) { 64 | 65 | let viewEndCenter = fromViewController.view!.convert(transitionObject.viewToAnimateFrom.center, to: containerView) 66 | 67 | transitionObject.viewToAnimateTo.isHidden = true 68 | transitionObject.viewToAnimateFrom.isHidden = true 69 | 70 | _ = transitionObject.duration 71 | 72 | let viewToAnimateFromCopy = self.getImageFromImageScaleTransitionObject(transitionObject: transitionObject) 73 | viewToAnimateFromCopy.frame = self.startFrame(transitionObject: transitionObject, withNavigationController: self.usingNavigationController, controllerAnimatingFrom: fromViewController ,controllerAnimatingTo: toViewController) 74 | let viewEndFrame = self.endFrame(transitionObject: transitionObject, containerView: containerView).frame 75 | if self.endFrame(transitionObject: transitionObject, containerView: containerView).hasSet == false { 76 | viewToAnimateFromCopy.isHidden = true 77 | } 78 | 79 | 80 | let viewHasRoundedCorders = transitionObject.viewToAnimateFrom.layer.cornerRadius == transitionObject.viewToAnimateFrom.frame.size.height/2; 81 | let scaleSize = viewEndFrame.height/viewToAnimateFromCopy.frame.height 82 | if (viewHasRoundedCorders == true) { 83 | viewToAnimateFromCopy.layer.cornerRadius = viewToAnimateFromCopy.frame.size.height/2 84 | } 85 | 86 | containerView.addSubview(viewToAnimateFromCopy) 87 | 88 | UIView.animate(withDuration: transitionObject.duration, delay: 0, options: animationOptions, animations: { 89 | 90 | if viewHasRoundedCorders == true { 91 | viewToAnimateFromCopy.center = viewEndCenter 92 | viewToAnimateFromCopy.transform = CGAffineTransform(scaleX: scaleSize, y: scaleSize) 93 | } else { 94 | viewToAnimateFromCopy.frame = viewEndFrame 95 | } 96 | }) { (finished) in} 97 | 98 | 99 | afterDelay(seconds: (transitionObject.duration + self.fadeOutAnimationDelay)) { 100 | viewToAnimateFromCopy.removeFromSuperview() 101 | transitionObject.viewToAnimateTo.isHidden = false 102 | transitionObject.viewToAnimateFrom?.isHidden = false 103 | } 104 | } 105 | 106 | 107 | func getImageFromImageScaleTransitionObject(transitionObject : ImageScaleTransitionObject)->UIImageView { 108 | var viewToAnimateFromCopy : UIImageView! 109 | if let isImageInViewToAnimateFrom = transitionObject.viewToAnimateFrom.image { 110 | viewToAnimateFromCopy = UIImageView(image: isImageInViewToAnimateFrom.copyMe()) 111 | viewToAnimateFromCopy.contentMode = transitionObject.viewToAnimateFrom.contentMode 112 | } 113 | 114 | if let isImageInViewToAnimateTo = transitionObject.viewToAnimateTo.image { 115 | viewToAnimateFromCopy = UIImageView(image: isImageInViewToAnimateTo.copyMe()) 116 | viewToAnimateFromCopy.contentMode = transitionObject.viewToAnimateTo.contentMode 117 | } 118 | 119 | assert(viewToAnimateFromCopy != nil, "Trying to animate with no Image") 120 | 121 | viewToAnimateFromCopy.clipsToBounds = true 122 | 123 | return viewToAnimateFromCopy 124 | } 125 | 126 | func startFrame(transitionObject : ImageScaleTransitionObject, withNavigationController : Bool, controllerAnimatingFrom : UIViewController, controllerAnimatingTo : UIViewController)->CGRect { 127 | var frame = transitionObject.viewToAnimateTo.frame 128 | if withNavigationController == true && controllerAnimatingTo.navigationController?.navigationBar.isTranslucent == false { 129 | frame.origin.y += controllerAnimatingFrom.heightOfNavigationControllerAndStatusAtViewController() 130 | } 131 | return frame 132 | 133 | } 134 | 135 | func endFrame(transitionObject : ImageScaleTransitionObject, containerView : UIView)->(frame : CGRect , hasSet : Bool) { 136 | var viewEndFrame = transitionObject.viewToAnimateFrom.frame 137 | if transitionObject.viewToAnimateFrom.superview != nil { 138 | viewEndFrame = transitionObject.viewToAnimateFrom.superview!.convert(transitionObject.viewToAnimateFrom.frame, to: containerView) 139 | return (viewEndFrame, true) 140 | } else { 141 | print("Error: The view you are trying to animate to in dissmess, has no super view") 142 | } 143 | return (viewEndFrame, false) 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageScaleTransitionExntentions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionUtils.swift 3 | // ImageOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/17/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIViewController { 13 | 14 | func heightOfNavigationControllerAndStatusAtViewController()-> CGFloat { 15 | var height : CGFloat = 0 16 | if let isNavigationController = self.navigationController { 17 | height += isNavigationController.navigationBar.frame.height; 18 | } 19 | 20 | 21 | if UIApplication.shared.isStatusBarHidden == false { 22 | height += UIApplication.shared.statusBarFrame.height 23 | } 24 | 25 | 26 | return height 27 | } 28 | } 29 | 30 | extension UIImage { 31 | 32 | func copyMe()->UIImage { 33 | let newCgIm = self.cgImage!.copy() 34 | let newImage = UIImage(cgImage: newCgIm!, scale: self.scale, orientation: self.imageOrientation) 35 | return newImage 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageScaleTransitionObject.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionObject.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | //Should add init for only frame, and check if all works. 13 | 14 | public class ImageScaleTransitionObject : NSObject { 15 | internal var viewToAnimateFrom : UIImageView! 16 | internal var frameToAnimateTo : CGRect? 17 | internal var viewToAnimateTo :UIImageView // This is optional, if you do require this, your view will be hidden/unhidden to suite the transition better. 18 | internal var duration : TimeInterval 19 | 20 | 21 | public init(viewToAnimateFrom : UIImageView, viewToAnimateTo: UIImageView, duration : TimeInterval, frameToAnimateTo : CGRect) { 22 | self.viewToAnimateFrom = viewToAnimateFrom 23 | self.frameToAnimateTo = frameToAnimateTo 24 | self.viewToAnimateTo = viewToAnimateTo 25 | self.duration = duration 26 | } 27 | 28 | public init(viewToAnimateFrom : UIImageView, viewToAnimateTo: UIImageView, duration : TimeInterval) { 29 | self.viewToAnimateFrom = viewToAnimateFrom 30 | self.viewToAnimateTo = viewToAnimateTo 31 | self.duration = duration 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ImageOpenTransition/ImageScaleTransitionPresent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionPresent.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ImageScaleTransitionPresent : NSObject , UIViewControllerAnimatedTransitioning { 13 | let animationOptions = UIViewAnimationOptions.curveEaseInOut 14 | var duration : TimeInterval! 15 | var transitionObjects: Array! 16 | let fadeOutAnimationDuration : TimeInterval 17 | let alphaZero : CGFloat = 0 18 | let fadeOutAnimationDelay : TimeInterval 19 | let fromViewControllerScaleAnimation : CGFloat 20 | let usingNavigationController : Bool 21 | 22 | init(transitionObjects : Array, duration: TimeInterval, fadeOutAnimationDuration : TimeInterval, fadeOutAnimationDelay : TimeInterval, fromViewControllerScaleAnimation : CGFloat, usingNavigationController : Bool) { 23 | self.transitionObjects = transitionObjects 24 | self.fadeOutAnimationDuration = fadeOutAnimationDuration 25 | self.fadeOutAnimationDelay = fadeOutAnimationDelay 26 | self.fromViewControllerScaleAnimation = fromViewControllerScaleAnimation 27 | self.usingNavigationController = usingNavigationController 28 | super.init() 29 | self.duration = duration 30 | } 31 | 32 | @objc func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 33 | return self.duration 34 | } 35 | 36 | @objc func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 37 | let fromViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.from) 38 | let toViewController = transitionContext.viewController(forKey: UITransitionContextViewControllerKey.to) 39 | let containerView = transitionContext.containerView 40 | 41 | toViewController!.view.alpha = alphaZero 42 | containerView.addSubview((toViewController!.view)!) 43 | 44 | if self.usingNavigationController == true && toViewController?.navigationController?.navigationBar.isTranslucent == false { 45 | toViewController!.view.frame.origin.y += (toViewController?.heightOfNavigationControllerAndStatusAtViewController())! 46 | toViewController!.view.frame.size.height -= (toViewController?.navigationController?.navigationBar.frame.size.height)! 47 | } 48 | 49 | for transitionObject in self.transitionObjects { 50 | self.animateTransitionObject(transitionObject: transitionObject, fromViewController: fromViewController!, toViewController: toViewController!, containerView: containerView) 51 | } 52 | 53 | let scaleUp = CGAffineTransform(scaleX: self.fromViewControllerScaleAnimation, y: self.fromViewControllerScaleAnimation); 54 | let scaleDown = CGAffineTransform(scaleX: 1.0, y: 1.0); 55 | 56 | UIView.animate(withDuration: self.duration, animations: { 57 | toViewController?.view.alpha = 1.0 58 | fromViewController?.view.transform = scaleUp 59 | }, completion: { (finish) in 60 | fromViewController?.view.transform = scaleDown 61 | transitionContext.completeTransition(true) 62 | }) 63 | 64 | } 65 | 66 | 67 | func animateTransitionObject(transitionObject : ImageScaleTransitionObject, fromViewController : UIViewController, toViewController : UIViewController, containerView : UIView) { 68 | 69 | transitionObject.viewToAnimateTo.isHidden = true 70 | transitionObject.viewToAnimateFrom.isHidden = true 71 | 72 | 73 | var viewEndFrame = toViewController.view!.convert(transitionObject.viewToAnimateTo.frame, to: containerView) 74 | if let isFrameToAnimateTo = transitionObject.frameToAnimateTo { 75 | viewEndFrame = isFrameToAnimateTo 76 | } 77 | 78 | 79 | 80 | assert(transitionObject.viewToAnimateFrom.image != nil, "Trying to animate with no Image") 81 | 82 | let viewToAnimateFromCopy = UIImageView(image: transitionObject.viewToAnimateFrom.image!.copyMe()) 83 | viewToAnimateFromCopy.contentMode = transitionObject.viewToAnimateFrom.contentMode 84 | 85 | viewToAnimateFromCopy.frame = transitionObject.viewToAnimateFrom.superview!.convert(transitionObject.viewToAnimateFrom.frame, to: containerView) 86 | 87 | viewToAnimateFromCopy.clipsToBounds = true 88 | 89 | let viewHasRoundedCorders = transitionObject.viewToAnimateFrom.layer.cornerRadius == transitionObject.viewToAnimateFrom.frame.size.height/2; 90 | let scaleSize = viewEndFrame.height/viewToAnimateFromCopy.frame.height 91 | if (viewHasRoundedCorders == true) { 92 | viewToAnimateFromCopy.layer.cornerRadius = viewToAnimateFromCopy.frame.size.height/2 93 | } 94 | 95 | containerView.addSubview(viewToAnimateFromCopy) 96 | 97 | UIView.animate(withDuration: transitionObject.duration, delay: 0, options: animationOptions, animations: { 98 | 99 | if viewHasRoundedCorders == true { 100 | viewToAnimateFromCopy.transform = CGAffineTransform(scaleX: scaleSize, y: scaleSize) 101 | viewToAnimateFromCopy.center = CGPoint(x: viewEndFrame.origin.x + (viewEndFrame.width/2), y: viewEndFrame.origin.y + (viewEndFrame.height/2)) 102 | } else { 103 | viewToAnimateFromCopy.frame = viewEndFrame 104 | } 105 | }) { (finished) in} 106 | 107 | afterDelay(seconds: (transitionObject.duration + fadeOutAnimationDelay)) { 108 | viewToAnimateFromCopy.removeFromSuperview() 109 | transitionObject.viewToAnimateTo.isHidden = false 110 | transitionObject.viewToAnimateFrom?.isHidden = false 111 | } 112 | 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /ImageOpenTransition/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransition/crossroads-destiny-clip-4x3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransition/crossroads-destiny-clip-4x3.jpg -------------------------------------------------------------------------------- /ImageOpenTransition/windows-xp-background-image-jpg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransition/windows-xp-background-image-jpg.jpg -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/project.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/project.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/ImageOpenTransitionExampleProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransitionExampleProject.xcscheme 8 | 9 | orderHint 10 | 4 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | ED409D6F1D377006002C50A4 16 | 17 | primary 18 | 19 | 20 | ED409D831D377006002C50A4 21 | 22 | primary 23 | 24 | 25 | ED409D8E1D377006002C50A4 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/ImageOpenTransitionExampleProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransitionExampleProject.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | ED409D6F1D377006002C50A4 16 | 17 | primary 18 | 19 | 20 | ED409D831D377006002C50A4 21 | 22 | primary 23 | 24 | 25 | ED409D8E1D377006002C50A4 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/Matan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/Matan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/Matan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject.xcworkspace/xcuserdata/matan.cohen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // ImageOpenTransitionExampleProject 4 | // 5 | // Created by Matan Cohen on 7/14/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | } 33 | ], 34 | "info" : { 35 | "version" : 1, 36 | "author" : "xcode" 37 | } 38 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 68 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/DetailsViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailsViewController.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class DetailsViewController : UIViewController { 13 | @IBOutlet weak var imgCover: UIImageView! 14 | @IBOutlet weak var imgAvatar: UIImageView! 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | } 20 | 21 | 22 | @IBAction func btnDoneTaped(sender: AnyObject) { 23 | if let isNavigationController = self.navigationController { 24 | isNavigationController.popViewController(animated: true) 25 | } else { 26 | self.dismiss(animated: true, completion: nil) 27 | } 28 | } 29 | 30 | 31 | override func viewWillDisappear(_ animated: Bool) { 32 | super.viewWillDisappear(animated) 33 | } 34 | 35 | override func viewWillAppear(_ animated: Bool) { 36 | super.viewWillAppear(animated) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/NoStoryBoardViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NoStoryBoardViewController.swift 3 | // ImageOpenTransitionExampleProject 4 | // 5 | // Created by Matan Cohen on 7/20/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class NoStoryBoardViewController : UIViewController { 13 | var imgCover: UIImageView! 14 | var imgAvatar: UIImageView! 15 | 16 | override func loadView() { 17 | super.loadView() 18 | 19 | let avatarImageSize : CGFloat = 60 20 | let avatarYPoint : CGFloat = 160 21 | let frameToAnimateToAvatar = CGRect(x:(self.view.frame.size.width/2) - (avatarImageSize/2),y: avatarYPoint,width: avatarImageSize,height: avatarImageSize) 22 | let frameToAnimateToCover = CGRect(x: 0,y: 0,width: self.view.frame.size.width , height: 200) 23 | 24 | self.imgCover = UIImageView() 25 | self.imgCover.image = UIImage(named: "windows-xp-background-image-jpg.jpg") 26 | self.imgCover.contentMode = UIViewContentMode.scaleAspectFill 27 | self.imgCover.clipsToBounds = true 28 | self.imgCover.frame = frameToAnimateToCover 29 | self.view.addSubview(self.imgCover) 30 | 31 | self.imgAvatar = UIImageView() 32 | self.imgAvatar.image = UIImage(named: "crossroads-destiny-clip-4x3.jpg") 33 | self.imgAvatar.frame = frameToAnimateToAvatar 34 | self.imgAvatar.contentMode = UIViewContentMode.scaleAspectFill 35 | self.imgAvatar.clipsToBounds = true 36 | self.view.addSubview(self.imgAvatar) 37 | 38 | self.view.backgroundColor = UIColor.white 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // ImageOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/13/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ImageOpenTransition 11 | 12 | class ViewController: UIViewController , UITableViewDelegate, UITableViewDataSource, UINavigationControllerDelegate{ 13 | @IBOutlet weak var tableView: UITableView! 14 | var imageScalePresentTransition :ImageScaleTransitionDelegate? = nil 15 | var noStoryBoardVC = NoStoryBoardViewController() 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | // Do any additional setup after loading the view, typically from a nib. 20 | self.transitioningDelegate = self.imageScalePresentTransition 21 | } 22 | 23 | override func didReceiveMemoryWarning() { 24 | super.didReceiveMemoryWarning() 25 | // Dispose of any resources that can be recreated. 26 | } 27 | 28 | override func viewDidAppear(_ animated: Bool) { 29 | super.viewDidAppear(animated) 30 | 31 | } 32 | 33 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 34 | let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 35 | if let isCell = cell { 36 | return isCell 37 | } else { 38 | assert(true, "Cell is nil") 39 | return UITableViewCell() 40 | } 41 | } 42 | 43 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 44 | return 10 45 | } 46 | 47 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 48 | 49 | var usingNavigationController = false 50 | if let _ = self.navigationController { 51 | usingNavigationController = true 52 | } 53 | 54 | let cell = tableView.cellForRow(at: indexPath) as! ViewControllerCell 55 | 56 | 57 | //With StoryBoard: 58 | self.transitionWithStoryBoard(cell: cell, usingNavigationController: usingNavigationController) 59 | 60 | 61 | //No StoryBoard: 62 | //self.transitionNoStoryBoard(cell, usingNavigationController: usingNavigationController) 63 | 64 | self.tableView.deselectRow(at: indexPath, animated: true) 65 | 66 | } 67 | 68 | 69 | func transitionWithStoryBoard(cell : ViewControllerCell, usingNavigationController : Bool) { 70 | let storyboard = UIStoryboard(name: "Main", bundle: nil) 71 | let vc = storyboard.instantiateViewController(withIdentifier: "DetailsViewController") as! DetailsViewController 72 | vc.loadView() 73 | 74 | let avatarImageSize : CGFloat = 60 75 | let avatarYPoint : CGFloat = 160 76 | let frameToAnimateToAvatar = CGRect(x: (self.view.frame.size.width/2) - (avatarImageSize/2), y: avatarYPoint, width: avatarImageSize, height: avatarImageSize) 77 | let frameToAnimateToCover = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 200) 78 | 79 | let transitionObjectAvatar = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgAvater, viewToAnimateTo: vc.imgAvatar, duration: 0.4, frameToAnimateTo: frameToAnimateToAvatar) 80 | let transitionObjectCover = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgCover, viewToAnimateTo: vc.imgCover, duration: 0.4, frameToAnimateTo: frameToAnimateToCover) 81 | 82 | self.imageScalePresentTransition = ImageScaleTransitionDelegate(transitionObjects: [transitionObjectCover ,transitionObjectAvatar], usingNavigationController: usingNavigationController, duration: 0.4) 83 | 84 | if usingNavigationController == true { 85 | self.navigationController!.delegate = self.imageScalePresentTransition 86 | self.navigationController!.pushViewController(vc, animated: true) 87 | } else { 88 | vc.transitioningDelegate = self.imageScalePresentTransition; 89 | vc.modalPresentationStyle = UIModalPresentationStyle.custom; 90 | self.present(vc, animated: true, completion: nil) 91 | } 92 | 93 | } 94 | 95 | func transitionNoStoryBoard(cell : ViewControllerCell, usingNavigationController : Bool) { 96 | self.noStoryBoardVC = NoStoryBoardViewController() 97 | self.noStoryBoardVC.loadView() 98 | 99 | let transitionObjectAvatar = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgAvater, viewToAnimateTo: self.noStoryBoardVC.imgAvatar, duration: 0.4) 100 | let transitionObjectCover = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgCover, viewToAnimateTo: self.noStoryBoardVC.imgCover, duration: 0.4) 101 | self.imageScalePresentTransition = ImageScaleTransitionDelegate(transitionObjects: [transitionObjectCover ,transitionObjectAvatar], usingNavigationController: usingNavigationController, duration: 0.4) 102 | 103 | if usingNavigationController == true { 104 | self.navigationController!.delegate = self.imageScalePresentTransition 105 | self.navigationController!.pushViewController(self.noStoryBoardVC, animated: true) 106 | } else { 107 | self.noStoryBoardVC.transitioningDelegate = self.imageScalePresentTransition; 108 | self.noStoryBoardVC.modalPresentationStyle = UIModalPresentationStyle.custom; 109 | self.present(self.noStoryBoardVC, animated: true, completion: nil) 110 | } 111 | } 112 | 113 | 114 | 115 | } 116 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/ViewControllerCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewControllerCell.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ViewControllerCell : UITableViewCell { 13 | 14 | @IBOutlet weak var imgAvater: UIImageView! 15 | @IBOutlet weak var imgCover: UIImageView! 16 | 17 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/crossroads-destiny-clip-4x3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/crossroads-destiny-clip-4x3.jpg -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/windows-xp-background-image-jpg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProject/windows-xp-background-image-jpg.jpg -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProjectTests/ImageOpenTransitionExampleProjectTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransitionExampleProjectTests.swift 3 | // ImageOpenTransitionExampleProjectTests 4 | // 5 | // Created by Matan Cohen on 7/14/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import ImageOpenTransitionExampleProject 11 | 12 | class ImageOpenTransitionExampleProjectTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measureBlock { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProjectUITests/ImageOpenTransitionExampleProjectUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransitionExampleProjectUITests.swift 3 | // ImageOpenTransitionExampleProjectUITests 4 | // 5 | // Created by Matan Cohen on 7/14/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class ImageOpenTransitionExampleProjectUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/ImageOpenTransitionExampleProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'ImageOpenTransitionExampleProject' do 5 | # Comment this line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | pod 'ImageOpenTransition', :path => '../' 9 | 10 | # Pods for ImageOpenTransitionExampleProject 11 | 12 | target 'ImageOpenTransitionExampleProjectTests' do 13 | inherit! :search_paths 14 | # Pods for testing 15 | end 16 | 17 | target 'ImageOpenTransitionExampleProjectUITests' do 18 | inherit! :search_paths 19 | # Pods for testing 20 | end 21 | 22 | end 23 | 24 | post_install do |installer| 25 | installer.pods_project.targets.each do |target| 26 | target.build_configurations.each do |config| 27 | config.build_settings['SWIFT_VERSION'] = '3.0' 28 | end 29 | end 30 | end -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ImageOpenTransition (0.1.5) 3 | 4 | DEPENDENCIES: 5 | - ImageOpenTransition (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | ImageOpenTransition: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | ImageOpenTransition: 2e93cb8f92267b50631af1037b13ddd87db6a43b 13 | 14 | PODFILE CHECKSUM: 7f6616aeddedb9f4b9a62c76e4c5c56dba945552 15 | 16 | COCOAPODS: 1.1.0.rc.2 17 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | 3 | s.name = 'ImageOpenTransition' 4 | s.version = '0.0.1' 5 | s.summary = 'ImageOpenTransition' 6 | s.homepage = 'https://github.com/mcmatan/ImageOpenTransition' 7 | s.ios.deployment_target = '8.0' 8 | s.platform = :ios, '8.0' 9 | s.license = { 10 | :type => 'MIT', 11 | :file => 'LICENSE' 12 | } 13 | s.author = { 14 | 'YOURNAME' => 'Matan' 15 | } 16 | s.source = { 17 | :git => 'https://github.com/mcmatan/ImageOpenTransition.git', 18 | } 19 | s.framework = "UIKit" 20 | s.source_files = 'ImageOpenTransition*' , 'Vendor/*', 'Resource/*', 'ImageOpenTransition/*' 21 | s.requires_arc = true 22 | 23 | end 24 | 25 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageOpenTransition.h: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransition.h 3 | // ImageOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/13/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for ImageOpenTransition. 12 | FOUNDATION_EXPORT double ImageOpenTransitionVersionNumber; 13 | 14 | //! Project version string for ImageOpenTransition. 15 | FOUNDATION_EXPORT const unsigned char ImageOpenTransitionVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageScaleTransitionDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransition.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | /* 13 | //////////////////////////////////////////////////////////////////////////////////////////////////////// 14 | 15 | 16 | * ImageScaleTransitionObjects should be inserted in an array, first is lowest as subview, and the last object will be the top subview 17 | 18 | * UIImageView - view to translate from, has to be: 19 | imageView.contentMode = UIViewContentMode.ScaleAspectFill 20 | imageView.clipsToBounds = true 21 | 22 | 23 | //////////////////////////////////////////////////////////////////////////////////////////////////////// 24 | */ 25 | 26 | public class ImageScaleTransitionDelegate : NSObject , UIViewControllerTransitioningDelegate, UINavigationControllerDelegate { 27 | var transitionObjects : Array! 28 | var usingNavigationController : Bool 29 | var duration: NSTimeInterval 30 | public var fadeOutAnimationDuration : NSTimeInterval = 0.1 //After animation happends, this is the fade out of the image copy. 31 | public var fadeOutAnimationDelayPresent : NSTimeInterval = 0.1 //After animation happends, this is the delay before fade out of the image, use if original image takes time to load. 32 | public var fadeOutAnimationDelayDismiss : NSTimeInterval = 0.1 //After animation happends, this is the delay before fade out of the image, use if original image takes time to load. 33 | public var fromViewControllerScaleAnimation : CGFloat = 1.0 //When animation opens viewController, the view has a scale animation to make it zoom in. Make 1.0 for turning off. 34 | 35 | public init(transitionObjects : Array, usingNavigationController : Bool, duration: NSTimeInterval) { 36 | self.transitionObjects = transitionObjects 37 | self.usingNavigationController = usingNavigationController 38 | self.duration = duration 39 | } 40 | 41 | public final func animationControllerForPresentedController(presented: UIViewController, presentingController presenting: UIViewController, sourceController source: UIViewController) -> UIViewControllerAnimatedTransitioning? { 42 | return self.createImageScaleTransitionPresent() 43 | } 44 | 45 | public final func animationControllerForDismissedController(dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { 46 | return self.createImageScaleTransitionDismiss() 47 | } 48 | 49 | //MARK: Navigation controller transition 50 | public final func navigationController(navigationController: UINavigationController, animationControllerForOperation operation: UINavigationControllerOperation, fromViewController fromVC: UIViewController, toViewController toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? { 51 | 52 | switch operation { 53 | case .Pop: 54 | return self.createImageScaleTransitionDismiss() 55 | case .Push: 56 | return self.createImageScaleTransitionPresent() 57 | case .None: 58 | return nil 59 | } 60 | } 61 | 62 | internal func createImageScaleTransitionDismiss()->ImageScaleTransitionDismiss { 63 | return ImageScaleTransitionDismiss(transitionObjects: self.transitionObjects, usingNavigationController: self.usingNavigationController, duration : duration, fadeOutAnimationDuration : self.fadeOutAnimationDuration, fadeOutAnimationDelay : self.fadeOutAnimationDelayDismiss) 64 | } 65 | 66 | internal func createImageScaleTransitionPresent()->ImageScaleTransitionPresent { 67 | return ImageScaleTransitionPresent(transitionObjects: self.transitionObjects, duration : duration, fadeOutAnimationDuration : self.fadeOutAnimationDuration, fadeOutAnimationDelay: self.fadeOutAnimationDelayPresent, fromViewControllerScaleAnimation : self.fromViewControllerScaleAnimation, usingNavigationController: self.usingNavigationController) 68 | } 69 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageScaleTransitionDismiss.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionDismiss.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ImageScaleTransitionDismiss : NSObject , UIViewControllerAnimatedTransitioning { 13 | let animationOptions = UIViewAnimationOptions.CurveEaseInOut 14 | var duration : NSTimeInterval! 15 | var transitionObjects: Array! 16 | var usingNavigationController : Bool 17 | let fadeOutAnimationDuration : NSTimeInterval 18 | let alphaZero : CGFloat = 0 19 | let fadeOutAnimationDelay : NSTimeInterval 20 | 21 | init(transitionObjects : Array, usingNavigationController : Bool, duration: NSTimeInterval, fadeOutAnimationDuration : NSTimeInterval, fadeOutAnimationDelay : NSTimeInterval) { 22 | self.transitionObjects = transitionObjects 23 | self.usingNavigationController = usingNavigationController 24 | self.fadeOutAnimationDuration = fadeOutAnimationDuration 25 | self.fadeOutAnimationDelay = fadeOutAnimationDelay 26 | super.init() 27 | self.duration = duration 28 | } 29 | 30 | @objc func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { 31 | return self.duration 32 | } 33 | 34 | @objc func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 35 | let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) 36 | let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) 37 | let containerView = transitionContext.containerView() 38 | 39 | if self.usingNavigationController == true { 40 | containerView!.addSubview((toViewController!.view)!) 41 | } 42 | 43 | fromViewController!.view.alpha = 1 44 | containerView!.addSubview((fromViewController!.view)!) 45 | 46 | for transitionObject in self.transitionObjects { 47 | self.animateTransitionObject(transitionObject, fromViewController: fromViewController!, toViewController: toViewController!, containerView: containerView!) 48 | } 49 | 50 | UIView.animateWithDuration(self.duration, animations: { 51 | fromViewController?.view.alpha = self.alphaZero 52 | }, completion: nil) 53 | 54 | let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(self.duration * Double(NSEC_PER_SEC))) 55 | dispatch_after(delayTime, dispatch_get_main_queue()) { 56 | 57 | UIView.animateWithDuration(self.duration/2, animations: { 58 | toViewController?.view.alpha = 1.0 59 | }, completion: { (finish) in 60 | transitionContext.completeTransition(true) 61 | }) 62 | } 63 | } 64 | 65 | func animateTransitionObject(transitionObject : ImageScaleTransitionObject, fromViewController : UIViewController, toViewController : UIViewController, containerView : UIView) { 66 | 67 | let viewEndCenter = fromViewController.view!.convertPoint(transitionObject.viewToAnimateFrom.center, toView: containerView) 68 | 69 | transitionObject.viewToAnimateTo.hidden = true 70 | transitionObject.viewToAnimateFrom.hidden = true 71 | 72 | let animationDuration = transitionObject.duration 73 | 74 | var viewToAnimateFromCopy = self.getImageFromImageScaleTransitionObject(transitionObject) 75 | viewToAnimateFromCopy.frame = self.startFrame(transitionObject, withNavigationController: self.usingNavigationController, controllerAnimatingFrom: fromViewController ,controllerAnimatingTo: toViewController) 76 | var viewEndFrame = self.endFrame(transitionObject, containerView: containerView).frame 77 | if self.endFrame(transitionObject, containerView: containerView).hasSet == false { 78 | viewToAnimateFromCopy.hidden = true 79 | } 80 | 81 | 82 | let viewHasRoundedCorders = transitionObject.viewToAnimateFrom.layer.cornerRadius == transitionObject.viewToAnimateFrom.frame.size.height/2; 83 | let scaleSize = viewEndFrame.height/viewToAnimateFromCopy.frame.height 84 | if (viewHasRoundedCorders == true) { 85 | viewToAnimateFromCopy.layer.cornerRadius = viewToAnimateFromCopy.frame.size.height/2 86 | } 87 | 88 | containerView.addSubview(viewToAnimateFromCopy) 89 | 90 | UIView.animateWithDuration(transitionObject.duration, delay: 0, options: animationOptions, animations: { 91 | 92 | if viewHasRoundedCorders == true { 93 | viewToAnimateFromCopy.center = viewEndCenter 94 | viewToAnimateFromCopy.transform = CGAffineTransformMakeScale(scaleSize, scaleSize) 95 | } else { 96 | viewToAnimateFromCopy.frame = viewEndFrame 97 | } 98 | }) { (finished) in} 99 | 100 | let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64((transitionObject.duration + self.fadeOutAnimationDelay) * Double(NSEC_PER_SEC))) 101 | dispatch_after(delayTime, dispatch_get_main_queue()) { 102 | 103 | viewToAnimateFromCopy.removeFromSuperview() 104 | transitionObject.viewToAnimateTo.hidden = false 105 | transitionObject.viewToAnimateFrom?.hidden = false 106 | 107 | 108 | } 109 | } 110 | 111 | 112 | func getImageFromImageScaleTransitionObject(transitionObject : ImageScaleTransitionObject)->UIImageView { 113 | var viewToAnimateFromCopy : UIImageView! 114 | if let isImageInViewToAnimateFrom = transitionObject.viewToAnimateFrom.image { 115 | viewToAnimateFromCopy = UIImageView(image: isImageInViewToAnimateFrom.copyMe()) 116 | viewToAnimateFromCopy.contentMode = UIViewContentMode.ScaleAspectFill 117 | } 118 | 119 | if let isImageInViewToAnimateTo = transitionObject.viewToAnimateTo.image { 120 | viewToAnimateFromCopy = UIImageView(image: isImageInViewToAnimateTo.copyMe()) 121 | viewToAnimateFromCopy.contentMode = UIViewContentMode.ScaleAspectFill 122 | } 123 | 124 | assert(viewToAnimateFromCopy != nil, "Trying to animate with no Image") 125 | 126 | viewToAnimateFromCopy.clipsToBounds = true 127 | 128 | return viewToAnimateFromCopy 129 | } 130 | 131 | func startFrame(transitionObject : ImageScaleTransitionObject, withNavigationController : Bool, controllerAnimatingFrom : UIViewController, controllerAnimatingTo : UIViewController)->CGRect { 132 | var frame = transitionObject.viewToAnimateTo.frame 133 | if withNavigationController == true && controllerAnimatingTo.navigationController?.navigationBar.translucent == false { 134 | frame.origin.y += controllerAnimatingFrom.heightOfNavigationControllerAndStatusAtViewController() 135 | } 136 | return frame 137 | 138 | } 139 | 140 | func endFrame(transitionObject : ImageScaleTransitionObject, containerView : UIView)->(frame : CGRect , hasSet : Bool) { 141 | var viewEndFrame = transitionObject.viewToAnimateFrom.frame 142 | if let fromViewSuperExists = transitionObject.viewToAnimateFrom.superview { 143 | viewEndFrame = transitionObject.viewToAnimateFrom.superview!.convertRect(transitionObject.viewToAnimateFrom.frame, toView: containerView) 144 | return (viewEndFrame, true) 145 | } else { 146 | print("Error: The view you are trying to animate to in dissmess, has no super view") 147 | } 148 | return (viewEndFrame, false) 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageScaleTransitionExntentions.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionUtils.swift 3 | // ImageOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/17/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | extension UIViewController { 13 | 14 | func heightOfNavigationControllerAndStatusAtViewController()-> CGFloat { 15 | var height : CGFloat = 0 16 | if let isNavigationController = self.navigationController { 17 | height += isNavigationController.navigationBar.frame.height; 18 | } 19 | 20 | 21 | if UIApplication.sharedApplication().statusBarHidden == false { 22 | height += UIApplication.sharedApplication().statusBarFrame.height 23 | } 24 | 25 | 26 | return height 27 | } 28 | } 29 | 30 | extension UIImage { 31 | 32 | func copyMe()->UIImage { 33 | let newCgIm = CGImageCreateCopy(self.CGImage) 34 | let newImage = UIImage(CGImage: newCgIm!, scale: self.scale, orientation: self.imageOrientation) 35 | return newImage 36 | } 37 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageScaleTransitionObject.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionObject.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | //Should add init for only frame, and check if all works. 13 | 14 | public class ImageScaleTransitionObject : NSObject { 15 | internal var viewToAnimateFrom : UIImageView! 16 | internal var frameToAnimateTo : CGRect? 17 | internal var viewToAnimateTo :UIImageView // This is optional, if you do require this, your view will be hidden/unhidden to suite the transition better. 18 | internal var duration : NSTimeInterval 19 | 20 | 21 | public init(viewToAnimateFrom : UIImageView, viewToAnimateTo: UIImageView, duration : NSTimeInterval, frameToAnimateTo : CGRect) { 22 | self.viewToAnimateFrom = viewToAnimateFrom 23 | self.frameToAnimateTo = frameToAnimateTo 24 | self.viewToAnimateTo = viewToAnimateTo 25 | self.duration = duration 26 | } 27 | 28 | public init(viewToAnimateFrom : UIImageView, viewToAnimateTo: UIImageView, duration : NSTimeInterval) { 29 | self.viewToAnimateFrom = viewToAnimateFrom 30 | self.viewToAnimateTo = viewToAnimateTo 31 | self.duration = duration 32 | } 33 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/ImageScaleTransitionPresent.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageScaleTransitionPresent.swift 3 | // CellOpenTransition 4 | // 5 | // Created by Matan Cohen on 7/12/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | 12 | class ImageScaleTransitionPresent : NSObject , UIViewControllerAnimatedTransitioning { 13 | let animationOptions = UIViewAnimationOptions.CurveEaseInOut 14 | var duration : NSTimeInterval! 15 | var transitionObjects: Array! 16 | let fadeOutAnimationDuration : NSTimeInterval 17 | let alphaZero : CGFloat = 0 18 | let fadeOutAnimationDelay : NSTimeInterval 19 | let fromViewControllerScaleAnimation : CGFloat 20 | let usingNavigationController : Bool 21 | 22 | init(transitionObjects : Array, duration: NSTimeInterval, fadeOutAnimationDuration : NSTimeInterval, fadeOutAnimationDelay : NSTimeInterval, fromViewControllerScaleAnimation : CGFloat, usingNavigationController : Bool) { 23 | self.transitionObjects = transitionObjects 24 | self.fadeOutAnimationDuration = fadeOutAnimationDuration 25 | self.fadeOutAnimationDelay = fadeOutAnimationDelay 26 | self.fromViewControllerScaleAnimation = fromViewControllerScaleAnimation 27 | self.usingNavigationController = usingNavigationController 28 | super.init() 29 | self.duration = duration 30 | } 31 | 32 | @objc func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval { 33 | return self.duration 34 | } 35 | 36 | @objc func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 37 | let fromViewController = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) 38 | let toViewController = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) 39 | let containerView = transitionContext.containerView() 40 | 41 | toViewController!.view.alpha = alphaZero 42 | containerView!.addSubview((toViewController!.view)!) 43 | 44 | if self.usingNavigationController == true && toViewController?.navigationController?.navigationBar.translucent == false { 45 | toViewController!.view.frame.origin.y += (toViewController?.heightOfNavigationControllerAndStatusAtViewController())! 46 | } 47 | 48 | for transitionObject in self.transitionObjects { 49 | self.animateTransitionObject(transitionObject, fromViewController: fromViewController!, toViewController: toViewController!, containerView: containerView!) 50 | } 51 | 52 | let scaleUp = CGAffineTransformMakeScale(self.fromViewControllerScaleAnimation, self.fromViewControllerScaleAnimation); 53 | let scaleDown = CGAffineTransformMakeScale(1.0, 1.0); 54 | 55 | UIView.animateWithDuration(self.duration, animations: { 56 | toViewController?.view.alpha = 1.0 57 | fromViewController?.view.transform = scaleUp 58 | }, completion: { (finish) in 59 | fromViewController?.view.transform = scaleDown 60 | transitionContext.completeTransition(true) 61 | }) 62 | 63 | } 64 | 65 | 66 | func animateTransitionObject(transitionObject : ImageScaleTransitionObject, fromViewController : UIViewController, toViewController : UIViewController, containerView : UIView) { 67 | 68 | transitionObject.viewToAnimateTo.hidden = true 69 | transitionObject.viewToAnimateFrom.hidden = true 70 | 71 | 72 | var viewEndFrame = toViewController.view!.convertRect(transitionObject.viewToAnimateTo.frame, toView: containerView) 73 | if let isFrameToAnimateTo = transitionObject.frameToAnimateTo { 74 | viewEndFrame = isFrameToAnimateTo 75 | } 76 | 77 | 78 | 79 | assert(transitionObject.viewToAnimateFrom.image != nil, "Trying to animate with no Image") 80 | 81 | let viewToAnimateFromCopy = UIImageView(image: transitionObject.viewToAnimateFrom.image!.copyMe()) 82 | viewToAnimateFromCopy.contentMode = UIViewContentMode.ScaleAspectFill 83 | 84 | viewToAnimateFromCopy.frame = transitionObject.viewToAnimateFrom.superview!.convertRect(transitionObject.viewToAnimateFrom.frame, toView: containerView) 85 | 86 | viewToAnimateFromCopy.clipsToBounds = true 87 | 88 | let viewHasRoundedCorders = transitionObject.viewToAnimateFrom.layer.cornerRadius == transitionObject.viewToAnimateFrom.frame.size.height/2; 89 | let scaleSize = viewEndFrame.height/viewToAnimateFromCopy.frame.height 90 | if (viewHasRoundedCorders == true) { 91 | viewToAnimateFromCopy.layer.cornerRadius = viewToAnimateFromCopy.frame.size.height/2 92 | } 93 | 94 | containerView.addSubview(viewToAnimateFromCopy) 95 | 96 | UIView.animateWithDuration(transitionObject.duration, delay: 0, options: animationOptions, animations: { 97 | 98 | if viewHasRoundedCorders == true { 99 | viewToAnimateFromCopy.transform = CGAffineTransformMakeScale(scaleSize, scaleSize) 100 | viewToAnimateFromCopy.center = CGPointMake(viewEndFrame.origin.x + (viewEndFrame.width/2), viewEndFrame.origin.y + (viewEndFrame.height/2)) 101 | } else { 102 | viewToAnimateFromCopy.frame = viewEndFrame 103 | } 104 | }) { (finished) in} 105 | 106 | let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64((transitionObject.duration + fadeOutAnimationDelay) * Double(NSEC_PER_SEC))) 107 | dispatch_after(delayTime, dispatch_get_main_queue()) { 108 | 109 | viewToAnimateFromCopy.removeFromSuperview() 110 | transitionObject.viewToAnimateTo.hidden = false 111 | transitionObject.viewToAnimateFrom?.hidden = false 112 | 113 | 114 | } 115 | } 116 | } -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/crossroads-destiny-clip-4x3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/crossroads-destiny-clip-4x3.jpg -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/windows-xp-background-image-jpg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mcmatan/ImageOpenTransition/ee62415c89c70a985aa286bbe57913b50e646f1b/ImageOpenTransitionExampleProject/Pods/ImageOpenTransition/ImageOpenTransition/windows-xp-background-image-jpg.jpg -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Local Podspecs/ImageOpenTransition.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ImageOpenTransition", 3 | "version": "0.1.5", 4 | "summary": "ImageOpenTransition", 5 | "homepage": "https://github.com/mcmatan/ImageOpenTransition", 6 | "platforms": { 7 | "ios": "8.0" 8 | }, 9 | "license": { 10 | "type": "MIT", 11 | "file": "LICENSE" 12 | }, 13 | "authors": { 14 | "YOURNAME": "Matan" 15 | }, 16 | "source": { 17 | "git": "https://github.com/mcmatan/ImageOpenTransition.git", 18 | "tag": "0.1.5" 19 | }, 20 | "frameworks": "UIKit", 21 | "source_files": [ 22 | "ImageOpenTransition*", 23 | "Vendor/*", 24 | "Resource/*", 25 | "ImageOpenTransition/*" 26 | ], 27 | "requires_arc": true 28 | } 29 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - ImageOpenTransition (0.1.5) 3 | 4 | DEPENDENCIES: 5 | - ImageOpenTransition (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | ImageOpenTransition: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | ImageOpenTransition: 2e93cb8f92267b50631af1037b13ddd87db6a43b 13 | 14 | PODFILE CHECKSUM: 7f6616aeddedb9f4b9a62c76e4c5c56dba945552 15 | 16 | COCOAPODS: 1.1.0.rc.2 17 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/ImageOpenTransition.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProjectTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProjectUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/Matan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransition.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-ImageOpenTransitionExampleProject.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | Pods-ImageOpenTransitionExampleProjectTests.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 2 27 | 28 | Pods-ImageOpenTransitionExampleProjectUITests.xcscheme 29 | 30 | isShown 31 | 32 | orderHint 33 | 3 34 | 35 | 36 | SuppressBuildableAutocreation 37 | 38 | 5B9213B48AFA628CA495368C2AE30FEB 39 | 40 | primary 41 | 42 | 43 | 6912543D154F05902B19E81A96B8CE9A 44 | 45 | primary 46 | 47 | 48 | B3252DDB3DAF545803CF5F19777A08D1 49 | 50 | primary 51 | 52 | 53 | C1DE1CCA4227857B3D0AF01F5BECE12C 54 | 55 | primary 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/ImageOpenTransition.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProject.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProjectTests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/Pods-ImageOpenTransitionExampleProjectUITests.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Pods.xcodeproj/xcuserdata/matan.cohen.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | ImageOpenTransition.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Pods-ImageOpenTransitionExampleProject.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-ImageOpenTransitionExampleProjectTests.xcscheme 18 | 19 | isShown 20 | 21 | 22 | Pods-ImageOpenTransitionExampleProjectUITests.xcscheme 23 | 24 | isShown 25 | 26 | 27 | 28 | SuppressBuildableAutocreation 29 | 30 | 5B9213B48AFA628CA495368C2AE30FEB 31 | 32 | primary 33 | 34 | 35 | 6912543D154F05902B19E81A96B8CE9A 36 | 37 | primary 38 | 39 | 40 | B3252DDB3DAF545803CF5F19777A08D1 41 | 42 | primary 43 | 44 | 45 | C1DE1CCA4227857B3D0AF01F5BECE12C 46 | 47 | primary 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/ImageOpenTransition-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ImageOpenTransition : NSObject 3 | @end 4 | @implementation PodsDummy_ImageOpenTransition 5 | @end 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/ImageOpenTransition-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/ImageOpenTransition-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "ImageOpenTransition.h" 4 | 5 | FOUNDATION_EXPORT double ImageOpenTransitionVersionNumber; 6 | FOUNDATION_EXPORT const unsigned char ImageOpenTransitionVersionString[]; 7 | 8 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/ImageOpenTransition.modulemap: -------------------------------------------------------------------------------- 1 | framework module ImageOpenTransition { 2 | umbrella header "ImageOpenTransition-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/ImageOpenTransition.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" 4 | OTHER_LDFLAGS = -framework "UIKit" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/ImageOpenTransition/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.1.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ImageOpenTransitionExampleProject : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ImageOpenTransitionExampleProject 5 | @end 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/ImageOpenTransition/ImageOpenTransition.framework" 88 | fi 89 | if [[ "$CONFIGURATION" == "Release" ]]; then 90 | install_framework "$BUILT_PRODUCTS_DIR/ImageOpenTransition/ImageOpenTransition.framework" 91 | fi 92 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_ImageOpenTransitionExampleProjectVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_ImageOpenTransitionExampleProjectVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "ImageOpenTransition" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = $BUILD_DIR 10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ImageOpenTransitionExampleProject { 2 | umbrella header "Pods-ImageOpenTransitionExampleProject-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProject/Pods-ImageOpenTransitionExampleProject.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 7 | OTHER_LDFLAGS = $(inherited) -framework "ImageOpenTransition" 8 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 9 | PODS_BUILD_DIR = $BUILD_DIR 10 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ImageOpenTransitionExampleProjectTests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ImageOpenTransitionExampleProjectTests 5 | @end 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_ImageOpenTransitionExampleProjectTestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_ImageOpenTransitionExampleProjectTestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ImageOpenTransitionExampleProjectTests { 2 | umbrella header "Pods-ImageOpenTransitionExampleProjectTests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectTests/Pods-ImageOpenTransitionExampleProjectTests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ImageOpenTransitionExampleProjectUITests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ImageOpenTransitionExampleProjectUITests 5 | @end 6 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | 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}" 48 | 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} 49 | ;; 50 | *.xib) 51 | 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}" 52 | 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} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | 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}" 102 | fi 103 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_ImageOpenTransitionExampleProjectUITestsVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_ImageOpenTransitionExampleProjectUITestsVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_ImageOpenTransitionExampleProjectUITests { 2 | umbrella header "Pods-ImageOpenTransitionExampleProjectUITests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /ImageOpenTransitionExampleProject/Pods/Target Support Files/Pods-ImageOpenTransitionExampleProjectUITests/Pods-ImageOpenTransitionExampleProjectUITests.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 5 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/ImageOpenTransition/ImageOpenTransition.framework/Headers" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /ImageOpenTransitionTests/ImageOpenTransitionTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ImageOpenTransitionTests.swift 3 | // ImageOpenTransitionTests 4 | // 5 | // Created by Matan Cohen on 7/13/16. 6 | // Copyright © 2016 Jive. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | 12 | class ImageOpenTransitionTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measureBlock { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /ImageOpenTransitionTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Matan Cohen Abravanel 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | [![Pod version](https://img.shields.io/cocoapods/v/ImageOpenTransition.svg?style=flat)](http://cocoadocs.org/docsets/ImageOpenTransition) 4 | [![Language](https://img.shields.io/badge/language-swift-orange.svg?style=flat)](https://developer.apple.com/swift) 5 | [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/matteocrippa/awesome-swift#animation) 6 | 7 |

ImageOpenTransition Icon

8 | 9 | 10 | ## Description 11 | Beautiful and precise transitions between ViewControllers images written in Swift. 12 | 13 | * **Supports multiple images transition** 14 | 15 | * **Simply provide the imageView you would like to transition from, and to, and all the rest is free** 16 | 17 | * **No need to dig in transition API for a beautiful transition** 18 | 19 | ## Demo 20 | 21 |

ImageOpenTransition Icon 22 | ImageOpenTransition Icon

23 | 24 | ## Code 25 | 26 | 27 | 28 | ```Swift 29 | 30 | let transitionObjectAvatar = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgAvater, 31 | viewToAnimateTo: vc.imgAvatar, 32 | duration: 0.4) 33 | 34 | //Example of explicitly defining a final frame: 35 | let transitionObjectCover = ImageScaleTransitionObject(viewToAnimateFrom: cell.imgCover, 36 | viewToAnimateTo: vc.imgCover, 37 | duration: 0.4, 38 | frameToAnimateToCover) 39 | 40 | self.imageScalePresentTransition = ImageScaleTransitionDelegate(transitionObjects: [transitionObjectCover ,transitionObjectAvatar], 41 | usingNavigationController: usingNavigationController, 42 | duration: 0.4) 43 | ``` 44 | 45 | ## Usage 46 | 47 | * Create "ImageScaleTransitionObject" For each image you would like to animate. 48 | Pass the UIImageView to animate from, and the UIImageView to animate to. 49 | 50 | 51 | * You must pass the ImageView you would like to animate to. You can or allocate it before the controller is presented, 52 | or call "loadViewIfNeeded", it's your choice. 53 | 54 | * The frame you would like to animate to, is optional. 55 | You can use it in cases the UIImageView you would like to animate to, has no frame yet, and you rather calculate it programmatically. 56 | 57 | **Use the example project for better reference. 58 | 59 | ## Supports 60 | 61 | *Story boards/non story-board* 62 | *Translucent/non-translucent* 63 | *NavigationController/ non-navigationController* 64 | 65 | 66 | ## Installation 67 | 68 | #### Cocoapods 69 | **ImageScaleTransition** is available through [CocoaPods](http://cocoapods.org). To install 70 | it, simply add the following line to your Podfile: 71 | 72 | ```ruby 73 | pod 'ImageOpenTransition' 74 | ``` 75 | 76 | #### Manually 77 | 1. Download and drop ```/ImageOpenTransition``` folder in your project. 78 | 2. Congratulations! 79 | 80 | ## Author 81 | 82 | [Matan](https://github.com/mcmatan) made this with ❤️. 83 | 84 | ##License 85 | 86 | ``` 87 | Copyright 2013-2016 Jive Software, Inc. 88 | 89 | Licensed under the Apache License, Version 2.0 (the "License"); 90 | you may not use this file except in compliance with the License. 91 | You may obtain a copy of the License at 92 | 93 | http://www.apache.org/licenses/LICENSE-2.0 94 | 95 | Unless required by applicable law or agreed to in writing, software 96 | distributed under the License is distributed on an "AS IS" BASIS, 97 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 98 | See the License for the specific language governing permissions and 99 | limitations under the License. 100 | ``` 101 | --------------------------------------------------------------------------------