├── BlogPostScreenshot.png ├── Example └── RHPreviewCellExample │ ├── Podfile │ ├── Podfile.lock │ ├── Pods │ ├── Local Podspecs │ │ └── RHPreviewCell.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcuserdata │ │ │ └── robertherdzik.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── Pods-RHPreviewCellExample.xcscheme │ │ │ └── xcschememanagement.plist │ └── Target Support Files │ │ └── Pods-RHPreviewCellExample │ │ ├── Info.plist │ │ ├── Pods-RHPreviewCellExample-acknowledgements.markdown │ │ ├── Pods-RHPreviewCellExample-acknowledgements.plist │ │ ├── Pods-RHPreviewCellExample-dummy.m │ │ ├── Pods-RHPreviewCellExample-frameworks.sh │ │ ├── Pods-RHPreviewCellExample-resources.sh │ │ ├── Pods-RHPreviewCellExample-umbrella.h │ │ ├── Pods-RHPreviewCellExample.debug.xcconfig │ │ ├── Pods-RHPreviewCellExample.modulemap │ │ └── Pods-RHPreviewCellExample.release.xcconfig │ ├── RHPreviewCellExample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcuserdata │ │ └── robertherdzik.xcuserdatad │ │ └── xcschemes │ │ ├── RHPreviewCellExample.xcscheme │ │ └── xcschememanagement.plist │ ├── RHPreviewCellExample.xcworkspace │ └── contents.xcworkspacedata │ └── RHPreviewCellExample │ ├── AppDelegate.swift │ ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── Contents.json │ ├── other_1.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.56.19.png │ ├── other_2.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.54.14.png │ ├── other_3.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.54.00.png │ ├── warsaw_1.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.53.41.png │ ├── warsaw_2.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.56.01.png │ ├── warsaw_3.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.55.50.png │ └── warsaw_4.imageset │ │ ├── Contents.json │ │ └── Screen Shot 2016-09-25 at 19.55.24.png │ ├── Base.lproj │ └── LaunchScreen.storyboard │ ├── DetailsViewController.swift │ ├── Info.plist │ ├── MainControllerView.swift │ ├── NextViewController.swift │ ├── RHMockData.swift │ └── ViewController.swift ├── LICENSE ├── README.md ├── RHPReviewCell ├── Info.plist ├── RHPReviewCell.h └── RHPreviewCellSource │ ├── RHPreviewTableViewCell.swift │ ├── RHPreviewTableViewCellTilesAnimationProtocol.swift │ ├── RHPreviewTableViewCellTilesAnimator.swift │ ├── RHPreviewTileView.swift │ └── RHPreviewTilesContainerView.swift ├── RHPreviewCell.podspec ├── RHPreviewCell.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ └── contents.xcworkspacedata └── xcuserdata │ └── robertherdzik.xcuserdatad │ └── xcschemes │ └── xcschememanagement.plist ├── ReadmeAssets ├── RHPreviewCellHeadLogo.gif └── demo.gif ├── TODO.txt └── _config.yml /BlogPostScreenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/BlogPostScreenshot.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '9.0' 3 | use_frameworks! 4 | 5 | target 'RHPreviewCellExample' do 6 | pod 'RHPreviewCell' 7 | end 8 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODFILE CHECKSUM: 7538f6cd37e187601e7a8a6687f33c43c84be535 2 | 3 | COCOAPODS: 1.2.1 4 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Local Podspecs/RHPreviewCell.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RHPreviewCell", 3 | "version": "1.1.0", 4 | "summary": "Now you can add extra feature to your TableViewCell, which provides your users to preview content behind the cell.", 5 | "description": "Now you can add extra feature to your TableViewCell, which provides your users to preview content behind the cell.", 6 | "homepage": "https://github.com/robertherdzik/RHPreviewCell", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "Robert Herdzik": "robert.herdzik@yahoo.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/robertherdzik/RHPreviewCell.git", 16 | "tag": "1.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "9.0" 20 | }, 21 | "requires_arc": true, 22 | "ios": { 23 | "source_files": "RHPreviewCell/**/*.{swift}" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODFILE CHECKSUM: 7538f6cd37e187601e7a8a6687f33c43c84be535 2 | 3 | COCOAPODS: 1.2.1 4 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 087B3CA645EC93547FCB8215460AE220 /* Pods-RHPreviewCellExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7867A41EA213F110B29FA80FBD28E39F /* Pods-RHPreviewCellExample-dummy.m */; }; 11 | 0C773C761386A4A3A278D9BFFA891282 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */; }; 12 | 34A0864EFB3D00D0B0751974AA3D114D /* Pods-RHPreviewCellExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CAC119EAB5482BF436E9B6F233E52B58 /* Pods-RHPreviewCellExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 13 | /* End PBXBuildFile section */ 14 | 15 | /* Begin PBXFileReference section */ 16 | 0CB52AC615727EE12B0445CE917C5CDD /* Pods-RHPreviewCellExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHPreviewCellExample-frameworks.sh"; sourceTree = ""; }; 17 | 0EDCED695670E05F23BCA096A14893A6 /* Pods-RHPreviewCellExample-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-RHPreviewCellExample-resources.sh"; sourceTree = ""; }; 18 | 111883ED224925E3B9F7B6EE8ED0797A /* Pods-RHPreviewCellExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-RHPreviewCellExample-acknowledgements.plist"; sourceTree = ""; }; 19 | 26FC99AD1B346A73CBF55F0D7F148607 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 20 | 2EF3F823C4AD90192363B928117AC67A /* Pods-RHPreviewCellExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHPreviewCellExample.debug.xcconfig"; sourceTree = ""; }; 21 | 582E4DF26E293ADC4B4C72790C6FFB7C /* Pods_RHPreviewCellExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_RHPreviewCellExample.framework; path = "Pods-RHPreviewCellExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 23 | 7867A41EA213F110B29FA80FBD28E39F /* Pods-RHPreviewCellExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-RHPreviewCellExample-dummy.m"; sourceTree = ""; }; 24 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 25 | 998FEE8EA81CBF8FC51F8E45194A0D74 /* Pods-RHPreviewCellExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-RHPreviewCellExample-acknowledgements.markdown"; sourceTree = ""; }; 26 | C7F715C7E44EC89999C4497D7585D422 /* Pods-RHPreviewCellExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-RHPreviewCellExample.modulemap"; sourceTree = ""; }; 27 | CAC119EAB5482BF436E9B6F233E52B58 /* Pods-RHPreviewCellExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-RHPreviewCellExample-umbrella.h"; sourceTree = ""; }; 28 | E301C8E55D2CD57F3B5A654123D88EA9 /* Pods-RHPreviewCellExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-RHPreviewCellExample.release.xcconfig"; sourceTree = ""; }; 29 | /* End PBXFileReference section */ 30 | 31 | /* Begin PBXFrameworksBuildPhase section */ 32 | CEAD06346286A9F09597E3027BA5EAB5 /* Frameworks */ = { 33 | isa = PBXFrameworksBuildPhase; 34 | buildActionMask = 2147483647; 35 | files = ( 36 | 0C773C761386A4A3A278D9BFFA891282 /* Foundation.framework in Frameworks */, 37 | ); 38 | runOnlyForDeploymentPostprocessing = 0; 39 | }; 40 | /* End PBXFrameworksBuildPhase section */ 41 | 42 | /* Begin PBXGroup section */ 43 | 7DB346D0F39D3F0E887471402A8071AB = { 44 | isa = PBXGroup; 45 | children = ( 46 | 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, 47 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */, 48 | 9363DFFFA4D090ED55A329910F29987F /* Products */, 49 | DAE22C48DC13365CF4EC3B0A11891D67 /* Targets Support Files */, 50 | ); 51 | sourceTree = ""; 52 | }; 53 | 9363DFFFA4D090ED55A329910F29987F /* Products */ = { 54 | isa = PBXGroup; 55 | children = ( 56 | 582E4DF26E293ADC4B4C72790C6FFB7C /* Pods_RHPreviewCellExample.framework */, 57 | ); 58 | name = Products; 59 | sourceTree = ""; 60 | }; 61 | BC3CA7F9E30CC8F7E2DD044DD34432FC /* Frameworks */ = { 62 | isa = PBXGroup; 63 | children = ( 64 | D35AF013A5F0BAD4F32504907A52519E /* iOS */, 65 | ); 66 | name = Frameworks; 67 | sourceTree = ""; 68 | }; 69 | D35AF013A5F0BAD4F32504907A52519E /* iOS */ = { 70 | isa = PBXGroup; 71 | children = ( 72 | 6604A7D69453B4569E4E4827FB9155A9 /* Foundation.framework */, 73 | ); 74 | name = iOS; 75 | sourceTree = ""; 76 | }; 77 | DAE22C48DC13365CF4EC3B0A11891D67 /* Targets Support Files */ = { 78 | isa = PBXGroup; 79 | children = ( 80 | EA2ABD714A0D4CAB62308B33D3821F5D /* Pods-RHPreviewCellExample */, 81 | ); 82 | name = "Targets Support Files"; 83 | sourceTree = ""; 84 | }; 85 | EA2ABD714A0D4CAB62308B33D3821F5D /* Pods-RHPreviewCellExample */ = { 86 | isa = PBXGroup; 87 | children = ( 88 | 26FC99AD1B346A73CBF55F0D7F148607 /* Info.plist */, 89 | C7F715C7E44EC89999C4497D7585D422 /* Pods-RHPreviewCellExample.modulemap */, 90 | 998FEE8EA81CBF8FC51F8E45194A0D74 /* Pods-RHPreviewCellExample-acknowledgements.markdown */, 91 | 111883ED224925E3B9F7B6EE8ED0797A /* Pods-RHPreviewCellExample-acknowledgements.plist */, 92 | 7867A41EA213F110B29FA80FBD28E39F /* Pods-RHPreviewCellExample-dummy.m */, 93 | 0CB52AC615727EE12B0445CE917C5CDD /* Pods-RHPreviewCellExample-frameworks.sh */, 94 | 0EDCED695670E05F23BCA096A14893A6 /* Pods-RHPreviewCellExample-resources.sh */, 95 | CAC119EAB5482BF436E9B6F233E52B58 /* Pods-RHPreviewCellExample-umbrella.h */, 96 | 2EF3F823C4AD90192363B928117AC67A /* Pods-RHPreviewCellExample.debug.xcconfig */, 97 | E301C8E55D2CD57F3B5A654123D88EA9 /* Pods-RHPreviewCellExample.release.xcconfig */, 98 | ); 99 | name = "Pods-RHPreviewCellExample"; 100 | path = "Target Support Files/Pods-RHPreviewCellExample"; 101 | sourceTree = ""; 102 | }; 103 | /* End PBXGroup section */ 104 | 105 | /* Begin PBXHeadersBuildPhase section */ 106 | CEA8ABAC0864334B3F89B132FA2FE69A /* Headers */ = { 107 | isa = PBXHeadersBuildPhase; 108 | buildActionMask = 2147483647; 109 | files = ( 110 | 34A0864EFB3D00D0B0751974AA3D114D /* Pods-RHPreviewCellExample-umbrella.h in Headers */, 111 | ); 112 | runOnlyForDeploymentPostprocessing = 0; 113 | }; 114 | /* End PBXHeadersBuildPhase section */ 115 | 116 | /* Begin PBXNativeTarget section */ 117 | DF8E2D9FF8BCF4697D4CB10BC43B78AB /* Pods-RHPreviewCellExample */ = { 118 | isa = PBXNativeTarget; 119 | buildConfigurationList = FD0820E6E4B2EC1188B4D94A4B30CC6E /* Build configuration list for PBXNativeTarget "Pods-RHPreviewCellExample" */; 120 | buildPhases = ( 121 | 5A0386D98F36A80BEC90E01B56E0E233 /* Sources */, 122 | CEAD06346286A9F09597E3027BA5EAB5 /* Frameworks */, 123 | CEA8ABAC0864334B3F89B132FA2FE69A /* Headers */, 124 | ); 125 | buildRules = ( 126 | ); 127 | dependencies = ( 128 | ); 129 | name = "Pods-RHPreviewCellExample"; 130 | productName = "Pods-RHPreviewCellExample"; 131 | productReference = 582E4DF26E293ADC4B4C72790C6FFB7C /* Pods_RHPreviewCellExample.framework */; 132 | productType = "com.apple.product-type.framework"; 133 | }; 134 | /* End PBXNativeTarget section */ 135 | 136 | /* Begin PBXProject section */ 137 | D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { 138 | isa = PBXProject; 139 | attributes = { 140 | LastSwiftUpdateCheck = 0830; 141 | LastUpgradeCheck = 0700; 142 | }; 143 | buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; 144 | compatibilityVersion = "Xcode 3.2"; 145 | developmentRegion = English; 146 | hasScannedForEncodings = 0; 147 | knownRegions = ( 148 | en, 149 | ); 150 | mainGroup = 7DB346D0F39D3F0E887471402A8071AB; 151 | productRefGroup = 9363DFFFA4D090ED55A329910F29987F /* Products */; 152 | projectDirPath = ""; 153 | projectRoot = ""; 154 | targets = ( 155 | DF8E2D9FF8BCF4697D4CB10BC43B78AB /* Pods-RHPreviewCellExample */, 156 | ); 157 | }; 158 | /* End PBXProject section */ 159 | 160 | /* Begin PBXSourcesBuildPhase section */ 161 | 5A0386D98F36A80BEC90E01B56E0E233 /* Sources */ = { 162 | isa = PBXSourcesBuildPhase; 163 | buildActionMask = 2147483647; 164 | files = ( 165 | 087B3CA645EC93547FCB8215460AE220 /* Pods-RHPreviewCellExample-dummy.m in Sources */, 166 | ); 167 | runOnlyForDeploymentPostprocessing = 0; 168 | }; 169 | /* End PBXSourcesBuildPhase section */ 170 | 171 | /* Begin XCBuildConfiguration section */ 172 | 4E487F173E6C9664F4E9E26B9635D23C /* Debug */ = { 173 | isa = XCBuildConfiguration; 174 | buildSettings = { 175 | ALWAYS_SEARCH_USER_PATHS = NO; 176 | CLANG_ANALYZER_NONNULL = YES; 177 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 178 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 179 | CLANG_CXX_LIBRARY = "libc++"; 180 | CLANG_ENABLE_MODULES = YES; 181 | CLANG_ENABLE_OBJC_ARC = YES; 182 | CLANG_WARN_BOOL_CONVERSION = YES; 183 | CLANG_WARN_CONSTANT_CONVERSION = YES; 184 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 185 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 186 | CLANG_WARN_EMPTY_BODY = YES; 187 | CLANG_WARN_ENUM_CONVERSION = YES; 188 | CLANG_WARN_INFINITE_RECURSION = YES; 189 | CLANG_WARN_INT_CONVERSION = YES; 190 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 191 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 192 | CLANG_WARN_UNREACHABLE_CODE = YES; 193 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 194 | CODE_SIGNING_REQUIRED = NO; 195 | COPY_PHASE_STRIP = NO; 196 | ENABLE_TESTABILITY = YES; 197 | GCC_C_LANGUAGE_STANDARD = gnu99; 198 | GCC_DYNAMIC_NO_PIC = NO; 199 | GCC_OPTIMIZATION_LEVEL = 0; 200 | GCC_PREPROCESSOR_DEFINITIONS = ( 201 | "POD_CONFIGURATION_DEBUG=1", 202 | "DEBUG=1", 203 | "$(inherited)", 204 | ); 205 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 206 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 207 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 208 | GCC_WARN_UNDECLARED_SELECTOR = YES; 209 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 210 | GCC_WARN_UNUSED_FUNCTION = YES; 211 | GCC_WARN_UNUSED_VARIABLE = YES; 212 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 213 | ONLY_ACTIVE_ARCH = YES; 214 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 215 | STRIP_INSTALLED_PRODUCT = NO; 216 | SYMROOT = "${SRCROOT}/../build"; 217 | }; 218 | name = Debug; 219 | }; 220 | 6E2FA19B26BCB29BF2D1EE9465068981 /* Release */ = { 221 | isa = XCBuildConfiguration; 222 | baseConfigurationReference = E301C8E55D2CD57F3B5A654123D88EA9 /* Pods-RHPreviewCellExample.release.xcconfig */; 223 | buildSettings = { 224 | CODE_SIGN_IDENTITY = ""; 225 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 226 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 227 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 228 | CURRENT_PROJECT_VERSION = 1; 229 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 230 | DEFINES_MODULE = YES; 231 | DYLIB_COMPATIBILITY_VERSION = 1; 232 | DYLIB_CURRENT_VERSION = 1; 233 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 234 | ENABLE_STRICT_OBJC_MSGSEND = YES; 235 | GCC_NO_COMMON_BLOCKS = YES; 236 | INFOPLIST_FILE = "Target Support Files/Pods-RHPreviewCellExample/Info.plist"; 237 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 238 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 239 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 240 | MACH_O_TYPE = staticlib; 241 | MODULEMAP_FILE = "Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.modulemap"; 242 | MTL_ENABLE_DEBUG_INFO = NO; 243 | OTHER_LDFLAGS = ""; 244 | OTHER_LIBTOOLFLAGS = ""; 245 | PODS_ROOT = "$(SRCROOT)"; 246 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 247 | PRODUCT_NAME = Pods_RHPreviewCellExample; 248 | SDKROOT = iphoneos; 249 | SKIP_INSTALL = YES; 250 | TARGETED_DEVICE_FAMILY = "1,2"; 251 | VERSIONING_SYSTEM = "apple-generic"; 252 | VERSION_INFO_PREFIX = ""; 253 | }; 254 | name = Release; 255 | }; 256 | BDD0139D6EB93FA375F887ABD62DAB2E /* Release */ = { 257 | isa = XCBuildConfiguration; 258 | buildSettings = { 259 | ALWAYS_SEARCH_USER_PATHS = NO; 260 | CLANG_ANALYZER_NONNULL = YES; 261 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES; 262 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 263 | CLANG_CXX_LIBRARY = "libc++"; 264 | CLANG_ENABLE_MODULES = YES; 265 | CLANG_ENABLE_OBJC_ARC = YES; 266 | CLANG_WARN_BOOL_CONVERSION = YES; 267 | CLANG_WARN_CONSTANT_CONVERSION = YES; 268 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES; 269 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 270 | CLANG_WARN_EMPTY_BODY = YES; 271 | CLANG_WARN_ENUM_CONVERSION = YES; 272 | CLANG_WARN_INFINITE_RECURSION = YES; 273 | CLANG_WARN_INT_CONVERSION = YES; 274 | CLANG_WARN_OBJC_ROOT_CLASS = YES; 275 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 276 | CLANG_WARN_UNREACHABLE_CODE = YES; 277 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 278 | CODE_SIGNING_REQUIRED = NO; 279 | COPY_PHASE_STRIP = YES; 280 | ENABLE_NS_ASSERTIONS = NO; 281 | GCC_C_LANGUAGE_STANDARD = gnu99; 282 | GCC_PREPROCESSOR_DEFINITIONS = ( 283 | "POD_CONFIGURATION_RELEASE=1", 284 | "$(inherited)", 285 | ); 286 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 287 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 288 | GCC_WARN_UNDECLARED_SELECTOR = YES; 289 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 290 | GCC_WARN_UNUSED_FUNCTION = YES; 291 | GCC_WARN_UNUSED_VARIABLE = YES; 292 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 293 | PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; 294 | STRIP_INSTALLED_PRODUCT = NO; 295 | SYMROOT = "${SRCROOT}/../build"; 296 | VALIDATE_PRODUCT = YES; 297 | }; 298 | name = Release; 299 | }; 300 | C78CB8119D0D768CE5601214D89CEF5E /* Debug */ = { 301 | isa = XCBuildConfiguration; 302 | baseConfigurationReference = 2EF3F823C4AD90192363B928117AC67A /* Pods-RHPreviewCellExample.debug.xcconfig */; 303 | buildSettings = { 304 | CODE_SIGN_IDENTITY = ""; 305 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 306 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 307 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 308 | CURRENT_PROJECT_VERSION = 1; 309 | DEBUG_INFORMATION_FORMAT = dwarf; 310 | DEFINES_MODULE = YES; 311 | DYLIB_COMPATIBILITY_VERSION = 1; 312 | DYLIB_CURRENT_VERSION = 1; 313 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 314 | ENABLE_STRICT_OBJC_MSGSEND = YES; 315 | GCC_NO_COMMON_BLOCKS = YES; 316 | INFOPLIST_FILE = "Target Support Files/Pods-RHPreviewCellExample/Info.plist"; 317 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 318 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 319 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 320 | MACH_O_TYPE = staticlib; 321 | MODULEMAP_FILE = "Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.modulemap"; 322 | MTL_ENABLE_DEBUG_INFO = YES; 323 | OTHER_LDFLAGS = ""; 324 | OTHER_LIBTOOLFLAGS = ""; 325 | PODS_ROOT = "$(SRCROOT)"; 326 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 327 | PRODUCT_NAME = Pods_RHPreviewCellExample; 328 | SDKROOT = iphoneos; 329 | SKIP_INSTALL = YES; 330 | TARGETED_DEVICE_FAMILY = "1,2"; 331 | VERSIONING_SYSTEM = "apple-generic"; 332 | VERSION_INFO_PREFIX = ""; 333 | }; 334 | name = Debug; 335 | }; 336 | /* End XCBuildConfiguration section */ 337 | 338 | /* Begin XCConfigurationList section */ 339 | 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { 340 | isa = XCConfigurationList; 341 | buildConfigurations = ( 342 | 4E487F173E6C9664F4E9E26B9635D23C /* Debug */, 343 | BDD0139D6EB93FA375F887ABD62DAB2E /* Release */, 344 | ); 345 | defaultConfigurationIsVisible = 0; 346 | defaultConfigurationName = Release; 347 | }; 348 | FD0820E6E4B2EC1188B4D94A4B30CC6E /* Build configuration list for PBXNativeTarget "Pods-RHPreviewCellExample" */ = { 349 | isa = XCConfigurationList; 350 | buildConfigurations = ( 351 | C78CB8119D0D768CE5601214D89CEF5E /* Debug */, 352 | 6E2FA19B26BCB29BF2D1EE9465068981 /* Release */, 353 | ); 354 | defaultConfigurationIsVisible = 0; 355 | defaultConfigurationName = Release; 356 | }; 357 | /* End XCConfigurationList section */ 358 | }; 359 | rootObject = D41D8CD98F00B204E9800998ECF8427E /* Project object */; 360 | } 361 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/Pods-RHPreviewCellExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 47 | 48 | 54 | 55 | 56 | 57 | 58 | 59 | 65 | 66 | 68 | 69 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Pods.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-RHPreviewCellExample.xcscheme 8 | 9 | isShown 10 | 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/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 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-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 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_RHPreviewCellExample : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_RHPreviewCellExample 5 | @end 6 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-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 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-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 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | 4) 25 | TARGET_DEVICE_ARGS="--target-device watch" 26 | ;; 27 | *) 28 | TARGET_DEVICE_ARGS="--target-device mac" 29 | ;; 30 | esac 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="$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 != "${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 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_RHPreviewCellExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_RHPreviewCellExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_RHPreviewCellExample { 2 | umbrella header "Pods-RHPreviewCellExample-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 3 | PODS_BUILD_DIR = $BUILD_DIR 4 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 5 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 6 | PODS_ROOT = ${SRCROOT}/Pods 7 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 302FB4C8F5AEE727350A0DCC /* Pods_RHPreviewCellExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E6E7A01C45FFE2EE97CF0C7E /* Pods_RHPreviewCellExample.framework */; }; 11 | B12B17E51D9A5CDC00F9AC35 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17E41D9A5CDC00F9AC35 /* AppDelegate.swift */; }; 12 | B12B17E71D9A5CDC00F9AC35 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17E61D9A5CDC00F9AC35 /* ViewController.swift */; }; 13 | B12B17EC1D9A5CDC00F9AC35 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B12B17EB1D9A5CDC00F9AC35 /* Assets.xcassets */; }; 14 | B12B17EF1D9A5CDC00F9AC35 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B12B17ED1D9A5CDC00F9AC35 /* LaunchScreen.storyboard */; }; 15 | B12B17FA1D9A5D4400F9AC35 /* DetailsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17F61D9A5D4400F9AC35 /* DetailsViewController.swift */; }; 16 | B12B17FB1D9A5D4400F9AC35 /* MainControllerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17F71D9A5D4400F9AC35 /* MainControllerView.swift */; }; 17 | B12B17FC1D9A5D4400F9AC35 /* NextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17F81D9A5D4400F9AC35 /* NextViewController.swift */; }; 18 | B12B17FD1D9A5D4400F9AC35 /* RHMockData.swift in Sources */ = {isa = PBXBuildFile; fileRef = B12B17F91D9A5D4400F9AC35 /* RHMockData.swift */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXFileReference section */ 22 | 211801C5677DFD5AA892FB39 /* Pods-RHPreviewCellExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHPreviewCellExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.release.xcconfig"; sourceTree = ""; }; 23 | 8183754DC97F9F47AF5FD99E /* Pods-RHPreviewCellExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RHPreviewCellExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample.debug.xcconfig"; sourceTree = ""; }; 24 | B12B17E11D9A5CDC00F9AC35 /* RHPreviewCellExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = RHPreviewCellExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | B12B17E41D9A5CDC00F9AC35 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 26 | B12B17E61D9A5CDC00F9AC35 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 27 | B12B17EB1D9A5CDC00F9AC35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | B12B17EE1D9A5CDC00F9AC35 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | B12B17F01D9A5CDC00F9AC35 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | B12B17F61D9A5D4400F9AC35 /* DetailsViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailsViewController.swift; sourceTree = ""; }; 31 | B12B17F71D9A5D4400F9AC35 /* MainControllerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainControllerView.swift; sourceTree = ""; }; 32 | B12B17F81D9A5D4400F9AC35 /* NextViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NextViewController.swift; sourceTree = ""; }; 33 | B12B17F91D9A5D4400F9AC35 /* RHMockData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHMockData.swift; sourceTree = ""; }; 34 | E6E7A01C45FFE2EE97CF0C7E /* Pods_RHPreviewCellExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RHPreviewCellExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 35 | /* End PBXFileReference section */ 36 | 37 | /* Begin PBXFrameworksBuildPhase section */ 38 | B12B17DE1D9A5CDC00F9AC35 /* Frameworks */ = { 39 | isa = PBXFrameworksBuildPhase; 40 | buildActionMask = 2147483647; 41 | files = ( 42 | 302FB4C8F5AEE727350A0DCC /* Pods_RHPreviewCellExample.framework in Frameworks */, 43 | ); 44 | runOnlyForDeploymentPostprocessing = 0; 45 | }; 46 | /* End PBXFrameworksBuildPhase section */ 47 | 48 | /* Begin PBXGroup section */ 49 | 1506E77A646AF0ADAC08CBC1 /* Frameworks */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | E6E7A01C45FFE2EE97CF0C7E /* Pods_RHPreviewCellExample.framework */, 53 | ); 54 | name = Frameworks; 55 | sourceTree = ""; 56 | }; 57 | 48A368D7FD17F7C312CAE43A /* Pods */ = { 58 | isa = PBXGroup; 59 | children = ( 60 | 8183754DC97F9F47AF5FD99E /* Pods-RHPreviewCellExample.debug.xcconfig */, 61 | 211801C5677DFD5AA892FB39 /* Pods-RHPreviewCellExample.release.xcconfig */, 62 | ); 63 | name = Pods; 64 | sourceTree = ""; 65 | }; 66 | B12B17D81D9A5CDC00F9AC35 = { 67 | isa = PBXGroup; 68 | children = ( 69 | B12B17E31D9A5CDC00F9AC35 /* RHPreviewCellExample */, 70 | B12B17E21D9A5CDC00F9AC35 /* Products */, 71 | 48A368D7FD17F7C312CAE43A /* Pods */, 72 | 1506E77A646AF0ADAC08CBC1 /* Frameworks */, 73 | ); 74 | sourceTree = ""; 75 | }; 76 | B12B17E21D9A5CDC00F9AC35 /* Products */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | B12B17E11D9A5CDC00F9AC35 /* RHPreviewCellExample.app */, 80 | ); 81 | name = Products; 82 | sourceTree = ""; 83 | }; 84 | B12B17E31D9A5CDC00F9AC35 /* RHPreviewCellExample */ = { 85 | isa = PBXGroup; 86 | children = ( 87 | B12B17E41D9A5CDC00F9AC35 /* AppDelegate.swift */, 88 | B12B17F61D9A5D4400F9AC35 /* DetailsViewController.swift */, 89 | B12B17F71D9A5D4400F9AC35 /* MainControllerView.swift */, 90 | B12B17F81D9A5D4400F9AC35 /* NextViewController.swift */, 91 | B12B17F91D9A5D4400F9AC35 /* RHMockData.swift */, 92 | B12B17E61D9A5CDC00F9AC35 /* ViewController.swift */, 93 | B12B17EB1D9A5CDC00F9AC35 /* Assets.xcassets */, 94 | B12B17ED1D9A5CDC00F9AC35 /* LaunchScreen.storyboard */, 95 | B12B17F01D9A5CDC00F9AC35 /* Info.plist */, 96 | ); 97 | path = RHPreviewCellExample; 98 | sourceTree = ""; 99 | }; 100 | /* End PBXGroup section */ 101 | 102 | /* Begin PBXNativeTarget section */ 103 | B12B17E01D9A5CDC00F9AC35 /* RHPreviewCellExample */ = { 104 | isa = PBXNativeTarget; 105 | buildConfigurationList = B12B17F31D9A5CDC00F9AC35 /* Build configuration list for PBXNativeTarget "RHPreviewCellExample" */; 106 | buildPhases = ( 107 | 1A14B85728441777801E3A72 /* [CP] Check Pods Manifest.lock */, 108 | B12B17DD1D9A5CDC00F9AC35 /* Sources */, 109 | B12B17DE1D9A5CDC00F9AC35 /* Frameworks */, 110 | B12B17DF1D9A5CDC00F9AC35 /* Resources */, 111 | 5CEED3DAE3340A8E1D9B8507 /* [CP] Embed Pods Frameworks */, 112 | 09DE73DDA8EEC331E4D29134 /* [CP] Copy Pods Resources */, 113 | ); 114 | buildRules = ( 115 | ); 116 | dependencies = ( 117 | ); 118 | name = RHPreviewCellExample; 119 | productName = RHPreviewCellExample; 120 | productReference = B12B17E11D9A5CDC00F9AC35 /* RHPreviewCellExample.app */; 121 | productType = "com.apple.product-type.application"; 122 | }; 123 | /* End PBXNativeTarget section */ 124 | 125 | /* Begin PBXProject section */ 126 | B12B17D91D9A5CDC00F9AC35 /* Project object */ = { 127 | isa = PBXProject; 128 | attributes = { 129 | LastSwiftUpdateCheck = 0730; 130 | LastUpgradeCheck = 0730; 131 | ORGANIZATIONNAME = "Robert Herdzik"; 132 | TargetAttributes = { 133 | B12B17E01D9A5CDC00F9AC35 = { 134 | CreatedOnToolsVersion = 7.3; 135 | LastSwiftMigration = 0900; 136 | }; 137 | }; 138 | }; 139 | buildConfigurationList = B12B17DC1D9A5CDC00F9AC35 /* Build configuration list for PBXProject "RHPreviewCellExample" */; 140 | compatibilityVersion = "Xcode 3.2"; 141 | developmentRegion = English; 142 | hasScannedForEncodings = 0; 143 | knownRegions = ( 144 | en, 145 | Base, 146 | ); 147 | mainGroup = B12B17D81D9A5CDC00F9AC35; 148 | productRefGroup = B12B17E21D9A5CDC00F9AC35 /* Products */; 149 | projectDirPath = ""; 150 | projectRoot = ""; 151 | targets = ( 152 | B12B17E01D9A5CDC00F9AC35 /* RHPreviewCellExample */, 153 | ); 154 | }; 155 | /* End PBXProject section */ 156 | 157 | /* Begin PBXResourcesBuildPhase section */ 158 | B12B17DF1D9A5CDC00F9AC35 /* Resources */ = { 159 | isa = PBXResourcesBuildPhase; 160 | buildActionMask = 2147483647; 161 | files = ( 162 | B12B17EF1D9A5CDC00F9AC35 /* LaunchScreen.storyboard in Resources */, 163 | B12B17EC1D9A5CDC00F9AC35 /* Assets.xcassets in Resources */, 164 | ); 165 | runOnlyForDeploymentPostprocessing = 0; 166 | }; 167 | /* End PBXResourcesBuildPhase section */ 168 | 169 | /* Begin PBXShellScriptBuildPhase section */ 170 | 09DE73DDA8EEC331E4D29134 /* [CP] Copy Pods Resources */ = { 171 | isa = PBXShellScriptBuildPhase; 172 | buildActionMask = 2147483647; 173 | files = ( 174 | ); 175 | inputPaths = ( 176 | ); 177 | name = "[CP] Copy Pods Resources"; 178 | outputPaths = ( 179 | ); 180 | runOnlyForDeploymentPostprocessing = 0; 181 | shellPath = /bin/sh; 182 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-resources.sh\"\n"; 183 | showEnvVarsInLog = 0; 184 | }; 185 | 1A14B85728441777801E3A72 /* [CP] Check Pods Manifest.lock */ = { 186 | isa = PBXShellScriptBuildPhase; 187 | buildActionMask = 2147483647; 188 | files = ( 189 | ); 190 | inputPaths = ( 191 | ); 192 | name = "[CP] Check Pods Manifest.lock"; 193 | outputPaths = ( 194 | ); 195 | runOnlyForDeploymentPostprocessing = 0; 196 | shellPath = /bin/sh; 197 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 198 | showEnvVarsInLog = 0; 199 | }; 200 | 5CEED3DAE3340A8E1D9B8507 /* [CP] Embed Pods Frameworks */ = { 201 | isa = PBXShellScriptBuildPhase; 202 | buildActionMask = 2147483647; 203 | files = ( 204 | ); 205 | inputPaths = ( 206 | ); 207 | name = "[CP] Embed Pods Frameworks"; 208 | outputPaths = ( 209 | ); 210 | runOnlyForDeploymentPostprocessing = 0; 211 | shellPath = /bin/sh; 212 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-RHPreviewCellExample/Pods-RHPreviewCellExample-frameworks.sh\"\n"; 213 | showEnvVarsInLog = 0; 214 | }; 215 | /* End PBXShellScriptBuildPhase section */ 216 | 217 | /* Begin PBXSourcesBuildPhase section */ 218 | B12B17DD1D9A5CDC00F9AC35 /* Sources */ = { 219 | isa = PBXSourcesBuildPhase; 220 | buildActionMask = 2147483647; 221 | files = ( 222 | B12B17FC1D9A5D4400F9AC35 /* NextViewController.swift in Sources */, 223 | B12B17E71D9A5CDC00F9AC35 /* ViewController.swift in Sources */, 224 | B12B17E51D9A5CDC00F9AC35 /* AppDelegate.swift in Sources */, 225 | B12B17FD1D9A5D4400F9AC35 /* RHMockData.swift in Sources */, 226 | B12B17FA1D9A5D4400F9AC35 /* DetailsViewController.swift in Sources */, 227 | B12B17FB1D9A5D4400F9AC35 /* MainControllerView.swift in Sources */, 228 | ); 229 | runOnlyForDeploymentPostprocessing = 0; 230 | }; 231 | /* End PBXSourcesBuildPhase section */ 232 | 233 | /* Begin PBXVariantGroup section */ 234 | B12B17ED1D9A5CDC00F9AC35 /* LaunchScreen.storyboard */ = { 235 | isa = PBXVariantGroup; 236 | children = ( 237 | B12B17EE1D9A5CDC00F9AC35 /* Base */, 238 | ); 239 | name = LaunchScreen.storyboard; 240 | sourceTree = ""; 241 | }; 242 | /* End PBXVariantGroup section */ 243 | 244 | /* Begin XCBuildConfiguration section */ 245 | B12B17F11D9A5CDC00F9AC35 /* Debug */ = { 246 | isa = XCBuildConfiguration; 247 | buildSettings = { 248 | ALWAYS_SEARCH_USER_PATHS = NO; 249 | CLANG_ANALYZER_NONNULL = YES; 250 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 251 | CLANG_CXX_LIBRARY = "libc++"; 252 | CLANG_ENABLE_MODULES = YES; 253 | CLANG_ENABLE_OBJC_ARC = YES; 254 | CLANG_WARN_BOOL_CONVERSION = YES; 255 | CLANG_WARN_CONSTANT_CONVERSION = YES; 256 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 257 | CLANG_WARN_EMPTY_BODY = YES; 258 | CLANG_WARN_ENUM_CONVERSION = YES; 259 | CLANG_WARN_INT_CONVERSION = YES; 260 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 261 | CLANG_WARN_UNREACHABLE_CODE = YES; 262 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 263 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 264 | COPY_PHASE_STRIP = NO; 265 | DEBUG_INFORMATION_FORMAT = dwarf; 266 | ENABLE_STRICT_OBJC_MSGSEND = YES; 267 | ENABLE_TESTABILITY = YES; 268 | GCC_C_LANGUAGE_STANDARD = gnu99; 269 | GCC_DYNAMIC_NO_PIC = NO; 270 | GCC_NO_COMMON_BLOCKS = YES; 271 | GCC_OPTIMIZATION_LEVEL = 0; 272 | GCC_PREPROCESSOR_DEFINITIONS = ( 273 | "DEBUG=1", 274 | "$(inherited)", 275 | ); 276 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 277 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 278 | GCC_WARN_UNDECLARED_SELECTOR = YES; 279 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 280 | GCC_WARN_UNUSED_FUNCTION = YES; 281 | GCC_WARN_UNUSED_VARIABLE = YES; 282 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 283 | MTL_ENABLE_DEBUG_INFO = YES; 284 | ONLY_ACTIVE_ARCH = YES; 285 | SDKROOT = iphoneos; 286 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 287 | TARGETED_DEVICE_FAMILY = "1,2"; 288 | }; 289 | name = Debug; 290 | }; 291 | B12B17F21D9A5CDC00F9AC35 /* Release */ = { 292 | isa = XCBuildConfiguration; 293 | buildSettings = { 294 | ALWAYS_SEARCH_USER_PATHS = NO; 295 | CLANG_ANALYZER_NONNULL = YES; 296 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 297 | CLANG_CXX_LIBRARY = "libc++"; 298 | CLANG_ENABLE_MODULES = YES; 299 | CLANG_ENABLE_OBJC_ARC = YES; 300 | CLANG_WARN_BOOL_CONVERSION = YES; 301 | CLANG_WARN_CONSTANT_CONVERSION = YES; 302 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 303 | CLANG_WARN_EMPTY_BODY = YES; 304 | CLANG_WARN_ENUM_CONVERSION = YES; 305 | CLANG_WARN_INT_CONVERSION = YES; 306 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 307 | CLANG_WARN_UNREACHABLE_CODE = YES; 308 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 309 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 310 | COPY_PHASE_STRIP = NO; 311 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 312 | ENABLE_NS_ASSERTIONS = NO; 313 | ENABLE_STRICT_OBJC_MSGSEND = YES; 314 | GCC_C_LANGUAGE_STANDARD = gnu99; 315 | GCC_NO_COMMON_BLOCKS = YES; 316 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 317 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 318 | GCC_WARN_UNDECLARED_SELECTOR = YES; 319 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 320 | GCC_WARN_UNUSED_FUNCTION = YES; 321 | GCC_WARN_UNUSED_VARIABLE = YES; 322 | IPHONEOS_DEPLOYMENT_TARGET = 9.3; 323 | MTL_ENABLE_DEBUG_INFO = NO; 324 | SDKROOT = iphoneos; 325 | TARGETED_DEVICE_FAMILY = "1,2"; 326 | VALIDATE_PRODUCT = YES; 327 | }; 328 | name = Release; 329 | }; 330 | B12B17F41D9A5CDC00F9AC35 /* Debug */ = { 331 | isa = XCBuildConfiguration; 332 | baseConfigurationReference = 8183754DC97F9F47AF5FD99E /* Pods-RHPreviewCellExample.debug.xcconfig */; 333 | buildSettings = { 334 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 335 | INFOPLIST_FILE = RHPreviewCellExample/Info.plist; 336 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 337 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 338 | PRODUCT_BUNDLE_IDENTIFIER = x.RHPreviewCellExample; 339 | PRODUCT_NAME = "$(TARGET_NAME)"; 340 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 341 | SWIFT_VERSION = 4.0; 342 | }; 343 | name = Debug; 344 | }; 345 | B12B17F51D9A5CDC00F9AC35 /* Release */ = { 346 | isa = XCBuildConfiguration; 347 | baseConfigurationReference = 211801C5677DFD5AA892FB39 /* Pods-RHPreviewCellExample.release.xcconfig */; 348 | buildSettings = { 349 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 350 | INFOPLIST_FILE = RHPreviewCellExample/Info.plist; 351 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 352 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 353 | PRODUCT_BUNDLE_IDENTIFIER = x.RHPreviewCellExample; 354 | PRODUCT_NAME = "$(TARGET_NAME)"; 355 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 356 | SWIFT_VERSION = 4.0; 357 | }; 358 | name = Release; 359 | }; 360 | /* End XCBuildConfiguration section */ 361 | 362 | /* Begin XCConfigurationList section */ 363 | B12B17DC1D9A5CDC00F9AC35 /* Build configuration list for PBXProject "RHPreviewCellExample" */ = { 364 | isa = XCConfigurationList; 365 | buildConfigurations = ( 366 | B12B17F11D9A5CDC00F9AC35 /* Debug */, 367 | B12B17F21D9A5CDC00F9AC35 /* Release */, 368 | ); 369 | defaultConfigurationIsVisible = 0; 370 | defaultConfigurationName = Release; 371 | }; 372 | B12B17F31D9A5CDC00F9AC35 /* Build configuration list for PBXNativeTarget "RHPreviewCellExample" */ = { 373 | isa = XCConfigurationList; 374 | buildConfigurations = ( 375 | B12B17F41D9A5CDC00F9AC35 /* Debug */, 376 | B12B17F51D9A5CDC00F9AC35 /* Release */, 377 | ); 378 | defaultConfigurationIsVisible = 0; 379 | defaultConfigurationName = Release; 380 | }; 381 | /* End XCConfigurationList section */ 382 | }; 383 | rootObject = B12B17D91D9A5CDC00F9AC35 /* Project object */; 384 | } 385 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/RHPreviewCellExample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SuppressBuildableAutocreation 6 | 7 | B12B17E01D9A5CDC00F9AC35 8 | 9 | primary 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | @UIApplicationMain 4 | class AppDelegate: UIResponder, UIApplicationDelegate { 5 | 6 | var window: UIWindow? 7 | 8 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 9 | 10 | let windowFrame = UIScreen.main.bounds 11 | window = UIWindow(frame: windowFrame) 12 | 13 | let mainVC = ViewController(withMock: RHMockCellsModel()) 14 | mainVC.title = "RHPreviewCell" 15 | 16 | let navigationController = UINavigationController(rootViewController: mainVC) 17 | window?.rootViewController = navigationController 18 | window?.makeKeyAndVisible() 19 | 20 | return true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | } 43 | ], 44 | "info" : { 45 | "version" : 1, 46 | "author" : "xcode" 47 | } 48 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.56.19.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_1.imageset/Screen Shot 2016-09-25 at 19.56.19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_1.imageset/Screen Shot 2016-09-25 at 19.56.19.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.54.14.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_2.imageset/Screen Shot 2016-09-25 at 19.54.14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_2.imageset/Screen Shot 2016-09-25 at 19.54.14.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.54.00.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_3.imageset/Screen Shot 2016-09-25 at 19.54.00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/other_3.imageset/Screen Shot 2016-09-25 at 19.54.00.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.53.41.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_1.imageset/Screen Shot 2016-09-25 at 19.53.41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_1.imageset/Screen Shot 2016-09-25 at 19.53.41.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_2.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.56.01.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_2.imageset/Screen Shot 2016-09-25 at 19.56.01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_2.imageset/Screen Shot 2016-09-25 at 19.56.01.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_3.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.55.50.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_3.imageset/Screen Shot 2016-09-25 at 19.55.50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_3.imageset/Screen Shot 2016-09-25 at 19.55.50.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_4.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Screen Shot 2016-09-25 at 19.55.24.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_4.imageset/Screen Shot 2016-09-25 at 19.55.24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/Example/RHPreviewCellExample/RHPreviewCellExample/Assets.xcassets/warsaw_4.imageset/Screen Shot 2016-09-25 at 19.55.24.png -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/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 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/DetailsViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class DetailsViewController: UIViewController { 4 | 5 | fileprivate let image: UIImage 6 | 7 | init(withImage image: UIImage) { 8 | self.image = image 9 | 10 | super.init(nibName: nil, bundle: nil) 11 | } 12 | 13 | required init?(coder aDecoder: NSCoder) { 14 | fatalError("init(coder:) has not been implemented") 15 | } 16 | 17 | override func loadView() { 18 | view = DetailsView() 19 | } 20 | 21 | func castView() -> DetailsView { 22 | return view as! DetailsView 23 | } 24 | 25 | override func viewDidAppear(_ animated: Bool) { 26 | super.viewDidAppear(animated) 27 | 28 | showImage() 29 | } 30 | 31 | func showImage() { 32 | castView().imageView.alpha = 0 33 | castView().setImage(image) 34 | 35 | UIView.animate(withDuration: 0.2, animations: { [weak self] in 36 | self?.castView().imageView.alpha = 1 37 | }) 38 | } 39 | } 40 | 41 | class DetailsView: UIView { 42 | 43 | fileprivate let imageView = UIImageView() 44 | 45 | init() { 46 | super.init(frame: CGRect.zero) 47 | 48 | backgroundColor = UIColor.white 49 | addSubview(imageView) 50 | } 51 | 52 | required init?(coder aDecoder: NSCoder) { 53 | fatalError("init(coder:) has not been implemented") 54 | } 55 | 56 | override func layoutSubviews() { 57 | super.layoutSubviews() 58 | 59 | let edgeSize = CGFloat(300) 60 | imageView.frame = CGRect(x: 0, y: 0, width: edgeSize, height: edgeSize) 61 | imageView.center = center 62 | } 63 | 64 | func setImage(_ image: UIImage) { 65 | imageView.image = image 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/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 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/MainControllerView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | class MainControllerView: UIView { 4 | 5 | var tableView: UITableView! 6 | 7 | override func layoutSubviews() { 8 | super.layoutSubviews() 9 | 10 | tableView.frame = bounds 11 | } 12 | 13 | func set(tableView: UITableView) { 14 | self.tableView = tableView 15 | 16 | addSubview(self.tableView) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/NextViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NextViewController.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class NextViewController: UIViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | 16 | } 17 | 18 | override func loadView() { 19 | view = NextView() 20 | } 21 | 22 | func castView() -> NextView { 23 | return view as! NextView 24 | } 25 | 26 | override func viewDidAppear(_ animated: Bool) { 27 | super.viewDidAppear(animated) 28 | 29 | } 30 | } 31 | 32 | class NextView: UIView { 33 | 34 | let loadSpinner = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.gray) 35 | 36 | init() { 37 | super.init(frame: CGRect.zero) 38 | 39 | backgroundColor = UIColor.white 40 | 41 | addSubview(loadSpinner) 42 | loadSpinner.startAnimating() 43 | } 44 | 45 | required init?(coder aDecoder: NSCoder) { 46 | fatalError("init(coder:) has not been implemented") 47 | } 48 | 49 | override func layoutSubviews() { 50 | super.layoutSubviews() 51 | 52 | loadSpinner.frame = CGRect(x: 0, y: 0, width: 50, height: 50) 53 | loadSpinner.center = center 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/RHMockData.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | struct RHMockTileModel { 4 | let image: UIImage 5 | 6 | init(imageName name: String) { 7 | image = UIImage(named: name)! 8 | } 9 | } 10 | 11 | protocol RHMockCellModelProtocol { 12 | var title: String { get } 13 | var tiles: [RHMockTileModel] { get set } 14 | } 15 | 16 | struct RHMockCellModel_1: RHMockCellModelProtocol { 17 | let title: String = "Warsaw Photos" 18 | var tiles: [RHMockTileModel] = { 19 | var result = [RHMockTileModel]() 20 | for index in 1...4 { 21 | result.append(RHMockTileModel(imageName: "warsaw_\(index)")) 22 | } 23 | return result 24 | }() 25 | } 26 | 27 | struct RHMockCellModel_2: RHMockCellModelProtocol { 28 | let title: String = "Other Photos" 29 | var tiles: [RHMockTileModel] = { 30 | var result = [RHMockTileModel]() 31 | for index in 1...3 { 32 | result.append(RHMockTileModel(imageName: "other_\(index)")) 33 | } 34 | return result 35 | }() 36 | } 37 | 38 | class RHMockCellsModel { 39 | let cells: [RHMockCellModelProtocol] = [ 40 | RHMockCellModel_1(), 41 | RHMockCellModel_2() 42 | ] 43 | } 44 | 45 | -------------------------------------------------------------------------------- /Example/RHPreviewCellExample/RHPreviewCellExample/ViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import RHPreviewCell 3 | 4 | class ViewController: UIViewController { 5 | 6 | fileprivate let reuseCellIdentifier = "RHPreviewCell_id" 7 | fileprivate let mockModel: RHMockCellsModel 8 | 9 | init(withMock mock: RHMockCellsModel) { 10 | mockModel = mock 11 | 12 | super.init(nibName: nil, bundle: nil) 13 | } 14 | 15 | required init?(coder aDecoder: NSCoder) { 16 | fatalError("init(coder:) has not been implemented") 17 | } 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | 22 | setupTableView() 23 | } 24 | 25 | override func loadView() { 26 | view = MainControllerView() 27 | } 28 | 29 | fileprivate func castView() -> MainControllerView { 30 | return view as! MainControllerView 31 | } 32 | 33 | func setupTableView() { 34 | let tableView = UITableView(frame: CGRect.zero, style: .grouped) 35 | tableView.register(UITableViewCell.classForCoder(), forCellReuseIdentifier: "cell") 36 | tableView.delegate = self 37 | tableView.dataSource = self 38 | 39 | tableView.register(RHPreviewTableViewCell.classForCoder(), forCellReuseIdentifier: reuseCellIdentifier) 40 | 41 | castView().set(tableView: tableView) 42 | } 43 | 44 | fileprivate func pushNextViewController() { 45 | let nextVC = NextViewController() 46 | navigationController?.pushViewController(nextVC, animated: true) 47 | } 48 | 49 | fileprivate func presentDetailsViewController(withImage image: UIImage) { 50 | let detailsVC = DetailsViewController(withImage: image) 51 | let dismissButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(dismissDetailController)) 52 | let navController = UINavigationController(rootViewController: detailsVC) 53 | detailsVC.navigationItem.rightBarButtonItem = dismissButton 54 | 55 | present(navController, animated: true, completion: nil) 56 | } 57 | 58 | @objc fileprivate func dismissDetailController() { 59 | self.dismiss(animated: true, completion: nil) 60 | } 61 | } 62 | 63 | extension ViewController: UITableViewDelegate { 64 | 65 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 66 | tableView.deselectRow(at: indexPath, animated: true) 67 | 68 | pushNextViewController() 69 | } 70 | } 71 | 72 | extension ViewController: UITableViewDataSource { 73 | 74 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 75 | return mockModel.cells.count 76 | } 77 | 78 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 79 | return CGFloat(65) 80 | } 81 | 82 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 83 | let cell = tableView.dequeueReusableCell(withIdentifier: reuseCellIdentifier) as! RHPreviewTableViewCell 84 | cell.accessoryType = .disclosureIndicator 85 | cell.delegate = self 86 | cell.dataSource = self 87 | cell.textLabel?.text = mockModel.cells[indexPath.row].title 88 | cell.textLabel?.font = UIFont(name: "Didot", size: 20) 89 | 90 | return cell 91 | } 92 | } 93 | 94 | extension ViewController: RHPreviewCellDelegate { 95 | 96 | func previewCell(_ cell: RHPreviewTableViewCell, didSelectTileAtIndex indexValue: RHTappedTileIndexValue) { 97 | let cellIndex = castView().tableView.indexPath(for: cell)!.row 98 | 99 | switch indexValue { 100 | case .tileTapped(let index): 101 | print("😲 \(index) has been selected") 102 | 103 | let tiles = mockModel.cells[cellIndex].tiles 104 | let tileItem = tiles[index] 105 | 106 | presentDetailsViewController(withImage: tileItem.image) 107 | case .fingerReleased: 108 | print("🖖🏽 Finger has been relesed") 109 | } 110 | } 111 | } 112 | 113 | extension ViewController: RHPreviewCellDataSource { 114 | 115 | func previewCellNumberOfTiles(_ cell: RHPreviewTableViewCell) -> Int { 116 | let cellIndex = castView().tableView.indexPath(for: cell)!.row 117 | let tiles = mockModel.cells[cellIndex].tiles 118 | 119 | return tiles.count 120 | } 121 | 122 | func previewCell(_ cell: RHPreviewTableViewCell, tileForIndex: Int) -> RHPreviewTileView { 123 | let cellIndex = castView().tableView.indexPath(for: cell)!.row 124 | let tiles = mockModel.cells[cellIndex].tiles 125 | let tileItem = tiles[tileForIndex] 126 | 127 | let tile = RHPreviewTileView(frame: CGRect.zero) 128 | tile.image = tileItem.image 129 | 130 | return tile 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Robert Herdzik 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 | ![](./ReadmeAssets/RHPreviewCellHeadLogo.gif) 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/RHPreviewCell.svg?style=flat)](http://cocoadocs.org/docsets/RHPreviewCell) 4 | [![License](https://img.shields.io/cocoapods/l/BadgeSwift.svg?style=flat)](/LICENSE) 5 | [![Platform](http://img.shields.io/badge/platform-ios-blue.svg?style=flat)](https://developer.apple.com/iphone/index.action) 6 | [![Language](http://img.shields.io/badge/language-swift-brightgreen.svg?style=flat)](https://developer.apple.com/swift) 7 | [![Twitter](https://img.shields.io/twitter/follow/Roherdzik.svg?style=social&label=Follow)](https://twitter.com/Roherdzik) 8 | 9 | # RHPreviewCell 🌶 10 | I envied so much Spotify iOS app this great playlist preview cell 😍, I decided to create my own one 🌶. Now you can give your users ability to quick check "what content is hidden under your UITableViewCell". Great think is that this Library not requires 3D Touch support from user device💥. 11 | 12 | ## Play with it 😎 13 |

14 | 15 |

16 | 17 | ## Installation 18 | You can install RHPreviewCell library using Cocoapods: 19 | ``` 20 | pod 'RHPreviewCell' 21 | ``` 22 | or you can simply copy ```RHPreviewCellSource``` folder to your project. 23 | 24 | ## Usage 25 | To fully integrate RHPreviewCell with your Table View you just need to use RHPreviewCell like normal UITableViewCell in terms of your TableView data source 'cellForRowAtIndexPath' method. 26 | 27 | ```swift 28 | func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 29 | // Fetching already registered RHPreviewTableViewCell 30 | let cell = tableView.dequeueReusableCellWithIdentifier(reuseCellIdentifier) as! RHPreviewTableViewCell 31 | 32 | // Delegate using which, tiles will talk to your class 33 | cell.delegate = self 34 | // Data source for feed small tiles 🚼 35 | cell.dataSource = self 36 | 37 | return cell 38 | } 39 | ``` 40 | 💡 Important thing is that your View Controller needs to comform to ``` RHPreviewCellDataSource``` and ``` RHPreviewCellDelegate``` protocols. In that way you will be able to provide all neccesary data for ``` RHPreviewTalveViewCell``` tiles. 41 | 42 | ### RHPreviewCellDataSource 43 | ```swift 44 | func previewCellNumberOfTiles(cell: RHPreviewTableViewCell) -> Int 45 | func previewCell(cell: RHPreviewTableViewCell, tileForIndex: Int) -> RHPreviewTileView 46 | ``` 47 | 48 | ### RHPreviewCellDelegate 49 | ```swift 50 | func previewCell(cell: RHPreviewTableViewCell, didSelectTileAtIndex indexValue: RHTappedTileIndexValue) 51 | ``` 52 | And thats it! 💥 You have already integrete Library with your Table View 🎉 53 | 54 | ## Implementation hint from me 55 | ### [Q] How may look like tiles communiacation with my class❓🤔 56 | As I said using ``` RHPreviewCellDelegate``` . I will show you how to handle it for particular cell: 57 | 58 | ```swift 59 | func previewCell(cell: RHPreviewTableViewCell, didSelectTileAtIndex indexValue: RHTappedTileIndexValue) { 60 | let cellIndex = tableView.indexPathForCell(cell)!.row 61 | 62 | switch indexValue { 63 | case .TileTapped(let index): 64 | print("😲 \(index) has been selected") 65 | case .FingerReleased: 66 | print("🖖🏽 Finger has been released (non of tiles has been tapped)") 67 | } 68 | } 69 | ``` 70 | 71 | ... as you can see delegate method as a argument takes ``` RHTappedTileIndexValue``` , yup... it is swift enum using which you will gather information about tapped tile (```.TileTapped(let index)``` ) or even whether user released his finger out of tiles area (```.FingerReleased``` ). 72 | 73 | ## Swift support 74 | | Library ver| Swift ver| 75 | | ------------- |:-------------:| 76 | | 1.0.1 | 2.2 | 77 | | 1.0.2 | 2.3 | 78 | | 1.0.3 | 3.0 | 79 | | 1.1.0 | 4.0 | 80 | 81 | 82 | 83 | ## Check the Demo project 84 | 85 | Please check out the demo project, you can see there how Library has been implemented in details. 86 | 87 | -------------------------------------------------------------------------------- /RHPReviewCell/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSPrincipalClass 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPReviewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewCell.h 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 11/01/2018. 6 | // Copyright © 2018 Robert Herdzik. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for RHPreviewCell. 12 | FOUNDATION_EXPORT double RHPreviewCellVersionNumber; 13 | 14 | //! Project version string for RHPreviewCell. 15 | FOUNDATION_EXPORT const unsigned char RHPreviewCellVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPreviewCellSource/RHPreviewTableViewCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewTableViewCell.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | open class RHPreviewTableViewCell: UITableViewCell { 12 | fileprivate var tilesManagerView: RHPreviewTilesContainerView! 13 | 14 | open weak var delegate: RHPreviewCellDelegate? 15 | open weak var dataSource: RHPreviewCellDataSource? 16 | 17 | var pressDuration = CFTimeInterval(0.4) 18 | 19 | override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 20 | super.init(style: style, reuseIdentifier: reuseIdentifier) 21 | 22 | addGesture() 23 | } 24 | 25 | required public init?(coder aDecoder: NSCoder) { 26 | fatalError("init(coder:) has not been implemented") 27 | } 28 | 29 | fileprivate func fulfilTilesContent() { 30 | guard let numberOfTiles = dataSource?.previewCellNumberOfTiles(self) else { 31 | assertionFailure("previewCellNumberOfTiles not implemented 😥") 32 | return 33 | } 34 | 35 | var newTiles = [RHPreviewTileView]() 36 | for index in 0...numberOfTiles - 1 { 37 | if let tile = dataSource?.previewCell(self, tileForIndex: index) { 38 | newTiles.append(tile) 39 | } 40 | } 41 | 42 | tilesManagerView.reloadTiles(withNew: newTiles) 43 | } 44 | 45 | @objc func triggerLongPress(with recognizer: UILongPressGestureRecognizer) { 46 | creteTilesPresenterIfNecessary() 47 | 48 | switch recognizer.state { 49 | case .began: 50 | showTiles { [weak self] in self?.passFingerPositionToPresenter(from: recognizer) } 51 | case .changed: 52 | passFingerPositionToPresenter(from: recognizer) 53 | case .cancelled, .ended, .failed: 54 | 55 | delegate?.previewCell(self, didSelectTileAtIndex: getSelectedTileIndexValue()) 56 | hideTiles() 57 | 58 | default: 59 | print("default") 60 | } 61 | } 62 | } 63 | 64 | private extension RHPreviewTableViewCell { 65 | 66 | func addGesture() { 67 | let longPressGesture = UILongPressGestureRecognizer(target: self, action: #selector(triggerLongPress)) 68 | longPressGesture.minimumPressDuration = pressDuration 69 | 70 | contentView.addGestureRecognizer(longPressGesture) 71 | } 72 | 73 | func creteTilesPresenterIfNecessary() { 74 | if tilesManagerView != nil { return } 75 | 76 | tilesManagerView = RHPreviewTilesContainerView(frame: bounds) 77 | tilesManagerView.backgroundColor = UIColor.black.withAlphaComponent(0.15) 78 | contentView.addSubview(tilesManagerView!) 79 | 80 | fulfilTilesContent() 81 | } 82 | 83 | func showTiles(with completion: @escaping RHTilesAnimationComplitionBlock) { 84 | tilesManagerView.isHidden = false 85 | tilesManagerView.showElements(with: completion) 86 | } 87 | 88 | func hideTiles() { 89 | tilesManagerView.hideElements { [weak self] in self?.tilesManagerView.isHidden = true } 90 | } 91 | 92 | func passFingerPositionToPresenter(from recognizer: UILongPressGestureRecognizer) { 93 | let fingerPosition = recognizer.location(in: contentView) 94 | tilesManagerView.gestureOffset(fingerPosition) 95 | } 96 | 97 | func getSelectedTileIndexValue() -> RHTappedTileIndexValue { 98 | if tilesManagerView.selectedTileIndex < 0 { 99 | return RHTappedTileIndexValue.fingerReleased 100 | } else { 101 | return RHTappedTileIndexValue.tileTapped(tilesManagerView.selectedTileIndex) 102 | } 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPreviewCellSource/RHPreviewTableViewCellTilesAnimationProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewTableViewCellTilesAnimationProtocol.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | protocol RHPreviewTableViewCellTilesAnimationProtocol { 10 | func performShowAnimation(for tiles: [RHPreviewTileView], completion: @escaping RHTilesAnimationComplitionBlock) 11 | func performHideAnimation(for tiles: [RHPreviewTileView], completion: @escaping RHTilesAnimationComplitionBlock) 12 | func performMagnifyAnimation(for tile: RHPreviewTileView) 13 | } 14 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPreviewCellSource/RHPreviewTableViewCellTilesAnimator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewTableViewCellTilesAnimator.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class RHPreviewTableViewCellTilesAnimator: RHPreviewTableViewCellTilesAnimationProtocol { 12 | 13 | func performShowAnimation(for tiles: [RHPreviewTileView], completion: @escaping RHTilesAnimationComplitionBlock) { 14 | for tile in tiles { 15 | tile.isHidden = false 16 | UIView.animate(withDuration: 0.3, 17 | animations: { 18 | tile.alpha = CGFloat(0.3) 19 | }, completion: { _ in 20 | if tile == tiles.last { 21 | completion() 22 | } 23 | }) 24 | } 25 | } 26 | 27 | func performHideAnimation(for tiles: [RHPreviewTileView], completion: @escaping RHTilesAnimationComplitionBlock) { 28 | for tile in tiles { 29 | UIView.animate(withDuration: 0.2, 30 | animations: { 31 | tile.alpha = CGFloat(0.0) 32 | }, completion: { _ in 33 | tile.isHidden = true 34 | 35 | if tile == tiles.last { 36 | completion() 37 | } 38 | }) 39 | } 40 | } 41 | 42 | func performMagnifyAnimation(for tile: RHPreviewTileView) { 43 | UIView.animate(withDuration: 0.5, 44 | delay: 0, 45 | usingSpringWithDamping: 0.4, 46 | initialSpringVelocity: 0.9, 47 | options: UIViewAnimationOptions(), 48 | animations: { 49 | let scale = CGFloat(0.89) 50 | tile.transform = CGAffineTransform(scaleX: scale, y: scale) 51 | }, completion: nil) 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPreviewCellSource/RHPreviewTileView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewTileView.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | protocol RHPreviewTileViewProtocol { 12 | var isSelected: Bool { get } 13 | 14 | func setSeleted(_ isSelected :Bool) 15 | } 16 | 17 | open class RHPreviewTileView: UIImageView { 18 | fileprivate(set) var isSelected = false 19 | 20 | func setSeleted(_ isSelected :Bool) { 21 | self.isSelected = isSelected 22 | 23 | alpha = isSelected ? CGFloat(1) : CGFloat(0.2) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /RHPReviewCell/RHPreviewCellSource/RHPreviewTilesContainerView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RHPreviewTilesContainerView.swift 3 | // RHPreviewCell 4 | // 5 | // Created by Robert Herdzik on 25/09/2016. 6 | // Copyright © 2016 Robert. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | typealias RHTilesAnimationComplitionBlock = ()->() 12 | 13 | public enum RHTappedTileIndexValue { 14 | case tileTapped(Int) 15 | case fingerReleased 16 | } 17 | 18 | public protocol RHPreviewCellDelegate: class { 19 | func previewCell(_ cell: RHPreviewTableViewCell, didSelectTileAtIndex indexValue: RHTappedTileIndexValue) 20 | } 21 | 22 | public protocol RHPreviewCellDataSource: class { 23 | func previewCellNumberOfTiles(_ cell: RHPreviewTableViewCell) -> Int 24 | func previewCell(_ cell: RHPreviewTableViewCell, tileForIndex: Int) -> RHPreviewTileView 25 | } 26 | 27 | 28 | class RHPreviewTilesContainerView: UIView { 29 | fileprivate let tilesAnimator: RHPreviewTableViewCellTilesAnimator 30 | fileprivate var tiles = [RHPreviewTileView]() 31 | 32 | var selectedTileIndex = -1 { 33 | didSet(oldValue) { 34 | if (oldValue >= 0) { 35 | tiles[oldValue].transform = CGAffineTransform.identity 36 | } 37 | 38 | if oldValue != selectedTileIndex && selectedTileIndex >= 0 { 39 | let selectedTile = tiles[selectedTileIndex] 40 | performMagnify(for: selectedTile) 41 | } 42 | } 43 | } 44 | 45 | override convenience init(frame: CGRect) { 46 | let tileAnimator = RHPreviewTableViewCellTilesAnimator() 47 | 48 | self.init(frame: frame, tilesAnimator: tileAnimator) 49 | } 50 | 51 | init(frame: CGRect, tilesAnimator: RHPreviewTableViewCellTilesAnimator) { 52 | self.tilesAnimator = tilesAnimator 53 | 54 | super.init(frame: frame) 55 | 56 | addTilesAsSubview() 57 | } 58 | 59 | required init?(coder aDecoder: NSCoder) { 60 | fatalError("init(coder:) has not been implemented") 61 | } 62 | 63 | override func layoutSubviews() { 64 | super.layoutSubviews() 65 | 66 | layoutTiles() 67 | } 68 | 69 | func reloadTiles(withNew newTiles: [RHPreviewTileView]) { 70 | removeTilesFromSuperview() 71 | tiles.removeAll() 72 | 73 | tiles = newTiles 74 | addTilesAsSubview() 75 | } 76 | 77 | func gestureOffset(_ point: CGPoint) { 78 | // If tile has not been found it means that user finger wasn't above one of tile, we treat this situation as a 'Cancel' 79 | guard let tile = getTileFrom(point: point) else { 80 | selectedTileIndex = -1 81 | return 82 | } 83 | 84 | selectedTileIndex = getIndex(of: tile) 85 | } 86 | 87 | func hideElements(with completion: @escaping RHTilesAnimationComplitionBlock) { 88 | tilesAnimator.performHideAnimation(for: tiles, completion: completion) 89 | } 90 | 91 | func showElements(with completion: @escaping RHTilesAnimationComplitionBlock) { 92 | let completionBlock = { [weak self] in 93 | self?.resetPresenterState() 94 | completion() 95 | } 96 | 97 | tilesAnimator.performShowAnimation(for: tiles, completion: completionBlock) 98 | } 99 | } 100 | 101 | private extension RHPreviewTilesContainerView { 102 | 103 | func addTilesAsSubview() { 104 | _ = tiles.map { 105 | addSubview($0) 106 | $0.isHidden = true 107 | $0.alpha = 0 108 | } 109 | } 110 | 111 | func removeTilesFromSuperview() { 112 | _ = tiles.map { $0.removeFromSuperview() } 113 | } 114 | 115 | func layoutTiles() { 116 | let horizontalSpacing = CGFloat(2) 117 | let tileOffset = CGFloat(-4) 118 | var prevTileMaxX = horizontalSpacing 119 | for tile in tiles { 120 | let tileBorderSize = bounds.height + tileOffset 121 | let frame = CGRect(x: prevTileMaxX, y: -tileOffset/2, width: tileBorderSize, height: tileBorderSize) 122 | tile.frame = frame 123 | 124 | prevTileMaxX = tile.frame.maxX + horizontalSpacing 125 | } 126 | } 127 | 128 | func getTileFrom(point: CGPoint) -> RHPreviewTileView? { 129 | var resultTile: RHPreviewTileView? 130 | 131 | for tile in tiles { 132 | tile.setSeleted(false) 133 | 134 | let convertedRect = convert(tile.frame, to: self) 135 | if convertedRect.contains(point) { 136 | tile.setSeleted(true) 137 | resultTile = tile 138 | } 139 | } 140 | 141 | return resultTile 142 | } 143 | 144 | func performMagnify(for tile: RHPreviewTileView) { 145 | tilesAnimator.performMagnifyAnimation(for: tile) 146 | } 147 | 148 | func getIndex(of tile: RHPreviewTileView) -> Int { 149 | return tiles.index(of: tile) ?? 0 150 | } 151 | 152 | func resetPresenterState() { 153 | selectedTileIndex = -1 154 | } 155 | } 156 | -------------------------------------------------------------------------------- /RHPreviewCell.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "RHPreviewCell" 3 | s.version = "1.1.0" 4 | s.summary = "Now you can add extra feature to your TableViewCell, which provides your users to preview content behind the cell." 5 | s.description = "Now you can add extra feature to your TableViewCell, which provides your users to preview content behind the cell." 6 | s.homepage = "https://github.com/robertherdzik/RHPreviewCell" 7 | 8 | # ――― Spec License ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 9 | s.license = { :type => "MIT", :file => "LICENSE" } 10 | 11 | # ――― Author Metadata ――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 12 | s.author = { "Robert Herdzik" => "robert.herdzik@yahoo.com" } 13 | 14 | # ――― Source Location ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 15 | s.source = { 16 | :git => "https://github.com/robertherdzik/RHPreviewCell.git", 17 | :tag => s.version.to_s 18 | } 19 | 20 | s.ios.deployment_target = '9.0' 21 | s.requires_arc = true 22 | 23 | # ――― Source Code ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― # 24 | s.ios.source_files = "RHPreviewCell/**/*.{swift}" 25 | 26 | end 27 | -------------------------------------------------------------------------------- /RHPreviewCell.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | B1442EBC2008053E00138D39 /* RHPreviewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = B1442EBA2008053E00138D39 /* RHPreviewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | B1442EC82008057100138D39 /* RHPreviewTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1442EC32008057100138D39 /* RHPreviewTableViewCell.swift */; }; 12 | B1442EC92008057100138D39 /* RHPreviewTilesContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1442EC42008057100138D39 /* RHPreviewTilesContainerView.swift */; }; 13 | B1442ECA2008057100138D39 /* RHPreviewTileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1442EC52008057100138D39 /* RHPreviewTileView.swift */; }; 14 | B1442ECB2008057100138D39 /* RHPreviewTableViewCellTilesAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1442EC62008057100138D39 /* RHPreviewTableViewCellTilesAnimator.swift */; }; 15 | B1442ECC2008057100138D39 /* RHPreviewTableViewCellTilesAnimationProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1442EC72008057100138D39 /* RHPreviewTableViewCellTilesAnimationProtocol.swift */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | B1442EB72008053E00138D39 /* RHPreviewCell.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RHPreviewCell.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 20 | B1442EBA2008053E00138D39 /* RHPreviewCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RHPreviewCell.h; sourceTree = ""; }; 21 | B1442EBB2008053E00138D39 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 22 | B1442EC32008057100138D39 /* RHPreviewTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHPreviewTableViewCell.swift; sourceTree = ""; }; 23 | B1442EC42008057100138D39 /* RHPreviewTilesContainerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHPreviewTilesContainerView.swift; sourceTree = ""; }; 24 | B1442EC52008057100138D39 /* RHPreviewTileView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHPreviewTileView.swift; sourceTree = ""; }; 25 | B1442EC62008057100138D39 /* RHPreviewTableViewCellTilesAnimator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHPreviewTableViewCellTilesAnimator.swift; sourceTree = ""; }; 26 | B1442EC72008057100138D39 /* RHPreviewTableViewCellTilesAnimationProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RHPreviewTableViewCellTilesAnimationProtocol.swift; sourceTree = ""; }; 27 | /* End PBXFileReference section */ 28 | 29 | /* Begin PBXFrameworksBuildPhase section */ 30 | B1442EB32008053E00138D39 /* Frameworks */ = { 31 | isa = PBXFrameworksBuildPhase; 32 | buildActionMask = 2147483647; 33 | files = ( 34 | ); 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXFrameworksBuildPhase section */ 38 | 39 | /* Begin PBXGroup section */ 40 | B1442EAD2008053E00138D39 = { 41 | isa = PBXGroup; 42 | children = ( 43 | B1442EB92008053E00138D39 /* RHPreviewCell */, 44 | B1442EB82008053E00138D39 /* Products */, 45 | ); 46 | sourceTree = ""; 47 | }; 48 | B1442EB82008053E00138D39 /* Products */ = { 49 | isa = PBXGroup; 50 | children = ( 51 | B1442EB72008053E00138D39 /* RHPreviewCell.framework */, 52 | ); 53 | name = Products; 54 | sourceTree = ""; 55 | }; 56 | B1442EB92008053E00138D39 /* RHPreviewCell */ = { 57 | isa = PBXGroup; 58 | children = ( 59 | B1442EC22008057100138D39 /* RHPreviewCellSource */, 60 | B1442EBA2008053E00138D39 /* RHPreviewCell.h */, 61 | B1442EBB2008053E00138D39 /* Info.plist */, 62 | ); 63 | path = RHPreviewCell; 64 | sourceTree = ""; 65 | }; 66 | B1442EC22008057100138D39 /* RHPreviewCellSource */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | B1442EC32008057100138D39 /* RHPreviewTableViewCell.swift */, 70 | B1442EC42008057100138D39 /* RHPreviewTilesContainerView.swift */, 71 | B1442EC52008057100138D39 /* RHPreviewTileView.swift */, 72 | B1442EC62008057100138D39 /* RHPreviewTableViewCellTilesAnimator.swift */, 73 | B1442EC72008057100138D39 /* RHPreviewTableViewCellTilesAnimationProtocol.swift */, 74 | ); 75 | path = RHPreviewCellSource; 76 | sourceTree = ""; 77 | }; 78 | /* End PBXGroup section */ 79 | 80 | /* Begin PBXHeadersBuildPhase section */ 81 | B1442EB42008053E00138D39 /* Headers */ = { 82 | isa = PBXHeadersBuildPhase; 83 | buildActionMask = 2147483647; 84 | files = ( 85 | B1442EBC2008053E00138D39 /* RHPreviewCell.h in Headers */, 86 | ); 87 | runOnlyForDeploymentPostprocessing = 0; 88 | }; 89 | /* End PBXHeadersBuildPhase section */ 90 | 91 | /* Begin PBXNativeTarget section */ 92 | B1442EB62008053E00138D39 /* RHPreviewCell */ = { 93 | isa = PBXNativeTarget; 94 | buildConfigurationList = B1442EBF2008053E00138D39 /* Build configuration list for PBXNativeTarget "RHPreviewCell" */; 95 | buildPhases = ( 96 | B1442EB22008053E00138D39 /* Sources */, 97 | B1442EB32008053E00138D39 /* Frameworks */, 98 | B1442EB42008053E00138D39 /* Headers */, 99 | B1442EB52008053E00138D39 /* Resources */, 100 | ); 101 | buildRules = ( 102 | ); 103 | dependencies = ( 104 | ); 105 | name = RHPreviewCell; 106 | productName = RHPreviewCell; 107 | productReference = B1442EB72008053E00138D39 /* RHPreviewCell.framework */; 108 | productType = "com.apple.product-type.framework"; 109 | }; 110 | /* End PBXNativeTarget section */ 111 | 112 | /* Begin PBXProject section */ 113 | B1442EAE2008053E00138D39 /* Project object */ = { 114 | isa = PBXProject; 115 | attributes = { 116 | LastUpgradeCheck = 0900; 117 | ORGANIZATIONNAME = "Robert Herdzik"; 118 | TargetAttributes = { 119 | B1442EB62008053E00138D39 = { 120 | CreatedOnToolsVersion = 9.0; 121 | ProvisioningStyle = Automatic; 122 | }; 123 | }; 124 | }; 125 | buildConfigurationList = B1442EB12008053E00138D39 /* Build configuration list for PBXProject "RHPreviewCell" */; 126 | compatibilityVersion = "Xcode 8.0"; 127 | developmentRegion = en; 128 | hasScannedForEncodings = 0; 129 | knownRegions = ( 130 | en, 131 | ); 132 | mainGroup = B1442EAD2008053E00138D39; 133 | productRefGroup = B1442EB82008053E00138D39 /* Products */; 134 | projectDirPath = ""; 135 | projectRoot = ""; 136 | targets = ( 137 | B1442EB62008053E00138D39 /* RHPreviewCell */, 138 | ); 139 | }; 140 | /* End PBXProject section */ 141 | 142 | /* Begin PBXResourcesBuildPhase section */ 143 | B1442EB52008053E00138D39 /* Resources */ = { 144 | isa = PBXResourcesBuildPhase; 145 | buildActionMask = 2147483647; 146 | files = ( 147 | ); 148 | runOnlyForDeploymentPostprocessing = 0; 149 | }; 150 | /* End PBXResourcesBuildPhase section */ 151 | 152 | /* Begin PBXSourcesBuildPhase section */ 153 | B1442EB22008053E00138D39 /* Sources */ = { 154 | isa = PBXSourcesBuildPhase; 155 | buildActionMask = 2147483647; 156 | files = ( 157 | B1442EC82008057100138D39 /* RHPreviewTableViewCell.swift in Sources */, 158 | B1442EC92008057100138D39 /* RHPreviewTilesContainerView.swift in Sources */, 159 | B1442ECA2008057100138D39 /* RHPreviewTileView.swift in Sources */, 160 | B1442ECC2008057100138D39 /* RHPreviewTableViewCellTilesAnimationProtocol.swift in Sources */, 161 | B1442ECB2008057100138D39 /* RHPreviewTableViewCellTilesAnimator.swift in Sources */, 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | }; 165 | /* End PBXSourcesBuildPhase section */ 166 | 167 | /* Begin XCBuildConfiguration section */ 168 | B1442EBD2008053E00138D39 /* Debug */ = { 169 | isa = XCBuildConfiguration; 170 | buildSettings = { 171 | ALWAYS_SEARCH_USER_PATHS = NO; 172 | CLANG_ANALYZER_NONNULL = YES; 173 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 174 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 175 | CLANG_CXX_LIBRARY = "libc++"; 176 | CLANG_ENABLE_MODULES = YES; 177 | CLANG_ENABLE_OBJC_ARC = YES; 178 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 179 | CLANG_WARN_BOOL_CONVERSION = YES; 180 | CLANG_WARN_COMMA = YES; 181 | CLANG_WARN_CONSTANT_CONVERSION = YES; 182 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 183 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 184 | CLANG_WARN_EMPTY_BODY = YES; 185 | CLANG_WARN_ENUM_CONVERSION = YES; 186 | CLANG_WARN_INFINITE_RECURSION = YES; 187 | CLANG_WARN_INT_CONVERSION = YES; 188 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 189 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 190 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 191 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 192 | CLANG_WARN_STRICT_PROTOTYPES = YES; 193 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 194 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 195 | CLANG_WARN_UNREACHABLE_CODE = YES; 196 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 197 | CODE_SIGN_IDENTITY = "iPhone Developer"; 198 | COPY_PHASE_STRIP = NO; 199 | CURRENT_PROJECT_VERSION = 1; 200 | DEBUG_INFORMATION_FORMAT = dwarf; 201 | ENABLE_STRICT_OBJC_MSGSEND = YES; 202 | ENABLE_TESTABILITY = YES; 203 | GCC_C_LANGUAGE_STANDARD = gnu11; 204 | GCC_DYNAMIC_NO_PIC = NO; 205 | GCC_NO_COMMON_BLOCKS = YES; 206 | GCC_OPTIMIZATION_LEVEL = 0; 207 | GCC_PREPROCESSOR_DEFINITIONS = ( 208 | "DEBUG=1", 209 | "$(inherited)", 210 | ); 211 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 212 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 213 | GCC_WARN_UNDECLARED_SELECTOR = YES; 214 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 215 | GCC_WARN_UNUSED_FUNCTION = YES; 216 | GCC_WARN_UNUSED_VARIABLE = YES; 217 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 218 | MTL_ENABLE_DEBUG_INFO = YES; 219 | ONLY_ACTIVE_ARCH = YES; 220 | SDKROOT = iphoneos; 221 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 222 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 223 | VERSIONING_SYSTEM = "apple-generic"; 224 | VERSION_INFO_PREFIX = ""; 225 | }; 226 | name = Debug; 227 | }; 228 | B1442EBE2008053E00138D39 /* Release */ = { 229 | isa = XCBuildConfiguration; 230 | buildSettings = { 231 | ALWAYS_SEARCH_USER_PATHS = NO; 232 | CLANG_ANALYZER_NONNULL = YES; 233 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 234 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 235 | CLANG_CXX_LIBRARY = "libc++"; 236 | CLANG_ENABLE_MODULES = YES; 237 | CLANG_ENABLE_OBJC_ARC = YES; 238 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 239 | CLANG_WARN_BOOL_CONVERSION = YES; 240 | CLANG_WARN_COMMA = YES; 241 | CLANG_WARN_CONSTANT_CONVERSION = YES; 242 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 243 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 244 | CLANG_WARN_EMPTY_BODY = YES; 245 | CLANG_WARN_ENUM_CONVERSION = YES; 246 | CLANG_WARN_INFINITE_RECURSION = YES; 247 | CLANG_WARN_INT_CONVERSION = YES; 248 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 249 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 250 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 251 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 252 | CLANG_WARN_STRICT_PROTOTYPES = YES; 253 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 254 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 255 | CLANG_WARN_UNREACHABLE_CODE = YES; 256 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 257 | CODE_SIGN_IDENTITY = "iPhone Developer"; 258 | COPY_PHASE_STRIP = NO; 259 | CURRENT_PROJECT_VERSION = 1; 260 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 261 | ENABLE_NS_ASSERTIONS = NO; 262 | ENABLE_STRICT_OBJC_MSGSEND = YES; 263 | GCC_C_LANGUAGE_STANDARD = gnu11; 264 | GCC_NO_COMMON_BLOCKS = YES; 265 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 266 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 267 | GCC_WARN_UNDECLARED_SELECTOR = YES; 268 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 269 | GCC_WARN_UNUSED_FUNCTION = YES; 270 | GCC_WARN_UNUSED_VARIABLE = YES; 271 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 272 | MTL_ENABLE_DEBUG_INFO = NO; 273 | SDKROOT = iphoneos; 274 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 275 | VALIDATE_PRODUCT = YES; 276 | VERSIONING_SYSTEM = "apple-generic"; 277 | VERSION_INFO_PREFIX = ""; 278 | }; 279 | name = Release; 280 | }; 281 | B1442EC02008053E00138D39 /* Debug */ = { 282 | isa = XCBuildConfiguration; 283 | buildSettings = { 284 | CODE_SIGN_IDENTITY = ""; 285 | CODE_SIGN_STYLE = Automatic; 286 | DEFINES_MODULE = YES; 287 | DYLIB_COMPATIBILITY_VERSION = 1; 288 | DYLIB_CURRENT_VERSION = 1; 289 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 290 | INFOPLIST_FILE = RHPreviewCell/Info.plist; 291 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 292 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 293 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 294 | PRODUCT_BUNDLE_IDENTIFIER = x.RHPreviewCell; 295 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 296 | SKIP_INSTALL = YES; 297 | SWIFT_VERSION = 4.0; 298 | TARGETED_DEVICE_FAMILY = "1,2"; 299 | }; 300 | name = Debug; 301 | }; 302 | B1442EC12008053E00138D39 /* Release */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | CODE_SIGN_IDENTITY = ""; 306 | CODE_SIGN_STYLE = Automatic; 307 | DEFINES_MODULE = YES; 308 | DYLIB_COMPATIBILITY_VERSION = 1; 309 | DYLIB_CURRENT_VERSION = 1; 310 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 311 | INFOPLIST_FILE = RHPreviewCell/Info.plist; 312 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 313 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 314 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 315 | PRODUCT_BUNDLE_IDENTIFIER = x.RHPreviewCell; 316 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 317 | SKIP_INSTALL = YES; 318 | SWIFT_VERSION = 4.0; 319 | TARGETED_DEVICE_FAMILY = "1,2"; 320 | }; 321 | name = Release; 322 | }; 323 | /* End XCBuildConfiguration section */ 324 | 325 | /* Begin XCConfigurationList section */ 326 | B1442EB12008053E00138D39 /* Build configuration list for PBXProject "RHPreviewCell" */ = { 327 | isa = XCConfigurationList; 328 | buildConfigurations = ( 329 | B1442EBD2008053E00138D39 /* Debug */, 330 | B1442EBE2008053E00138D39 /* Release */, 331 | ); 332 | defaultConfigurationIsVisible = 0; 333 | defaultConfigurationName = Release; 334 | }; 335 | B1442EBF2008053E00138D39 /* Build configuration list for PBXNativeTarget "RHPreviewCell" */ = { 336 | isa = XCConfigurationList; 337 | buildConfigurations = ( 338 | B1442EC02008053E00138D39 /* Debug */, 339 | B1442EC12008053E00138D39 /* Release */, 340 | ); 341 | defaultConfigurationIsVisible = 0; 342 | defaultConfigurationName = Release; 343 | }; 344 | /* End XCConfigurationList section */ 345 | }; 346 | rootObject = B1442EAE2008053E00138D39 /* Project object */; 347 | } 348 | -------------------------------------------------------------------------------- /RHPreviewCell.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RHPreviewCell.xcodeproj/xcuserdata/robertherdzik.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | RHPreviewCell.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ReadmeAssets/RHPreviewCellHeadLogo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/ReadmeAssets/RHPreviewCellHeadLogo.gif -------------------------------------------------------------------------------- /ReadmeAssets/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertherdzik/RHPreviewCell/c8c2a75905e250c84836bcc736fe40e4cc3cb3eb/ReadmeAssets/demo.gif -------------------------------------------------------------------------------- /TODO.txt: -------------------------------------------------------------------------------- 1 | TODO: 2 | - clean up code (add more verbose delegate/dataSource methods) 3 | - add documentation for methods 4 | - add limitation of displaying tiles according to available screen space 5 | - add configuration protocol for tiles manager -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-hacker --------------------------------------------------------------------------------