├── .gitignore ├── CHANGELOG.md ├── Classes ├── PMUIViewHelpers.h ├── PMUIViewHelpers.m ├── UIView+PMCopy.h └── UIView+PMCopy.m ├── Example ├── Example.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ └── contents.xcworkspacedata ├── Example.xcworkspace │ └── contents.xcworkspacedata ├── Example │ ├── AppDelegate.h │ ├── AppDelegate.m │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── CircleView.h │ ├── CircleView.m │ ├── CustomView.h │ ├── CustomView.m │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ ├── ProgressView.h │ ├── ProgressView.m │ ├── ViewController.h │ ├── ViewController.m │ ├── image.jpg │ └── main.m ├── ExampleTests │ ├── ExampleTests.m │ └── Info.plist ├── Podfile ├── Podfile.lock └── Pods │ ├── Headers │ └── Public │ │ └── UIView+Copy │ │ ├── PMUIViewHelpers.h │ │ └── UIView+PMCopy.h │ ├── Local Podspecs │ └── UIView+Copy.podspec │ ├── Manifest.lock │ ├── Pods.xcodeproj │ └── project.pbxproj │ └── Target Support Files │ ├── Pods-UIView+Copy │ ├── Pods-UIView+Copy-Private.xcconfig │ ├── Pods-UIView+Copy-dummy.m │ ├── Pods-UIView+Copy-prefix.pch │ └── Pods-UIView+Copy.xcconfig │ └── Pods │ ├── Pods-acknowledgements.markdown │ ├── Pods-acknowledgements.plist │ ├── Pods-dummy.m │ ├── Pods-environment.h │ ├── Pods-resources.sh │ ├── Pods.debug.xcconfig │ └── Pods.release.xcconfig ├── LICENSE ├── README.md ├── Rakefile └── UIView+Copy.podspec /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | build/ 4 | *.pbxuser 5 | !default.pbxuser 6 | *.mode1v3 7 | !default.mode1v3 8 | *.mode2v3 9 | !default.mode2v3 10 | *.perspectivev3 11 | !default.perspectivev3 12 | xcuserdata 13 | *.xccheckout 14 | *.moved-aside 15 | DerivedData 16 | *.hmap 17 | *.ipa 18 | *.xcuserstate 19 | 20 | # CocoaPods 21 | # 22 | # We recommend against adding the Pods directory to your .gitignore. However 23 | # you should judge for yourself, the pros and cons are mentioned at: 24 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 25 | # 26 | # Pods/ -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # UIView+Copy CHANGELOG 2 | 3 | ## 0.0.1 4 | 5 | Initial release. 6 | 7 | ## 0.0.5 8 | 9 | Fixes issue where drawRect drawing doesn't happen. The issue still persists if needsDrawRect is set to NO 10 | 11 | ## 0.0.6 12 | 13 | Fixed highlight property crash 14 | 15 | ## 0.0.7 16 | 17 | Added copy view from snapshot api. Moved methods to other file to prevent method clash in UIView. Renamed things to fix analyzer warnings. 18 | 19 | ## 0.0.8 20 | 21 | Added class prefix to pervent category clashes -------------------------------------------------------------------------------- /Classes/PMUIViewHelpers.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface PMUIViewHelpers : NSObject 4 | 5 | +(UIView *)viewCopy:(UIView *)view needsDrawRect:(BOOL)needsDrawRect; 6 | 7 | +(id)objectCopy:(id)object; 8 | 9 | +(void)fixHighlighted:(UIView *)view; 10 | 11 | +(BOOL)getHighlighted:(UIView *)view; 12 | 13 | +(void)setHighlighted:(BOOL)isHighlighted forView:(UIView *)view; 14 | 15 | +(void)handleSubviewsFrom:(UIView *)original to:(UIView *)copy needsDrawRect:(BOOL)needsDrawRect; 16 | 17 | +(NSArray *)layerPropertiesToExclude; 18 | 19 | +(NSArray *)layerPropertiesToCopy; 20 | 21 | +(NSArray *)layerProperties; 22 | 23 | +(void)setLayerPropertiesFrom:(CALayer *)original to:(CALayer *)copy isMask:(BOOL)isMask; 24 | 25 | +(void)propertiesCopyFrom:(id)original to:(id)copy; 26 | 27 | +(void)layerCopyFromView:(UIView *)original toView:(UIView *)copied; 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /Classes/PMUIViewHelpers.m: -------------------------------------------------------------------------------- 1 | #import "PMUIViewHelpers.h" 2 | #import 3 | 4 | #define HIGHLIGHT_PROPERTY @"highlighted" 5 | #define LAYER_PROPERTY @"layer" 6 | #define LOGS 0 7 | 8 | @implementation PMUIViewHelpers 9 | 10 | +(UIView *)viewCopy:(UIView *)view needsDrawRect:(BOOL)needsDrawRect { 11 | 12 | [[self class] fixHighlighted:view]; 13 | 14 | UIView *copiedView = [self objectCopy:view]; 15 | 16 | if (!needsDrawRect) { 17 | [self layerCopyFromView:view toView:copiedView]; 18 | } 19 | 20 | else { 21 | [self setLayerPropertiesFrom:view.layer to:copiedView.layer isMask:NO]; 22 | } 23 | 24 | [self setHighlighted:[self getHighlighted:view] forView:copiedView]; 25 | [self propertiesCopyFrom:view to:copiedView]; 26 | 27 | return copiedView; 28 | } 29 | 30 | +(void)layerCopyFromView:(UIView *)original toView:(UIView *)copied { 31 | 32 | CALayer *copiedLayer = [self objectCopy:original.layer]; 33 | [copied setValue:copiedLayer forKey:LAYER_PROPERTY]; 34 | } 35 | 36 | +(id)objectCopy:(id)object { 37 | 38 | NSData *archivedData = [NSKeyedArchiver archivedDataWithRootObject:object]; 39 | 40 | id copiedObject = [NSKeyedUnarchiver unarchiveObjectWithData:archivedData]; 41 | 42 | return copiedObject; 43 | } 44 | 45 | +(void)fixHighlighted:(UIView *)view { 46 | 47 | if (class_getProperty([view class], [HIGHLIGHT_PROPERTY UTF8String]) != NULL) { 48 | 49 | [view setValue:@(0) forKey:HIGHLIGHT_PROPERTY]; 50 | } 51 | 52 | for (UIView *subView in view.subviews) { 53 | 54 | [[self class] fixHighlighted:subView]; 55 | } 56 | } 57 | 58 | +(BOOL)getHighlighted:(UIView *)view { 59 | 60 | BOOL isHighlighted = false; 61 | 62 | if (class_getProperty([view class], [HIGHLIGHT_PROPERTY UTF8String]) != NULL) { 63 | 64 | if ([[view valueForKey:HIGHLIGHT_PROPERTY] isEqual: @(1)]) { 65 | isHighlighted = true; 66 | } 67 | } 68 | 69 | return isHighlighted; 70 | } 71 | 72 | +(void)setHighlighted:(BOOL)isHighlighted forView:(UIView *)view{ 73 | 74 | if (class_getProperty([view class], [HIGHLIGHT_PROPERTY UTF8String]) != NULL) { 75 | 76 | [view setValue:@(isHighlighted) forKey:HIGHLIGHT_PROPERTY]; 77 | } 78 | } 79 | 80 | +(void)handleSubviewsFrom:(UIView *)original to:(UIView *)copy needsDrawRect:(BOOL)needsDrawRect { 81 | 82 | for (UIView *subview in original.subviews) { 83 | 84 | UIView *copiedView = [self viewCopy:subview needsDrawRect:needsDrawRect]; 85 | 86 | if (subview.subviews.count > 0) { 87 | [self handleSubviewsFrom:subview to:copiedView needsDrawRect:needsDrawRect]; 88 | } 89 | } 90 | } 91 | 92 | +(NSArray *)layerPropertiesToExclude { 93 | 94 | return @[@"superlayer", @"sublayers"]; 95 | } 96 | 97 | +(NSArray *)layerPropertiesToCopy { 98 | 99 | return @[@"contentsGravity", @"minificationFilter", @"magnificationFilter", @"filters", @"backgroundFilters", @"actions", @"name", @"style"]; 100 | } 101 | 102 | +(NSArray *)layerProperties { 103 | 104 | return @[@"mask"]; 105 | } 106 | 107 | +(void)setLayerPropertiesFrom:(CALayer *)original to:(CALayer *)copy isMask:(BOOL)isMask { 108 | 109 | NSArray *exludeProperties = [self layerPropertiesToExclude]; 110 | NSArray *copyProperties = [self layerPropertiesToCopy]; 111 | NSArray *layerProperties = [self layerProperties]; 112 | 113 | unsigned int outCount, i; 114 | 115 | objc_property_t *properties = class_copyPropertyList([copy class], &outCount); 116 | 117 | for (i = 0; i < outCount; ++i) { 118 | 119 | objc_property_t property = properties[i]; 120 | NSString *propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; 121 | 122 | if ([exludeProperties containsObject:propertyName]) { 123 | continue; 124 | } 125 | 126 | else if ([layerProperties containsObject:propertyName] && !isMask) { 127 | 128 | id copiedValue = [self objectCopy:[original valueForKey:propertyName]]; 129 | 130 | if (copiedValue != nil) { 131 | 132 | [copy setValue:copiedValue forKey:propertyName]; 133 | 134 | [self setLayerPropertiesFrom:original.mask to:copy.mask isMask:YES]; 135 | } 136 | } 137 | 138 | else if ([copyProperties containsObject:propertyName]) { 139 | 140 | id value = [[original valueForKey:propertyName] copy]; 141 | 142 | [copy setValue:value forKey:propertyName]; 143 | } 144 | 145 | else { 146 | 147 | id value = [original valueForKey:propertyName]; 148 | 149 | [copy setValue:value forKey:propertyName]; 150 | } 151 | } 152 | 153 | free(properties); 154 | } 155 | 156 | +(void)propertiesCopyFrom:(id)original to:(id)copy { 157 | 158 | unsigned int outCount, i; 159 | 160 | objc_property_t *properties = class_copyPropertyList([copy class], &outCount); 161 | 162 | for (i = 0; i < outCount; i++) { 163 | 164 | objc_property_t property = properties[i]; 165 | NSString *propertyName = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding]; 166 | 167 | id objectCopy = nil; 168 | 169 | @try { 170 | 171 | id objectProperty = [original valueForKey:propertyName]; 172 | 173 | if ([objectProperty conformsToProtocol:@protocol(NSCopying)]) { 174 | objectCopy = [[original valueForKey:propertyName] copy]; 175 | } 176 | 177 | else { 178 | objectCopy = [self objectCopy:objectProperty]; 179 | } 180 | } 181 | @catch (NSException *exception) { 182 | 183 | #if LOGS == 1 184 | NSLog(@"%@", [exception description]); 185 | #endif 186 | } 187 | @finally { 188 | 189 | } 190 | 191 | @try { 192 | 193 | if (objectCopy != nil) { 194 | [copy setValue:objectCopy forKey:propertyName]; 195 | } 196 | } 197 | @catch (NSException *exception) { 198 | 199 | #if LOGS == 1 200 | NSLog(@"%@", [exception description]); 201 | #endif 202 | } 203 | @finally { 204 | 205 | } 206 | } 207 | 208 | free(properties); 209 | } 210 | 211 | @end 212 | -------------------------------------------------------------------------------- /Classes/UIView+PMCopy.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface UIView (PMCopy) 4 | 5 | /** 6 | * Creates a copy of a view with needsDrawRect set to NO. See -(UIView *)pm_copyWithNeedsDrawRect:(BOOL)needsDrawRect for more information. 7 | * 8 | * @return UIView copy 9 | */ 10 | -(UIView *)pm_copy; 11 | 12 | /** 13 | * Creates a copy of a view. 14 | * 15 | * @param needsDrawRect setting needsDrawRect to YES will allow drawing that occurs in drawRect: happen but it will disable the view's mask layer. Setting it to NO will not draw things from drawRect: but will have the mask layer enabled. 16 | * 17 | * @return UIView copy 18 | */ 19 | -(UIView *)pm_copyWithNeedsDrawRect:(BOOL)needsDrawRect; 20 | 21 | /** 22 | * Create a copy of a view with needsLayerProperties set to NO. See -(UIView *)pm_copyToImageWithLayerProperties:(BOOL)needsLayerProperties for more information. 23 | * 24 | * @return UIView copy 25 | */ 26 | -(UIView *)pm_copyToImage NS_AVAILABLE_IOS(7_0); 27 | 28 | /** 29 | * Create a copy of a view and creates an image. Copies the layer properties for the superview if needsLayerProperties is set to YES (ie. borderColor, borderWidth...) 30 | * 31 | * @return UIView copy 32 | */ 33 | -(UIView *)pm_copyToImageWithLayerProperties:(BOOL)needsLayerProperties NS_AVAILABLE_IOS(7_0); 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /Classes/UIView+PMCopy.m: -------------------------------------------------------------------------------- 1 | #import "UIView+PMCopy.h" 2 | #import "PMUIViewHelpers.h" 3 | 4 | @implementation UIView (PMCopy) 5 | 6 | -(UIView *)pm_copy { 7 | 8 | UIView *copiedView = [PMUIViewHelpers viewCopy:self needsDrawRect:NO]; 9 | 10 | [PMUIViewHelpers handleSubviewsFrom:self to:copiedView needsDrawRect:NO]; 11 | 12 | return copiedView; 13 | } 14 | 15 | -(UIView *)pm_copyWithNeedsDrawRect:(BOOL)needsDrawRect { 16 | 17 | UIView *copiedView = [PMUIViewHelpers viewCopy:self needsDrawRect:needsDrawRect]; 18 | 19 | [PMUIViewHelpers handleSubviewsFrom:self to:copiedView needsDrawRect:needsDrawRect]; 20 | 21 | return copiedView; 22 | } 23 | 24 | -(UIView *)pm_copyToImage { 25 | 26 | return [self pm_copyToImageWithLayerProperties:NO]; 27 | } 28 | 29 | -(UIView *)pm_copyToImageWithLayerProperties:(BOOL)needsLayerProperties { 30 | 31 | if (needsLayerProperties) { 32 | 33 | UIView *copiedView = [self snapshotViewAfterScreenUpdates:YES]; 34 | 35 | [PMUIViewHelpers layerCopyFromView:self toView:copiedView]; 36 | 37 | return copiedView; 38 | } 39 | 40 | else { 41 | return [self snapshotViewAfterScreenUpdates:YES]; 42 | } 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 001340B8435E5203EB5A8181 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 448A9057682ABC6B724F87B8 /* libPods.a */; }; 11 | 068D26BF1A1979CA0051A462 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26BE1A1979CA0051A462 /* main.m */; }; 12 | 068D26C21A1979CA0051A462 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C11A1979CA0051A462 /* AppDelegate.m */; }; 13 | 068D26C51A1979CA0051A462 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C41A1979CA0051A462 /* ViewController.m */; }; 14 | 068D26C81A1979CA0051A462 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C61A1979CA0051A462 /* Main.storyboard */; }; 15 | 068D26CA1A1979CA0051A462 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C91A1979CA0051A462 /* Images.xcassets */; }; 16 | 068D26CD1A1979CA0051A462 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 068D26CB1A1979CA0051A462 /* LaunchScreen.xib */; }; 17 | 068D26D91A1979CA0051A462 /* ExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26D81A1979CA0051A462 /* ExampleTests.m */; }; 18 | 068D26EA1A197A670051A462 /* CircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E41A197A670051A462 /* CircleView.m */; }; 19 | 068D26EB1A197A670051A462 /* CustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E61A197A670051A462 /* CustomView.m */; }; 20 | 068D26EC1A197A670051A462 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 068D26E71A197A670051A462 /* image.jpg */; }; 21 | 068D26ED1A197A670051A462 /* ProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E91A197A670051A462 /* ProgressView.m */; }; 22 | 068D26F11A197B4C0051A462 /* CustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E61A197A670051A462 /* CustomView.m */; }; 23 | 068D26F21A197B4C0051A462 /* CircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E41A197A670051A462 /* CircleView.m */; }; 24 | 068D26F31A197B4C0051A462 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C41A1979CA0051A462 /* ViewController.m */; }; 25 | 068D26F41A197B4C0051A462 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C11A1979CA0051A462 /* AppDelegate.m */; }; 26 | 068D26F51A197B4C0051A462 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26BE1A1979CA0051A462 /* main.m */; }; 27 | 068D26F61A197B4C0051A462 /* ProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E91A197A670051A462 /* ProgressView.m */; }; 28 | 068D26F81A197B4C0051A462 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 448A9057682ABC6B724F87B8 /* libPods.a */; }; 29 | 068D26FA1A197B4C0051A462 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C61A1979CA0051A462 /* Main.storyboard */; }; 30 | 068D26FB1A197B4C0051A462 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 068D26CB1A1979CA0051A462 /* LaunchScreen.xib */; }; 31 | 068D26FC1A197B4C0051A462 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C91A1979CA0051A462 /* Images.xcassets */; }; 32 | 068D26FD1A197B4C0051A462 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 068D26E71A197A670051A462 /* image.jpg */; }; 33 | 068D27071A197B760051A462 /* CustomView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E61A197A670051A462 /* CustomView.m */; }; 34 | 068D27081A197B760051A462 /* CircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E41A197A670051A462 /* CircleView.m */; }; 35 | 068D27091A197B760051A462 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C41A1979CA0051A462 /* ViewController.m */; }; 36 | 068D270A1A197B760051A462 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26C11A1979CA0051A462 /* AppDelegate.m */; }; 37 | 068D270B1A197B760051A462 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26BE1A1979CA0051A462 /* main.m */; }; 38 | 068D270C1A197B760051A462 /* ProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 068D26E91A197A670051A462 /* ProgressView.m */; }; 39 | 068D270E1A197B760051A462 /* libPods.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 448A9057682ABC6B724F87B8 /* libPods.a */; }; 40 | 068D27101A197B760051A462 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C61A1979CA0051A462 /* Main.storyboard */; }; 41 | 068D27111A197B760051A462 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 068D26CB1A1979CA0051A462 /* LaunchScreen.xib */; }; 42 | 068D27121A197B760051A462 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 068D26C91A1979CA0051A462 /* Images.xcassets */; }; 43 | 068D27131A197B760051A462 /* image.jpg in Resources */ = {isa = PBXBuildFile; fileRef = 068D26E71A197A670051A462 /* image.jpg */; }; 44 | /* End PBXBuildFile section */ 45 | 46 | /* Begin PBXContainerItemProxy section */ 47 | 068D26D31A1979CA0051A462 /* PBXContainerItemProxy */ = { 48 | isa = PBXContainerItemProxy; 49 | containerPortal = 068D26B11A1979CA0051A462 /* Project object */; 50 | proxyType = 1; 51 | remoteGlobalIDString = 068D26B81A1979CA0051A462; 52 | remoteInfo = Example; 53 | }; 54 | /* End PBXContainerItemProxy section */ 55 | 56 | /* Begin PBXFileReference section */ 57 | 068D26B91A1979CA0051A462 /* Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Example.app; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 068D26BD1A1979CA0051A462 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 59 | 068D26BE1A1979CA0051A462 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 60 | 068D26C01A1979CA0051A462 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 61 | 068D26C11A1979CA0051A462 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 62 | 068D26C31A1979CA0051A462 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 63 | 068D26C41A1979CA0051A462 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 64 | 068D26C71A1979CA0051A462 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 65 | 068D26C91A1979CA0051A462 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 66 | 068D26CC1A1979CA0051A462 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 67 | 068D26D21A1979CA0051A462 /* ExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 68 | 068D26D71A1979CA0051A462 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 69 | 068D26D81A1979CA0051A462 /* ExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ExampleTests.m; sourceTree = ""; }; 70 | 068D26E31A197A670051A462 /* CircleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CircleView.h; sourceTree = ""; }; 71 | 068D26E41A197A670051A462 /* CircleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CircleView.m; sourceTree = ""; }; 72 | 068D26E51A197A670051A462 /* CustomView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CustomView.h; sourceTree = ""; }; 73 | 068D26E61A197A670051A462 /* CustomView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CustomView.m; sourceTree = ""; }; 74 | 068D26E71A197A670051A462 /* image.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = image.jpg; sourceTree = ""; }; 75 | 068D26E81A197A670051A462 /* ProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressView.h; sourceTree = ""; }; 76 | 068D26E91A197A670051A462 /* ProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ProgressView.m; sourceTree = ""; }; 77 | 068D27021A197B4C0051A462 /* Example copy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example copy.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 78 | 068D27181A197B760051A462 /* Example (needs drawRect) copy.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example (needs drawRect) copy.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | 1AFC27AA4B70BD72E4D27820 /* Pods.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.release.xcconfig; path = "Pods/Target Support Files/Pods/Pods.release.xcconfig"; sourceTree = ""; }; 80 | 448A9057682ABC6B724F87B8 /* libPods.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libPods.a; sourceTree = BUILT_PRODUCTS_DIR; }; 81 | 94F324A0D214A8C26A612F65 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = ""; }; 82 | /* End PBXFileReference section */ 83 | 84 | /* Begin PBXFrameworksBuildPhase section */ 85 | 068D26B61A1979CA0051A462 /* Frameworks */ = { 86 | isa = PBXFrameworksBuildPhase; 87 | buildActionMask = 2147483647; 88 | files = ( 89 | 001340B8435E5203EB5A8181 /* libPods.a in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | 068D26CF1A1979CA0051A462 /* Frameworks */ = { 94 | isa = PBXFrameworksBuildPhase; 95 | buildActionMask = 2147483647; 96 | files = ( 97 | ); 98 | runOnlyForDeploymentPostprocessing = 0; 99 | }; 100 | 068D26F71A197B4C0051A462 /* Frameworks */ = { 101 | isa = PBXFrameworksBuildPhase; 102 | buildActionMask = 2147483647; 103 | files = ( 104 | 068D26F81A197B4C0051A462 /* libPods.a in Frameworks */, 105 | ); 106 | runOnlyForDeploymentPostprocessing = 0; 107 | }; 108 | 068D270D1A197B760051A462 /* Frameworks */ = { 109 | isa = PBXFrameworksBuildPhase; 110 | buildActionMask = 2147483647; 111 | files = ( 112 | 068D270E1A197B760051A462 /* libPods.a in Frameworks */, 113 | ); 114 | runOnlyForDeploymentPostprocessing = 0; 115 | }; 116 | /* End PBXFrameworksBuildPhase section */ 117 | 118 | /* Begin PBXGroup section */ 119 | 068D26B01A1979CA0051A462 = { 120 | isa = PBXGroup; 121 | children = ( 122 | 068D26BB1A1979CA0051A462 /* Example */, 123 | 068D26D51A1979CA0051A462 /* ExampleTests */, 124 | 068D26BA1A1979CA0051A462 /* Products */, 125 | 73425F58EF8936886A2F6386 /* Pods */, 126 | 9092DE62D2228F52CA634553 /* Frameworks */, 127 | ); 128 | sourceTree = ""; 129 | }; 130 | 068D26BA1A1979CA0051A462 /* Products */ = { 131 | isa = PBXGroup; 132 | children = ( 133 | 068D26B91A1979CA0051A462 /* Example.app */, 134 | 068D26D21A1979CA0051A462 /* ExampleTests.xctest */, 135 | 068D27021A197B4C0051A462 /* Example copy.app */, 136 | 068D27181A197B760051A462 /* Example (needs drawRect) copy.app */, 137 | ); 138 | name = Products; 139 | sourceTree = ""; 140 | }; 141 | 068D26BB1A1979CA0051A462 /* Example */ = { 142 | isa = PBXGroup; 143 | children = ( 144 | 068D26E21A197A540051A462 /* Views */, 145 | 068D26C01A1979CA0051A462 /* AppDelegate.h */, 146 | 068D26C11A1979CA0051A462 /* AppDelegate.m */, 147 | 068D26C31A1979CA0051A462 /* ViewController.h */, 148 | 068D26C41A1979CA0051A462 /* ViewController.m */, 149 | 068D26C61A1979CA0051A462 /* Main.storyboard */, 150 | 068D26C91A1979CA0051A462 /* Images.xcassets */, 151 | 068D26CB1A1979CA0051A462 /* LaunchScreen.xib */, 152 | 068D26BC1A1979CA0051A462 /* Supporting Files */, 153 | ); 154 | path = Example; 155 | sourceTree = ""; 156 | }; 157 | 068D26BC1A1979CA0051A462 /* Supporting Files */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 068D26BD1A1979CA0051A462 /* Info.plist */, 161 | 068D26BE1A1979CA0051A462 /* main.m */, 162 | ); 163 | name = "Supporting Files"; 164 | sourceTree = ""; 165 | }; 166 | 068D26D51A1979CA0051A462 /* ExampleTests */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | 068D26D81A1979CA0051A462 /* ExampleTests.m */, 170 | 068D26D61A1979CA0051A462 /* Supporting Files */, 171 | ); 172 | path = ExampleTests; 173 | sourceTree = ""; 174 | }; 175 | 068D26D61A1979CA0051A462 /* Supporting Files */ = { 176 | isa = PBXGroup; 177 | children = ( 178 | 068D26D71A1979CA0051A462 /* Info.plist */, 179 | ); 180 | name = "Supporting Files"; 181 | sourceTree = ""; 182 | }; 183 | 068D26E21A197A540051A462 /* Views */ = { 184 | isa = PBXGroup; 185 | children = ( 186 | 068D26E31A197A670051A462 /* CircleView.h */, 187 | 068D26E41A197A670051A462 /* CircleView.m */, 188 | 068D26E51A197A670051A462 /* CustomView.h */, 189 | 068D26E61A197A670051A462 /* CustomView.m */, 190 | 068D26E71A197A670051A462 /* image.jpg */, 191 | 068D26E81A197A670051A462 /* ProgressView.h */, 192 | 068D26E91A197A670051A462 /* ProgressView.m */, 193 | ); 194 | name = Views; 195 | sourceTree = ""; 196 | }; 197 | 73425F58EF8936886A2F6386 /* Pods */ = { 198 | isa = PBXGroup; 199 | children = ( 200 | 94F324A0D214A8C26A612F65 /* Pods.debug.xcconfig */, 201 | 1AFC27AA4B70BD72E4D27820 /* Pods.release.xcconfig */, 202 | ); 203 | name = Pods; 204 | sourceTree = ""; 205 | }; 206 | 9092DE62D2228F52CA634553 /* Frameworks */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | 448A9057682ABC6B724F87B8 /* libPods.a */, 210 | ); 211 | name = Frameworks; 212 | sourceTree = ""; 213 | }; 214 | /* End PBXGroup section */ 215 | 216 | /* Begin PBXNativeTarget section */ 217 | 068D26B81A1979CA0051A462 /* Example */ = { 218 | isa = PBXNativeTarget; 219 | buildConfigurationList = 068D26DC1A1979CA0051A462 /* Build configuration list for PBXNativeTarget "Example" */; 220 | buildPhases = ( 221 | 2216F369BA52B6AB701597BE /* Check Pods Manifest.lock */, 222 | 068D26B51A1979CA0051A462 /* Sources */, 223 | 068D26B61A1979CA0051A462 /* Frameworks */, 224 | 068D26B71A1979CA0051A462 /* Resources */, 225 | 2D18961729CFC15512733BB3 /* Copy Pods Resources */, 226 | ); 227 | buildRules = ( 228 | ); 229 | dependencies = ( 230 | ); 231 | name = Example; 232 | productName = Example; 233 | productReference = 068D26B91A1979CA0051A462 /* Example.app */; 234 | productType = "com.apple.product-type.application"; 235 | }; 236 | 068D26D11A1979CA0051A462 /* ExampleTests */ = { 237 | isa = PBXNativeTarget; 238 | buildConfigurationList = 068D26DF1A1979CA0051A462 /* Build configuration list for PBXNativeTarget "ExampleTests" */; 239 | buildPhases = ( 240 | 068D26CE1A1979CA0051A462 /* Sources */, 241 | 068D26CF1A1979CA0051A462 /* Frameworks */, 242 | 068D26D01A1979CA0051A462 /* Resources */, 243 | ); 244 | buildRules = ( 245 | ); 246 | dependencies = ( 247 | 068D26D41A1979CA0051A462 /* PBXTargetDependency */, 248 | ); 249 | name = ExampleTests; 250 | productName = ExampleTests; 251 | productReference = 068D26D21A1979CA0051A462 /* ExampleTests.xctest */; 252 | productType = "com.apple.product-type.bundle.unit-test"; 253 | }; 254 | 068D26EE1A197B4C0051A462 /* Example (needs drawRect) */ = { 255 | isa = PBXNativeTarget; 256 | buildConfigurationList = 068D26FF1A197B4C0051A462 /* Build configuration list for PBXNativeTarget "Example (needs drawRect)" */; 257 | buildPhases = ( 258 | 068D26EF1A197B4C0051A462 /* Check Pods Manifest.lock */, 259 | 068D26F01A197B4C0051A462 /* Sources */, 260 | 068D26F71A197B4C0051A462 /* Frameworks */, 261 | 068D26F91A197B4C0051A462 /* Resources */, 262 | 068D26FE1A197B4C0051A462 /* Copy Pods Resources */, 263 | ); 264 | buildRules = ( 265 | ); 266 | dependencies = ( 267 | ); 268 | name = "Example (needs drawRect)"; 269 | productName = Example; 270 | productReference = 068D27021A197B4C0051A462 /* Example copy.app */; 271 | productType = "com.apple.product-type.application"; 272 | }; 273 | 068D27041A197B760051A462 /* Example (needs image) */ = { 274 | isa = PBXNativeTarget; 275 | buildConfigurationList = 068D27151A197B760051A462 /* Build configuration list for PBXNativeTarget "Example (needs image)" */; 276 | buildPhases = ( 277 | 068D27051A197B760051A462 /* Check Pods Manifest.lock */, 278 | 068D27061A197B760051A462 /* Sources */, 279 | 068D270D1A197B760051A462 /* Frameworks */, 280 | 068D270F1A197B760051A462 /* Resources */, 281 | 068D27141A197B760051A462 /* Copy Pods Resources */, 282 | ); 283 | buildRules = ( 284 | ); 285 | dependencies = ( 286 | ); 287 | name = "Example (needs image)"; 288 | productName = Example; 289 | productReference = 068D27181A197B760051A462 /* Example (needs drawRect) copy.app */; 290 | productType = "com.apple.product-type.application"; 291 | }; 292 | /* End PBXNativeTarget section */ 293 | 294 | /* Begin PBXProject section */ 295 | 068D26B11A1979CA0051A462 /* Project object */ = { 296 | isa = PBXProject; 297 | attributes = { 298 | LastUpgradeCheck = 0610; 299 | ORGANIZATIONNAME = "Pierre-Marc Airoldi"; 300 | TargetAttributes = { 301 | 068D26B81A1979CA0051A462 = { 302 | CreatedOnToolsVersion = 6.1; 303 | }; 304 | 068D26D11A1979CA0051A462 = { 305 | CreatedOnToolsVersion = 6.1; 306 | TestTargetID = 068D26B81A1979CA0051A462; 307 | }; 308 | }; 309 | }; 310 | buildConfigurationList = 068D26B41A1979CA0051A462 /* Build configuration list for PBXProject "Example" */; 311 | compatibilityVersion = "Xcode 3.2"; 312 | developmentRegion = English; 313 | hasScannedForEncodings = 0; 314 | knownRegions = ( 315 | en, 316 | Base, 317 | ); 318 | mainGroup = 068D26B01A1979CA0051A462; 319 | productRefGroup = 068D26BA1A1979CA0051A462 /* Products */; 320 | projectDirPath = ""; 321 | projectRoot = ""; 322 | targets = ( 323 | 068D26B81A1979CA0051A462 /* Example */, 324 | 068D26D11A1979CA0051A462 /* ExampleTests */, 325 | 068D26EE1A197B4C0051A462 /* Example (needs drawRect) */, 326 | 068D27041A197B760051A462 /* Example (needs image) */, 327 | ); 328 | }; 329 | /* End PBXProject section */ 330 | 331 | /* Begin PBXResourcesBuildPhase section */ 332 | 068D26B71A1979CA0051A462 /* Resources */ = { 333 | isa = PBXResourcesBuildPhase; 334 | buildActionMask = 2147483647; 335 | files = ( 336 | 068D26C81A1979CA0051A462 /* Main.storyboard in Resources */, 337 | 068D26CD1A1979CA0051A462 /* LaunchScreen.xib in Resources */, 338 | 068D26CA1A1979CA0051A462 /* Images.xcassets in Resources */, 339 | 068D26EC1A197A670051A462 /* image.jpg in Resources */, 340 | ); 341 | runOnlyForDeploymentPostprocessing = 0; 342 | }; 343 | 068D26D01A1979CA0051A462 /* Resources */ = { 344 | isa = PBXResourcesBuildPhase; 345 | buildActionMask = 2147483647; 346 | files = ( 347 | ); 348 | runOnlyForDeploymentPostprocessing = 0; 349 | }; 350 | 068D26F91A197B4C0051A462 /* Resources */ = { 351 | isa = PBXResourcesBuildPhase; 352 | buildActionMask = 2147483647; 353 | files = ( 354 | 068D26FA1A197B4C0051A462 /* Main.storyboard in Resources */, 355 | 068D26FB1A197B4C0051A462 /* LaunchScreen.xib in Resources */, 356 | 068D26FC1A197B4C0051A462 /* Images.xcassets in Resources */, 357 | 068D26FD1A197B4C0051A462 /* image.jpg in Resources */, 358 | ); 359 | runOnlyForDeploymentPostprocessing = 0; 360 | }; 361 | 068D270F1A197B760051A462 /* Resources */ = { 362 | isa = PBXResourcesBuildPhase; 363 | buildActionMask = 2147483647; 364 | files = ( 365 | 068D27101A197B760051A462 /* Main.storyboard in Resources */, 366 | 068D27111A197B760051A462 /* LaunchScreen.xib in Resources */, 367 | 068D27121A197B760051A462 /* Images.xcassets in Resources */, 368 | 068D27131A197B760051A462 /* image.jpg in Resources */, 369 | ); 370 | runOnlyForDeploymentPostprocessing = 0; 371 | }; 372 | /* End PBXResourcesBuildPhase section */ 373 | 374 | /* Begin PBXShellScriptBuildPhase section */ 375 | 068D26EF1A197B4C0051A462 /* Check Pods Manifest.lock */ = { 376 | isa = PBXShellScriptBuildPhase; 377 | buildActionMask = 2147483647; 378 | files = ( 379 | ); 380 | inputPaths = ( 381 | ); 382 | name = "Check Pods Manifest.lock"; 383 | outputPaths = ( 384 | ); 385 | runOnlyForDeploymentPostprocessing = 0; 386 | shellPath = /bin/sh; 387 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 388 | showEnvVarsInLog = 0; 389 | }; 390 | 068D26FE1A197B4C0051A462 /* Copy Pods Resources */ = { 391 | isa = PBXShellScriptBuildPhase; 392 | buildActionMask = 2147483647; 393 | files = ( 394 | ); 395 | inputPaths = ( 396 | ); 397 | name = "Copy Pods Resources"; 398 | outputPaths = ( 399 | ); 400 | runOnlyForDeploymentPostprocessing = 0; 401 | shellPath = /bin/sh; 402 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 403 | showEnvVarsInLog = 0; 404 | }; 405 | 068D27051A197B760051A462 /* Check Pods Manifest.lock */ = { 406 | isa = PBXShellScriptBuildPhase; 407 | buildActionMask = 2147483647; 408 | files = ( 409 | ); 410 | inputPaths = ( 411 | ); 412 | name = "Check Pods Manifest.lock"; 413 | outputPaths = ( 414 | ); 415 | runOnlyForDeploymentPostprocessing = 0; 416 | shellPath = /bin/sh; 417 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 418 | showEnvVarsInLog = 0; 419 | }; 420 | 068D27141A197B760051A462 /* Copy Pods Resources */ = { 421 | isa = PBXShellScriptBuildPhase; 422 | buildActionMask = 2147483647; 423 | files = ( 424 | ); 425 | inputPaths = ( 426 | ); 427 | name = "Copy Pods Resources"; 428 | outputPaths = ( 429 | ); 430 | runOnlyForDeploymentPostprocessing = 0; 431 | shellPath = /bin/sh; 432 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 433 | showEnvVarsInLog = 0; 434 | }; 435 | 2216F369BA52B6AB701597BE /* Check Pods Manifest.lock */ = { 436 | isa = PBXShellScriptBuildPhase; 437 | buildActionMask = 2147483647; 438 | files = ( 439 | ); 440 | inputPaths = ( 441 | ); 442 | name = "Check Pods Manifest.lock"; 443 | outputPaths = ( 444 | ); 445 | runOnlyForDeploymentPostprocessing = 0; 446 | shellPath = /bin/sh; 447 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 448 | showEnvVarsInLog = 0; 449 | }; 450 | 2D18961729CFC15512733BB3 /* Copy Pods Resources */ = { 451 | isa = PBXShellScriptBuildPhase; 452 | buildActionMask = 2147483647; 453 | files = ( 454 | ); 455 | inputPaths = ( 456 | ); 457 | name = "Copy Pods Resources"; 458 | outputPaths = ( 459 | ); 460 | runOnlyForDeploymentPostprocessing = 0; 461 | shellPath = /bin/sh; 462 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods/Pods-resources.sh\"\n"; 463 | showEnvVarsInLog = 0; 464 | }; 465 | /* End PBXShellScriptBuildPhase section */ 466 | 467 | /* Begin PBXSourcesBuildPhase section */ 468 | 068D26B51A1979CA0051A462 /* Sources */ = { 469 | isa = PBXSourcesBuildPhase; 470 | buildActionMask = 2147483647; 471 | files = ( 472 | 068D26EB1A197A670051A462 /* CustomView.m in Sources */, 473 | 068D26EA1A197A670051A462 /* CircleView.m in Sources */, 474 | 068D26C51A1979CA0051A462 /* ViewController.m in Sources */, 475 | 068D26C21A1979CA0051A462 /* AppDelegate.m in Sources */, 476 | 068D26BF1A1979CA0051A462 /* main.m in Sources */, 477 | 068D26ED1A197A670051A462 /* ProgressView.m in Sources */, 478 | ); 479 | runOnlyForDeploymentPostprocessing = 0; 480 | }; 481 | 068D26CE1A1979CA0051A462 /* Sources */ = { 482 | isa = PBXSourcesBuildPhase; 483 | buildActionMask = 2147483647; 484 | files = ( 485 | 068D26D91A1979CA0051A462 /* ExampleTests.m in Sources */, 486 | ); 487 | runOnlyForDeploymentPostprocessing = 0; 488 | }; 489 | 068D26F01A197B4C0051A462 /* Sources */ = { 490 | isa = PBXSourcesBuildPhase; 491 | buildActionMask = 2147483647; 492 | files = ( 493 | 068D26F11A197B4C0051A462 /* CustomView.m in Sources */, 494 | 068D26F21A197B4C0051A462 /* CircleView.m in Sources */, 495 | 068D26F31A197B4C0051A462 /* ViewController.m in Sources */, 496 | 068D26F41A197B4C0051A462 /* AppDelegate.m in Sources */, 497 | 068D26F51A197B4C0051A462 /* main.m in Sources */, 498 | 068D26F61A197B4C0051A462 /* ProgressView.m in Sources */, 499 | ); 500 | runOnlyForDeploymentPostprocessing = 0; 501 | }; 502 | 068D27061A197B760051A462 /* Sources */ = { 503 | isa = PBXSourcesBuildPhase; 504 | buildActionMask = 2147483647; 505 | files = ( 506 | 068D27071A197B760051A462 /* CustomView.m in Sources */, 507 | 068D27081A197B760051A462 /* CircleView.m in Sources */, 508 | 068D27091A197B760051A462 /* ViewController.m in Sources */, 509 | 068D270A1A197B760051A462 /* AppDelegate.m in Sources */, 510 | 068D270B1A197B760051A462 /* main.m in Sources */, 511 | 068D270C1A197B760051A462 /* ProgressView.m in Sources */, 512 | ); 513 | runOnlyForDeploymentPostprocessing = 0; 514 | }; 515 | /* End PBXSourcesBuildPhase section */ 516 | 517 | /* Begin PBXTargetDependency section */ 518 | 068D26D41A1979CA0051A462 /* PBXTargetDependency */ = { 519 | isa = PBXTargetDependency; 520 | target = 068D26B81A1979CA0051A462 /* Example */; 521 | targetProxy = 068D26D31A1979CA0051A462 /* PBXContainerItemProxy */; 522 | }; 523 | /* End PBXTargetDependency section */ 524 | 525 | /* Begin PBXVariantGroup section */ 526 | 068D26C61A1979CA0051A462 /* Main.storyboard */ = { 527 | isa = PBXVariantGroup; 528 | children = ( 529 | 068D26C71A1979CA0051A462 /* Base */, 530 | ); 531 | name = Main.storyboard; 532 | sourceTree = ""; 533 | }; 534 | 068D26CB1A1979CA0051A462 /* LaunchScreen.xib */ = { 535 | isa = PBXVariantGroup; 536 | children = ( 537 | 068D26CC1A1979CA0051A462 /* Base */, 538 | ); 539 | name = LaunchScreen.xib; 540 | sourceTree = ""; 541 | }; 542 | /* End PBXVariantGroup section */ 543 | 544 | /* Begin XCBuildConfiguration section */ 545 | 068D26DA1A1979CA0051A462 /* Debug */ = { 546 | isa = XCBuildConfiguration; 547 | buildSettings = { 548 | ALWAYS_SEARCH_USER_PATHS = NO; 549 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 550 | CLANG_CXX_LIBRARY = "libc++"; 551 | CLANG_ENABLE_MODULES = YES; 552 | CLANG_ENABLE_OBJC_ARC = YES; 553 | CLANG_WARN_BOOL_CONVERSION = YES; 554 | CLANG_WARN_CONSTANT_CONVERSION = YES; 555 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 556 | CLANG_WARN_EMPTY_BODY = YES; 557 | CLANG_WARN_ENUM_CONVERSION = YES; 558 | CLANG_WARN_INT_CONVERSION = YES; 559 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 560 | CLANG_WARN_UNREACHABLE_CODE = YES; 561 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 562 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 563 | COPY_PHASE_STRIP = NO; 564 | ENABLE_STRICT_OBJC_MSGSEND = YES; 565 | GCC_C_LANGUAGE_STANDARD = gnu99; 566 | GCC_DYNAMIC_NO_PIC = NO; 567 | GCC_OPTIMIZATION_LEVEL = 0; 568 | GCC_PREPROCESSOR_DEFINITIONS = ( 569 | "DEBUG=1", 570 | "$(inherited)", 571 | ); 572 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 573 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 574 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 575 | GCC_WARN_UNDECLARED_SELECTOR = YES; 576 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 577 | GCC_WARN_UNUSED_FUNCTION = YES; 578 | GCC_WARN_UNUSED_VARIABLE = YES; 579 | IPHONEOS_DEPLOYMENT_TARGET = 8.1; 580 | MTL_ENABLE_DEBUG_INFO = YES; 581 | ONLY_ACTIVE_ARCH = YES; 582 | SDKROOT = iphoneos; 583 | TARGETED_DEVICE_FAMILY = "1,2"; 584 | }; 585 | name = Debug; 586 | }; 587 | 068D26DB1A1979CA0051A462 /* Release */ = { 588 | isa = XCBuildConfiguration; 589 | buildSettings = { 590 | ALWAYS_SEARCH_USER_PATHS = NO; 591 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 592 | CLANG_CXX_LIBRARY = "libc++"; 593 | CLANG_ENABLE_MODULES = YES; 594 | CLANG_ENABLE_OBJC_ARC = YES; 595 | CLANG_WARN_BOOL_CONVERSION = YES; 596 | CLANG_WARN_CONSTANT_CONVERSION = YES; 597 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 598 | CLANG_WARN_EMPTY_BODY = YES; 599 | CLANG_WARN_ENUM_CONVERSION = YES; 600 | CLANG_WARN_INT_CONVERSION = YES; 601 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 602 | CLANG_WARN_UNREACHABLE_CODE = YES; 603 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 604 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 605 | COPY_PHASE_STRIP = YES; 606 | ENABLE_NS_ASSERTIONS = NO; 607 | ENABLE_STRICT_OBJC_MSGSEND = YES; 608 | GCC_C_LANGUAGE_STANDARD = gnu99; 609 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 610 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 611 | GCC_WARN_UNDECLARED_SELECTOR = YES; 612 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 613 | GCC_WARN_UNUSED_FUNCTION = YES; 614 | GCC_WARN_UNUSED_VARIABLE = YES; 615 | IPHONEOS_DEPLOYMENT_TARGET = 8.1; 616 | MTL_ENABLE_DEBUG_INFO = NO; 617 | SDKROOT = iphoneos; 618 | TARGETED_DEVICE_FAMILY = "1,2"; 619 | VALIDATE_PRODUCT = YES; 620 | }; 621 | name = Release; 622 | }; 623 | 068D26DD1A1979CA0051A462 /* Debug */ = { 624 | isa = XCBuildConfiguration; 625 | baseConfigurationReference = 94F324A0D214A8C26A612F65 /* Pods.debug.xcconfig */; 626 | buildSettings = { 627 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 628 | INFOPLIST_FILE = Example/Info.plist; 629 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 630 | PRODUCT_NAME = "$(TARGET_NAME)"; 631 | }; 632 | name = Debug; 633 | }; 634 | 068D26DE1A1979CA0051A462 /* Release */ = { 635 | isa = XCBuildConfiguration; 636 | baseConfigurationReference = 1AFC27AA4B70BD72E4D27820 /* Pods.release.xcconfig */; 637 | buildSettings = { 638 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 639 | INFOPLIST_FILE = Example/Info.plist; 640 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 641 | PRODUCT_NAME = "$(TARGET_NAME)"; 642 | }; 643 | name = Release; 644 | }; 645 | 068D26E01A1979CA0051A462 /* Debug */ = { 646 | isa = XCBuildConfiguration; 647 | buildSettings = { 648 | BUNDLE_LOADER = "$(TEST_HOST)"; 649 | FRAMEWORK_SEARCH_PATHS = ( 650 | "$(SDKROOT)/Developer/Library/Frameworks", 651 | "$(inherited)", 652 | ); 653 | GCC_PREPROCESSOR_DEFINITIONS = ( 654 | "DEBUG=1", 655 | "$(inherited)", 656 | ); 657 | INFOPLIST_FILE = ExampleTests/Info.plist; 658 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 659 | PRODUCT_NAME = "$(TARGET_NAME)"; 660 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example"; 661 | }; 662 | name = Debug; 663 | }; 664 | 068D26E11A1979CA0051A462 /* Release */ = { 665 | isa = XCBuildConfiguration; 666 | buildSettings = { 667 | BUNDLE_LOADER = "$(TEST_HOST)"; 668 | FRAMEWORK_SEARCH_PATHS = ( 669 | "$(SDKROOT)/Developer/Library/Frameworks", 670 | "$(inherited)", 671 | ); 672 | INFOPLIST_FILE = ExampleTests/Info.plist; 673 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 674 | PRODUCT_NAME = "$(TARGET_NAME)"; 675 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Example.app/Example"; 676 | }; 677 | name = Release; 678 | }; 679 | 068D27001A197B4C0051A462 /* Debug */ = { 680 | isa = XCBuildConfiguration; 681 | baseConfigurationReference = 94F324A0D214A8C26A612F65 /* Pods.debug.xcconfig */; 682 | buildSettings = { 683 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 684 | GCC_PREPROCESSOR_DEFINITIONS = ( 685 | "$(inherited)", 686 | "NEEDS_DRAW_RECT=1", 687 | ); 688 | INFOPLIST_FILE = "$(SRCROOT)/Example/Info.plist"; 689 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 690 | PRODUCT_NAME = "Example copy"; 691 | }; 692 | name = Debug; 693 | }; 694 | 068D27011A197B4C0051A462 /* Release */ = { 695 | isa = XCBuildConfiguration; 696 | baseConfigurationReference = 1AFC27AA4B70BD72E4D27820 /* Pods.release.xcconfig */; 697 | buildSettings = { 698 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 699 | GCC_PREPROCESSOR_DEFINITIONS = ( 700 | "$(inherited)", 701 | "NEEDS_DRAW_RECT=1", 702 | ); 703 | INFOPLIST_FILE = "$(SRCROOT)/Example/Info.plist"; 704 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 705 | PRODUCT_NAME = "Example copy"; 706 | }; 707 | name = Release; 708 | }; 709 | 068D27161A197B760051A462 /* Debug */ = { 710 | isa = XCBuildConfiguration; 711 | baseConfigurationReference = 94F324A0D214A8C26A612F65 /* Pods.debug.xcconfig */; 712 | buildSettings = { 713 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 714 | GCC_PREPROCESSOR_DEFINITIONS = ( 715 | "$(inherited)", 716 | "IMAGE=1", 717 | ); 718 | INFOPLIST_FILE = "$(SRCROOT)/Example/Info.plist"; 719 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 720 | PRODUCT_NAME = "Example (needs drawRect) copy"; 721 | }; 722 | name = Debug; 723 | }; 724 | 068D27171A197B760051A462 /* Release */ = { 725 | isa = XCBuildConfiguration; 726 | baseConfigurationReference = 1AFC27AA4B70BD72E4D27820 /* Pods.release.xcconfig */; 727 | buildSettings = { 728 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 729 | GCC_PREPROCESSOR_DEFINITIONS = ( 730 | "$(inherited)", 731 | "IMAGE=1", 732 | ); 733 | INFOPLIST_FILE = "$(SRCROOT)/Example/Info.plist"; 734 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 735 | PRODUCT_NAME = "Example (needs drawRect) copy"; 736 | }; 737 | name = Release; 738 | }; 739 | /* End XCBuildConfiguration section */ 740 | 741 | /* Begin XCConfigurationList section */ 742 | 068D26B41A1979CA0051A462 /* Build configuration list for PBXProject "Example" */ = { 743 | isa = XCConfigurationList; 744 | buildConfigurations = ( 745 | 068D26DA1A1979CA0051A462 /* Debug */, 746 | 068D26DB1A1979CA0051A462 /* Release */, 747 | ); 748 | defaultConfigurationIsVisible = 0; 749 | defaultConfigurationName = Release; 750 | }; 751 | 068D26DC1A1979CA0051A462 /* Build configuration list for PBXNativeTarget "Example" */ = { 752 | isa = XCConfigurationList; 753 | buildConfigurations = ( 754 | 068D26DD1A1979CA0051A462 /* Debug */, 755 | 068D26DE1A1979CA0051A462 /* Release */, 756 | ); 757 | defaultConfigurationIsVisible = 0; 758 | defaultConfigurationName = Release; 759 | }; 760 | 068D26DF1A1979CA0051A462 /* Build configuration list for PBXNativeTarget "ExampleTests" */ = { 761 | isa = XCConfigurationList; 762 | buildConfigurations = ( 763 | 068D26E01A1979CA0051A462 /* Debug */, 764 | 068D26E11A1979CA0051A462 /* Release */, 765 | ); 766 | defaultConfigurationIsVisible = 0; 767 | defaultConfigurationName = Release; 768 | }; 769 | 068D26FF1A197B4C0051A462 /* Build configuration list for PBXNativeTarget "Example (needs drawRect)" */ = { 770 | isa = XCConfigurationList; 771 | buildConfigurations = ( 772 | 068D27001A197B4C0051A462 /* Debug */, 773 | 068D27011A197B4C0051A462 /* Release */, 774 | ); 775 | defaultConfigurationIsVisible = 0; 776 | defaultConfigurationName = Release; 777 | }; 778 | 068D27151A197B760051A462 /* Build configuration list for PBXNativeTarget "Example (needs image)" */ = { 779 | isa = XCConfigurationList; 780 | buildConfigurations = ( 781 | 068D27161A197B760051A462 /* Debug */, 782 | 068D27171A197B760051A462 /* Release */, 783 | ); 784 | defaultConfigurationIsVisible = 0; 785 | defaultConfigurationName = Release; 786 | }; 787 | /* End XCConfigurationList section */ 788 | }; 789 | rootObject = 068D26B11A1979CA0051A462 /* Project object */; 790 | } 791 | -------------------------------------------------------------------------------- /Example/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/Example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /Example/Example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | - (void)applicationDidEnterBackground:(UIApplication *)application { 29 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 30 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 31 | } 32 | 33 | - (void)applicationWillEnterForeground:(UIApplication *)application { 34 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 35 | } 36 | 37 | - (void)applicationDidBecomeActive:(UIApplication *)application { 38 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 39 | } 40 | 41 | - (void)applicationWillTerminate:(UIApplication *)application { 42 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 43 | } 44 | 45 | @end 46 | -------------------------------------------------------------------------------- /Example/Example/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 20 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /Example/Example/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Example/Example/CircleView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CircleView.h 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface CircleView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Example/CircleView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CircleView.m 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import "CircleView.h" 10 | 11 | @interface CircleView () 12 | 13 | @property UIImageView *imageView; 14 | 15 | @end 16 | 17 | @implementation CircleView 18 | 19 | -(instancetype)initWithFrame:(CGRect)frame { 20 | 21 | self = [super initWithFrame:frame]; 22 | 23 | if (self) { 24 | // Initialization code 25 | 26 | CGRect frame = self.frame; 27 | frame.origin = CGPointZero; 28 | 29 | CAShapeLayer *mask = [CAShapeLayer layer]; 30 | mask.path = [UIBezierPath bezierPathWithOvalInRect:frame].CGPath; 31 | 32 | self.layer.mask = mask; 33 | self.layer.contentsScale = [UIScreen mainScreen].scale; 34 | 35 | _imageView = [[UIImageView alloc] initWithFrame:frame]; 36 | _imageView.contentMode = UIViewContentModeScaleAspectFill; 37 | _imageView.image = [UIImage imageNamed:@"image.jpg"]; 38 | 39 | [self addSubview:_imageView]; 40 | } 41 | 42 | return self; 43 | } 44 | 45 | /* 46 | // Only override drawRect: if you perform custom drawing. 47 | // An empty implementation adversely affects performance during animation. 48 | - (void)drawRect:(CGRect)rect 49 | { 50 | // Drawing code 51 | } 52 | */ 53 | 54 | @end 55 | -------------------------------------------------------------------------------- /Example/Example/CustomView.h: -------------------------------------------------------------------------------- 1 | // 2 | // CustomView.h 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "CircleView.h" 11 | #import "ProgressView.h" 12 | 13 | @interface CustomView : UIView 14 | 15 | @property CircleView *circleView; 16 | @property ProgressView *progressView; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /Example/Example/CustomView.m: -------------------------------------------------------------------------------- 1 | // 2 | // CustomView.m 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import "CustomView.h" 10 | 11 | @implementation CustomView 12 | 13 | -(instancetype)initWithFrame:(CGRect)frame { 14 | 15 | self = [super initWithFrame:frame]; 16 | 17 | if (self) { 18 | // Initialization code 19 | 20 | self.layer.cornerRadius = 10.0; 21 | self.layer.borderWidth = 1.0; 22 | self.layer.borderColor = [UIColor blackColor].CGColor; 23 | self.layer.contentsScale = [UIScreen mainScreen].scale; 24 | 25 | CGRect top; 26 | CGRect bottom; 27 | 28 | [self getRects:&top bottomRect:&bottom]; 29 | 30 | _circleView = [[CircleView alloc] initWithFrame:top]; 31 | 32 | _progressView = [[ProgressView alloc] initWithFrame:bottom]; 33 | 34 | [self addSubview:_circleView]; 35 | [self addSubview:_progressView]; 36 | } 37 | 38 | return self; 39 | } 40 | 41 | -(void)getRects:(CGRect *)top bottomRect:(CGRect *)bottom { 42 | 43 | CGRect frame = self.frame; 44 | frame.origin = CGPointZero; 45 | 46 | CGRectDivide(frame, top, bottom, CGRectGetHeight(frame)/2, CGRectMinYEdge); 47 | 48 | top->origin.x += 5; 49 | top->origin.y += 5; 50 | top->size.width -= 10; 51 | top->size.height -= 10; 52 | 53 | bottom->origin.x += 5; 54 | bottom->origin.y += 5; 55 | bottom->size.width -= 10; 56 | bottom->size.height -= 10; 57 | } 58 | 59 | /* 60 | // Only override drawRect: if you perform custom drawing. 61 | // An empty implementation adversely affects performance during animation. 62 | - (void)drawRect:(CGRect)rect 63 | { 64 | // Drawing code 65 | } 66 | */ 67 | 68 | @end 69 | -------------------------------------------------------------------------------- /Example/Example/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "40x40", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "60x60", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "ipad", 35 | "size" : "29x29", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "ipad", 40 | "size" : "29x29", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "40x40", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "40x40", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "76x76", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "76x76", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Example/Example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.peteappdesigns.example 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 0.0.8 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | UIInterfaceOrientationLandscapeRight 38 | 39 | UISupportedInterfaceOrientations~ipad 40 | 41 | UIInterfaceOrientationPortrait 42 | UIInterfaceOrientationPortraitUpsideDown 43 | UIInterfaceOrientationLandscapeLeft 44 | UIInterfaceOrientationLandscapeRight 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Example/Example/ProgressView.h: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressView.h 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ProgressView : UIView 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /Example/Example/ProgressView.m: -------------------------------------------------------------------------------- 1 | // 2 | // ProgressView.m 3 | // UIView+Copy-Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-06-24. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import "ProgressView.h" 10 | #import "CircleView.h" 11 | 12 | @implementation ProgressView 13 | 14 | - (id)initWithFrame:(CGRect)frame 15 | { 16 | 17 | self = [super initWithFrame:frame]; 18 | 19 | if (self) { 20 | // Initialization code 21 | 22 | self.opaque = NO; 23 | 24 | CircleView *circleView = [[CircleView alloc] initWithFrame:CGRectMake(10, 10, 50, 50)]; 25 | 26 | [self addSubview:circleView]; 27 | } 28 | 29 | return self; 30 | } 31 | 32 | // Only override drawRect: if you perform custom drawing. 33 | // An empty implementation adversely affects performance during animation. 34 | - (void)drawRect:(CGRect)rect 35 | { 36 | // Drawing code 37 | 38 | CGContextRef context = UIGraphicsGetCurrentContext(); 39 | 40 | CGColorRef color = CGColorRetain([UIColor blueColor].CGColor); 41 | 42 | CGContextSetFillColorWithColor(context, color); 43 | 44 | CGContextFillEllipseInRect(context, rect); 45 | 46 | CGColorRelease(color); 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /Example/Example/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /Example/Example/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | #import "CustomView.h" 11 | #import 12 | 13 | @interface ViewController () 14 | 15 | @property CustomView *copiedView; 16 | 17 | @end 18 | 19 | @implementation ViewController 20 | 21 | - (void)viewDidLoad 22 | { 23 | [super viewDidLoad]; 24 | // Do any additional setup after loading the view, typically from a nib. 25 | 26 | self.view.backgroundColor = [UIColor whiteColor]; 27 | 28 | CGRect top; 29 | CGRect bottom; 30 | 31 | [self getRects:&top bottomRect:&bottom]; 32 | 33 | CustomView *originalView = [[CustomView alloc] initWithFrame:top]; 34 | 35 | [self.view addSubview:originalView]; 36 | 37 | /**** implementation ****/ 38 | 39 | double startTime = CACurrentMediaTime(); 40 | 41 | #ifdef NEEDS_DRAW_RECT 42 | _copiedView = (CustomView *)[originalView pm_copyWithNeedsDrawRect:YES]; //YES:0.006631 NO:0.128084 43 | #elif IMAGE 44 | _copiedView = (CustomView *)[originalView pm_copyToImageWithLayerProperties:YES]; //YES:0.087293 NO:0.033197 45 | #else 46 | _copiedView = (CustomView *)[originalView pm_copy]; //0.128084 47 | #endif 48 | 49 | _copiedView.backgroundColor = [UIColor redColor]; 50 | 51 | NSLog(@"%f", CACurrentMediaTime() - startTime); 52 | 53 | /**** implementation ****/ 54 | 55 | [self.view addSubview:_copiedView]; 56 | 57 | _copiedView.frame = CGRectMake(CGRectGetMinX(bottom), CGRectGetMinY(bottom), CGRectGetWidth(_copiedView.frame), CGRectGetHeight(_copiedView.frame)); 58 | 59 | [self addText:@"Original" toView:originalView]; 60 | [self addText:@"Copy" toView:_copiedView]; 61 | 62 | } 63 | 64 | - (void)didReceiveMemoryWarning 65 | { 66 | [super didReceiveMemoryWarning]; 67 | // Dispose of any resources that can be recreated. 68 | } 69 | 70 | -(void)addText:(NSString *)text toView:(UIView *)view { 71 | 72 | CGRect frame = view.frame; 73 | frame.origin = CGPointZero; 74 | 75 | UILabel *originalLabel = [[UILabel alloc] initWithFrame:frame]; 76 | originalLabel.textAlignment = NSTextAlignmentCenter; 77 | originalLabel.backgroundColor = [UIColor clearColor]; 78 | originalLabel.text = text; 79 | 80 | [view addSubview:originalLabel]; 81 | } 82 | 83 | -(void)getRects:(CGRect *)top bottomRect:(CGRect *)bottom { 84 | 85 | CGRect frame = self.view.frame; 86 | frame.origin = CGPointZero; 87 | 88 | if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { 89 | frame.origin.y += 20; 90 | frame.size.height -= 20; 91 | } 92 | 93 | CGRectDivide(frame, top, bottom, CGRectGetHeight(frame)/2, CGRectMinYEdge); 94 | 95 | top->origin.x += 5; 96 | top->origin.y += 5; 97 | top->size.width -= 10; 98 | top->size.height -= 10; 99 | 100 | bottom->origin.x += 5; 101 | bottom->origin.y += 5; 102 | bottom->size.width -= 10; 103 | bottom->size.height -= 10; 104 | } 105 | 106 | -(void)viewDidAppear:(BOOL)animated { 107 | 108 | [super viewDidAppear:animated]; 109 | 110 | dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1ull * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 111 | CABasicAnimation *color = [CABasicAnimation animationWithKeyPath:@"borderColor"]; 112 | color.fromValue = (id)[UIColor blackColor].CGColor; 113 | color.toValue = (id)[UIColor redColor].CGColor; 114 | color.fillMode = kCAFillModeForwards; 115 | color.removedOnCompletion = NO; 116 | color.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; 117 | 118 | [_copiedView.layer addAnimation:color forKey:@"color"]; 119 | }); 120 | } 121 | 122 | @end 123 | -------------------------------------------------------------------------------- /Example/Example/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmairoldi/UIView-Copy/a4e076eef98794df772737d451be50eb1bbcbda9/Example/Example/image.jpg -------------------------------------------------------------------------------- /Example/Example/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Example 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Example/ExampleTests/ExampleTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // ExampleTests.m 3 | // ExampleTests 4 | // 5 | // Created by Pierre-Marc Airoldi on 2014-11-16. 6 | // Copyright (c) 2014 Pierre-Marc Airoldi. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface ExampleTests : XCTestCase 13 | 14 | @end 15 | 16 | @implementation ExampleTests 17 | 18 | - (void)setUp { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown { 24 | // Put teardown code here. This method is called after the invocation of each test method in the class. 25 | [super tearDown]; 26 | } 27 | 28 | - (void)testExample { 29 | // This is an example of a functional test case. 30 | XCTAssert(YES, @"Pass"); 31 | } 32 | 33 | - (void)testPerformanceExample { 34 | // This is an example of a performance test case. 35 | [self measureBlock:^{ 36 | // Put the code you want to measure the time of here. 37 | }]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /Example/ExampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | com.peteappdesigns.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, "6.0" 3 | 4 | source 'https://github.com/CocoaPods/Specs.git' 5 | 6 | pod "UIView+Copy", :path => "../" 7 | 8 | #target "UIView+Copy-ExampleTests" do 9 | 10 | #end 11 | 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - UIView+Copy (0.0.8) 3 | 4 | DEPENDENCIES: 5 | - UIView+Copy (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | UIView+Copy: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | UIView+Copy: 3fc0c72213cbc76d9528874b0ad3d43f09d4f24b 13 | 14 | COCOAPODS: 0.34.4 15 | -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/UIView+Copy/PMUIViewHelpers.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/PMUIViewHelpers.h -------------------------------------------------------------------------------- /Example/Pods/Headers/Public/UIView+Copy/UIView+PMCopy.h: -------------------------------------------------------------------------------- 1 | ../../../../../Classes/UIView+PMCopy.h -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/UIView+Copy.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint NAME.podspec' to ensure this is a 3 | # valid spec and remove all comments before submitting the spec. 4 | # 5 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 6 | # 7 | Pod::Spec.new do |s| 8 | s.name = "UIView+Copy" 9 | s.version = "0.0.8" 10 | s.summary = "Adding a copy method to UIView." 11 | s.homepage = "https://github.com/petester42/UIView-Copy" 12 | #s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" 13 | s.license = 'MIT' 14 | s.author = { "Pierre-Marc Airoldi" => "pierremarcairoldi@gmail.com" } 15 | s.source = { :git => "https://github.com/petester42/UIView-Copy.git", :tag => s.version.to_s } 16 | s.social_media_url = 'https://twitter.com/petester42' 17 | 18 | s.platform = :ios, '6.0' 19 | s.ios.deployment_target = '6.0' 20 | s.requires_arc = true 21 | 22 | s.source_files = 'Classes' 23 | #s.resources = 'Assets/*.png' 24 | end 25 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - UIView+Copy (0.0.8) 3 | 4 | DEPENDENCIES: 5 | - UIView+Copy (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | UIView+Copy: 9 | :path: ../ 10 | 11 | SPEC CHECKSUMS: 12 | UIView+Copy: 3fc0c72213cbc76d9528874b0ad3d43f09d4f24b 13 | 14 | COCOAPODS: 0.34.4 15 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | archiveVersion 6 | 1 7 | classes 8 | 9 | objectVersion 10 | 46 11 | objects 12 | 13 | 01347D1676F2AA1089D11F60 14 | 15 | includeInIndex 16 | 1 17 | isa 18 | PBXFileReference 19 | lastKnownFileType 20 | sourcecode.c.objc 21 | name 22 | UIView+PMCopy.m 23 | path 24 | Classes/UIView+PMCopy.m 25 | sourceTree 26 | <group> 27 | 28 | 0179EF0667B68E2EB364F445 29 | 30 | buildConfigurations 31 | 32 | F1480F73F9E26D6BFF8CF77B 33 | 71B1F9D22FCF76B2437AC39C 34 | 35 | defaultConfigurationIsVisible 36 | 0 37 | defaultConfigurationName 38 | Release 39 | isa 40 | XCConfigurationList 41 | 42 | 053EAC6924FC5900BC494530 43 | 44 | includeInIndex 45 | 1 46 | isa 47 | PBXFileReference 48 | lastKnownFileType 49 | text.xcconfig 50 | path 51 | Pods.release.xcconfig 52 | sourceTree 53 | <group> 54 | 55 | 067F74BF1CC9CB2FFD3217A3 56 | 57 | children 58 | 59 | D5D62E5FED431CCF8E1BD352 60 | 61 | isa 62 | PBXGroup 63 | name 64 | Targets Support Files 65 | sourceTree 66 | <group> 67 | 68 | 07105F24DBBD4D5A18E45E01 69 | 70 | fileRef 71 | 01347D1676F2AA1089D11F60 72 | isa 73 | PBXBuildFile 74 | settings 75 | 76 | COMPILER_FLAGS 77 | -fobjc-arc 78 | 79 | 80 | 0CE61B5AE83DBD8E348E7BF4 81 | 82 | buildConfigurationList 83 | 90A4D7E496242D6D81496844 84 | buildPhases 85 | 86 | 8A80C545BAB24306E62230C7 87 | 987BC727F0104C563BDEE3A6 88 | 13F733CF096362B11EF515E5 89 | 90 | buildRules 91 | 92 | dependencies 93 | 94 | isa 95 | PBXNativeTarget 96 | name 97 | Pods-UIView+Copy 98 | productName 99 | Pods-UIView+Copy 100 | productReference 101 | B3B2FAD2DC6AA5061431347F 102 | productType 103 | com.apple.product-type.library.static 104 | 105 | 13F733CF096362B11EF515E5 106 | 107 | buildActionMask 108 | 2147483647 109 | files 110 | 111 | A047E93B08B3FFDBB16F3A08 112 | 94E89FF5A8D787DA2CA152DF 113 | 114 | isa 115 | PBXHeadersBuildPhase 116 | runOnlyForDeploymentPostprocessing 117 | 0 118 | 119 | 1A6DD21F72C727873D962DB5 120 | 121 | children 122 | 123 | CFA3B96830A4C8551894A77B 124 | A67CBFDE6AEFF640FB62A4BE 125 | FDF2439DEFC0A85E68EB7CD5 126 | 2F6B81D10FB6EF9617DBD82C 127 | 128 | isa 129 | PBXGroup 130 | name 131 | Support Files 132 | path 133 | Example/Pods/Target Support Files/Pods-UIView+Copy 134 | sourceTree 135 | <group> 136 | 137 | 26BFD8A8EA89F95B24A2C920 138 | 139 | baseConfigurationReference 140 | A67CBFDE6AEFF640FB62A4BE 141 | buildSettings 142 | 143 | ALWAYS_SEARCH_USER_PATHS 144 | NO 145 | COPY_PHASE_STRIP 146 | NO 147 | DSTROOT 148 | /tmp/xcodeproj.dst 149 | GCC_DYNAMIC_NO_PIC 150 | NO 151 | GCC_OPTIMIZATION_LEVEL 152 | 0 153 | GCC_PRECOMPILE_PREFIX_HEADER 154 | YES 155 | GCC_PREFIX_HEADER 156 | Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy-prefix.pch 157 | GCC_PREPROCESSOR_DEFINITIONS 158 | 159 | DEBUG=1 160 | $(inherited) 161 | 162 | GCC_SYMBOLS_PRIVATE_EXTERN 163 | NO 164 | INSTALL_PATH 165 | $(BUILT_PRODUCTS_DIR) 166 | IPHONEOS_DEPLOYMENT_TARGET 167 | 8.1 168 | OTHER_LDFLAGS 169 | 170 | OTHER_LIBTOOLFLAGS 171 | 172 | PRODUCT_NAME 173 | $(TARGET_NAME) 174 | PUBLIC_HEADERS_FOLDER_PATH 175 | $(TARGET_NAME) 176 | SDKROOT 177 | iphoneos 178 | SKIP_INSTALL 179 | YES 180 | 181 | isa 182 | XCBuildConfiguration 183 | name 184 | Debug 185 | 186 | 2EFDF943E0EFF2A21D6DB7DB 187 | 188 | baseConfigurationReference 189 | A67CBFDE6AEFF640FB62A4BE 190 | buildSettings 191 | 192 | ALWAYS_SEARCH_USER_PATHS 193 | NO 194 | COPY_PHASE_STRIP 195 | YES 196 | DSTROOT 197 | /tmp/xcodeproj.dst 198 | GCC_PRECOMPILE_PREFIX_HEADER 199 | YES 200 | GCC_PREFIX_HEADER 201 | Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy-prefix.pch 202 | INSTALL_PATH 203 | $(BUILT_PRODUCTS_DIR) 204 | IPHONEOS_DEPLOYMENT_TARGET 205 | 8.1 206 | OTHER_CFLAGS 207 | 208 | -DNS_BLOCK_ASSERTIONS=1 209 | $(inherited) 210 | 211 | OTHER_CPLUSPLUSFLAGS 212 | 213 | -DNS_BLOCK_ASSERTIONS=1 214 | $(inherited) 215 | 216 | OTHER_LDFLAGS 217 | 218 | OTHER_LIBTOOLFLAGS 219 | 220 | PRODUCT_NAME 221 | $(TARGET_NAME) 222 | PUBLIC_HEADERS_FOLDER_PATH 223 | $(TARGET_NAME) 224 | SDKROOT 225 | iphoneos 226 | SKIP_INSTALL 227 | YES 228 | VALIDATE_PRODUCT 229 | YES 230 | 231 | isa 232 | XCBuildConfiguration 233 | name 234 | Release 235 | 236 | 2F1EA4AF8D06F31FDF535766 237 | 238 | includeInIndex 239 | 1 240 | isa 241 | PBXFileReference 242 | lastKnownFileType 243 | sourcecode.c.objc 244 | path 245 | Pods-dummy.m 246 | sourceTree 247 | <group> 248 | 249 | 2F6B81D10FB6EF9617DBD82C 250 | 251 | includeInIndex 252 | 1 253 | isa 254 | PBXFileReference 255 | lastKnownFileType 256 | sourcecode.c.h 257 | path 258 | Pods-UIView+Copy-prefix.pch 259 | sourceTree 260 | <group> 261 | 262 | 32B41EB7511BFEA541AAAAC9 263 | 264 | includeInIndex 265 | 1 266 | isa 267 | PBXFileReference 268 | lastKnownFileType 269 | text.xcconfig 270 | path 271 | Pods.debug.xcconfig 272 | sourceTree 273 | <group> 274 | 275 | 494F595A668A11ACEAD8228A 276 | 277 | buildConfigurationList 278 | A5495CEF824BFF75F87601D3 279 | buildPhases 280 | 281 | 9661CDBA541D711F694DC1E7 282 | 5653F154EF921DCA25C8512A 283 | 284 | buildRules 285 | 286 | dependencies 287 | 288 | 849BF6DFBCD47C3B01C1AF4A 289 | 290 | isa 291 | PBXNativeTarget 292 | name 293 | Pods 294 | productName 295 | Pods 296 | productReference 297 | 9D2C479E9DC5B19D6BF130EB 298 | productType 299 | com.apple.product-type.library.static 300 | 301 | 5653F154EF921DCA25C8512A 302 | 303 | buildActionMask 304 | 2147483647 305 | files 306 | 307 | 57B9983CED28FE4BB7F65F3E 308 | 309 | isa 310 | PBXFrameworksBuildPhase 311 | runOnlyForDeploymentPostprocessing 312 | 0 313 | 314 | 57B9983CED28FE4BB7F65F3E 315 | 316 | fileRef 317 | A09222BAC4ECDF727DE6E921 318 | isa 319 | PBXBuildFile 320 | 321 | 60F3618A9C006534F43CD294 322 | 323 | includeInIndex 324 | 1 325 | isa 326 | PBXFileReference 327 | lastKnownFileType 328 | text.plist.xml 329 | path 330 | Pods-acknowledgements.plist 331 | sourceTree 332 | <group> 333 | 334 | 6495D35261709C09E20E6115 335 | 336 | children 337 | 338 | A09222BAC4ECDF727DE6E921 339 | 340 | isa 341 | PBXGroup 342 | name 343 | iOS 344 | sourceTree 345 | <group> 346 | 347 | 6F6A3BB51094120281073BC1 348 | 349 | fileRef 350 | E4298ABDB790A9D5A059A9A3 351 | isa 352 | PBXBuildFile 353 | settings 354 | 355 | COMPILER_FLAGS 356 | -fobjc-arc 357 | 358 | 359 | 71B1F9D22FCF76B2437AC39C 360 | 361 | buildSettings 362 | 363 | ALWAYS_SEARCH_USER_PATHS 364 | NO 365 | CLANG_CXX_LANGUAGE_STANDARD 366 | gnu++0x 367 | CLANG_CXX_LIBRARY 368 | libc++ 369 | CLANG_ENABLE_MODULES 370 | YES 371 | CLANG_ENABLE_OBJC_ARC 372 | NO 373 | CLANG_WARN_BOOL_CONVERSION 374 | YES 375 | CLANG_WARN_CONSTANT_CONVERSION 376 | YES 377 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 378 | YES 379 | CLANG_WARN_EMPTY_BODY 380 | YES 381 | CLANG_WARN_ENUM_CONVERSION 382 | YES 383 | CLANG_WARN_INT_CONVERSION 384 | YES 385 | CLANG_WARN_OBJC_ROOT_CLASS 386 | YES 387 | COPY_PHASE_STRIP 388 | NO 389 | ENABLE_NS_ASSERTIONS 390 | NO 391 | GCC_C_LANGUAGE_STANDARD 392 | gnu99 393 | GCC_PREPROCESSOR_DEFINITIONS 394 | 395 | RELEASE=1 396 | 397 | GCC_WARN_64_TO_32_BIT_CONVERSION 398 | YES 399 | GCC_WARN_ABOUT_RETURN_TYPE 400 | YES 401 | GCC_WARN_UNDECLARED_SELECTOR 402 | YES 403 | GCC_WARN_UNINITIALIZED_AUTOS 404 | YES 405 | GCC_WARN_UNUSED_FUNCTION 406 | YES 407 | GCC_WARN_UNUSED_VARIABLE 408 | YES 409 | IPHONEOS_DEPLOYMENT_TARGET 410 | 8.1 411 | STRIP_INSTALLED_PRODUCT 412 | NO 413 | VALIDATE_PRODUCT 414 | YES 415 | 416 | isa 417 | XCBuildConfiguration 418 | name 419 | Release 420 | 421 | 77D9F9E79EF82BA59ED54306 422 | 423 | children 424 | 425 | D9624F28FD83E035CD609DA6 426 | 87F6008C10BE99991DC472AB 427 | C9AB5119FF6351D8A72A56EE 428 | C401F8B11F39FAD2C19A0AB0 429 | 067F74BF1CC9CB2FFD3217A3 430 | 431 | isa 432 | PBXGroup 433 | sourceTree 434 | <group> 435 | 436 | 849BF6DFBCD47C3B01C1AF4A 437 | 438 | isa 439 | PBXTargetDependency 440 | target 441 | 0CE61B5AE83DBD8E348E7BF4 442 | targetProxy 443 | CE384CC4CFB1AD0C916B14FB 444 | 445 | 87F6008C10BE99991DC472AB 446 | 447 | children 448 | 449 | CDB215F4933C8DA039DB0C07 450 | 451 | isa 452 | PBXGroup 453 | name 454 | Development Pods 455 | sourceTree 456 | <group> 457 | 458 | 88D8471EFB4E1C1DAF0A7E8E 459 | 460 | includeInIndex 461 | 1 462 | isa 463 | PBXFileReference 464 | lastKnownFileType 465 | sourcecode.c.h 466 | name 467 | PMUIViewHelpers.h 468 | path 469 | Classes/PMUIViewHelpers.h 470 | sourceTree 471 | <group> 472 | 473 | 8A80C545BAB24306E62230C7 474 | 475 | buildActionMask 476 | 2147483647 477 | files 478 | 479 | 6F6A3BB51094120281073BC1 480 | A8E11766CE15AA7A3A50F996 481 | 07105F24DBBD4D5A18E45E01 482 | 483 | isa 484 | PBXSourcesBuildPhase 485 | runOnlyForDeploymentPostprocessing 486 | 0 487 | 488 | 90A4D7E496242D6D81496844 489 | 490 | buildConfigurations 491 | 492 | 26BFD8A8EA89F95B24A2C920 493 | 2EFDF943E0EFF2A21D6DB7DB 494 | 495 | defaultConfigurationIsVisible 496 | 0 497 | defaultConfigurationName 498 | Release 499 | isa 500 | XCConfigurationList 501 | 502 | 9342E8B07C1BE4ECBF5D9482 503 | 504 | includeInIndex 505 | 1 506 | isa 507 | PBXFileReference 508 | lastKnownFileType 509 | text 510 | path 511 | Pods-acknowledgements.markdown 512 | sourceTree 513 | <group> 514 | 515 | 94E89FF5A8D787DA2CA152DF 516 | 517 | fileRef 518 | EEE651E56D96DE96CCC704FC 519 | isa 520 | PBXBuildFile 521 | 522 | 9661CDBA541D711F694DC1E7 523 | 524 | buildActionMask 525 | 2147483647 526 | files 527 | 528 | B0325E2C9FEC3878CD4BB276 529 | 530 | isa 531 | PBXSourcesBuildPhase 532 | runOnlyForDeploymentPostprocessing 533 | 0 534 | 535 | 987BC727F0104C563BDEE3A6 536 | 537 | buildActionMask 538 | 2147483647 539 | files 540 | 541 | C3B8FE35312F55AA41C801BE 542 | 543 | isa 544 | PBXFrameworksBuildPhase 545 | runOnlyForDeploymentPostprocessing 546 | 0 547 | 548 | 9D2C479E9DC5B19D6BF130EB 549 | 550 | explicitFileType 551 | archive.ar 552 | includeInIndex 553 | 0 554 | isa 555 | PBXFileReference 556 | path 557 | libPods.a 558 | sourceTree 559 | BUILT_PRODUCTS_DIR 560 | 561 | A047E93B08B3FFDBB16F3A08 562 | 563 | fileRef 564 | 88D8471EFB4E1C1DAF0A7E8E 565 | isa 566 | PBXBuildFile 567 | 568 | A09222BAC4ECDF727DE6E921 569 | 570 | isa 571 | PBXFileReference 572 | lastKnownFileType 573 | wrapper.framework 574 | name 575 | Foundation.framework 576 | path 577 | Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework 578 | sourceTree 579 | DEVELOPER_DIR 580 | 581 | A5495CEF824BFF75F87601D3 582 | 583 | buildConfigurations 584 | 585 | BE294D4BF57A2B90B2DAFC98 586 | DD3D8A044E18E0599C69E524 587 | 588 | defaultConfigurationIsVisible 589 | 0 590 | defaultConfigurationName 591 | Release 592 | isa 593 | XCConfigurationList 594 | 595 | A67CBFDE6AEFF640FB62A4BE 596 | 597 | includeInIndex 598 | 1 599 | isa 600 | PBXFileReference 601 | lastKnownFileType 602 | text.xcconfig 603 | path 604 | Pods-UIView+Copy-Private.xcconfig 605 | sourceTree 606 | <group> 607 | 608 | A8E11766CE15AA7A3A50F996 609 | 610 | fileRef 611 | FDF2439DEFC0A85E68EB7CD5 612 | isa 613 | PBXBuildFile 614 | 615 | B0325E2C9FEC3878CD4BB276 616 | 617 | fileRef 618 | 2F1EA4AF8D06F31FDF535766 619 | isa 620 | PBXBuildFile 621 | 622 | B3B2FAD2DC6AA5061431347F 623 | 624 | explicitFileType 625 | archive.ar 626 | includeInIndex 627 | 0 628 | isa 629 | PBXFileReference 630 | path 631 | libPods-UIView+Copy.a 632 | sourceTree 633 | BUILT_PRODUCTS_DIR 634 | 635 | BE294D4BF57A2B90B2DAFC98 636 | 637 | baseConfigurationReference 638 | 32B41EB7511BFEA541AAAAC9 639 | buildSettings 640 | 641 | ALWAYS_SEARCH_USER_PATHS 642 | NO 643 | COPY_PHASE_STRIP 644 | NO 645 | DSTROOT 646 | /tmp/xcodeproj.dst 647 | GCC_DYNAMIC_NO_PIC 648 | NO 649 | GCC_OPTIMIZATION_LEVEL 650 | 0 651 | GCC_PRECOMPILE_PREFIX_HEADER 652 | YES 653 | GCC_PREPROCESSOR_DEFINITIONS 654 | 655 | DEBUG=1 656 | $(inherited) 657 | 658 | GCC_SYMBOLS_PRIVATE_EXTERN 659 | NO 660 | INSTALL_PATH 661 | $(BUILT_PRODUCTS_DIR) 662 | IPHONEOS_DEPLOYMENT_TARGET 663 | 8.1 664 | OTHER_LDFLAGS 665 | 666 | OTHER_LIBTOOLFLAGS 667 | 668 | PRODUCT_NAME 669 | $(TARGET_NAME) 670 | PUBLIC_HEADERS_FOLDER_PATH 671 | $(TARGET_NAME) 672 | SDKROOT 673 | iphoneos 674 | SKIP_INSTALL 675 | YES 676 | 677 | isa 678 | XCBuildConfiguration 679 | name 680 | Debug 681 | 682 | C3B8FE35312F55AA41C801BE 683 | 684 | fileRef 685 | A09222BAC4ECDF727DE6E921 686 | isa 687 | PBXBuildFile 688 | 689 | C401F8B11F39FAD2C19A0AB0 690 | 691 | children 692 | 693 | 9D2C479E9DC5B19D6BF130EB 694 | B3B2FAD2DC6AA5061431347F 695 | 696 | isa 697 | PBXGroup 698 | name 699 | Products 700 | sourceTree 701 | <group> 702 | 703 | C7A5DBEFD5A157AF0472D5CF 704 | 705 | attributes 706 | 707 | LastUpgradeCheck 708 | 0510 709 | 710 | buildConfigurationList 711 | 0179EF0667B68E2EB364F445 712 | compatibilityVersion 713 | Xcode 3.2 714 | developmentRegion 715 | English 716 | hasScannedForEncodings 717 | 0 718 | isa 719 | PBXProject 720 | knownRegions 721 | 722 | en 723 | 724 | mainGroup 725 | 77D9F9E79EF82BA59ED54306 726 | productRefGroup 727 | C401F8B11F39FAD2C19A0AB0 728 | projectDirPath 729 | 730 | projectReferences 731 | 732 | projectRoot 733 | 734 | targets 735 | 736 | 494F595A668A11ACEAD8228A 737 | 0CE61B5AE83DBD8E348E7BF4 738 | 739 | 740 | C9AB5119FF6351D8A72A56EE 741 | 742 | children 743 | 744 | 6495D35261709C09E20E6115 745 | 746 | isa 747 | PBXGroup 748 | name 749 | Frameworks 750 | sourceTree 751 | <group> 752 | 753 | CDB215F4933C8DA039DB0C07 754 | 755 | children 756 | 757 | 88D8471EFB4E1C1DAF0A7E8E 758 | E4298ABDB790A9D5A059A9A3 759 | EEE651E56D96DE96CCC704FC 760 | 01347D1676F2AA1089D11F60 761 | 1A6DD21F72C727873D962DB5 762 | 763 | isa 764 | PBXGroup 765 | name 766 | UIView+Copy 767 | path 768 | ../.. 769 | sourceTree 770 | <group> 771 | 772 | CE384CC4CFB1AD0C916B14FB 773 | 774 | containerPortal 775 | C7A5DBEFD5A157AF0472D5CF 776 | isa 777 | PBXContainerItemProxy 778 | proxyType 779 | 1 780 | remoteGlobalIDString 781 | 0CE61B5AE83DBD8E348E7BF4 782 | remoteInfo 783 | Pods-UIView+Copy 784 | 785 | CFA3B96830A4C8551894A77B 786 | 787 | includeInIndex 788 | 1 789 | isa 790 | PBXFileReference 791 | lastKnownFileType 792 | text.xcconfig 793 | path 794 | Pods-UIView+Copy.xcconfig 795 | sourceTree 796 | <group> 797 | 798 | D4D96B0C97EC4FEDDCF94F08 799 | 800 | includeInIndex 801 | 1 802 | isa 803 | PBXFileReference 804 | lastKnownFileType 805 | sourcecode.c.h 806 | path 807 | Pods-environment.h 808 | sourceTree 809 | <group> 810 | 811 | D55D61B62C9280F53B8665FE 812 | 813 | includeInIndex 814 | 1 815 | isa 816 | PBXFileReference 817 | lastKnownFileType 818 | text.script.sh 819 | path 820 | Pods-resources.sh 821 | sourceTree 822 | <group> 823 | 824 | D5D62E5FED431CCF8E1BD352 825 | 826 | children 827 | 828 | 9342E8B07C1BE4ECBF5D9482 829 | 60F3618A9C006534F43CD294 830 | 2F1EA4AF8D06F31FDF535766 831 | D4D96B0C97EC4FEDDCF94F08 832 | D55D61B62C9280F53B8665FE 833 | 32B41EB7511BFEA541AAAAC9 834 | 053EAC6924FC5900BC494530 835 | 836 | isa 837 | PBXGroup 838 | name 839 | Pods 840 | path 841 | Target Support Files/Pods 842 | sourceTree 843 | <group> 844 | 845 | D9624F28FD83E035CD609DA6 846 | 847 | includeInIndex 848 | 1 849 | isa 850 | PBXFileReference 851 | lastKnownFileType 852 | text 853 | name 854 | Podfile 855 | path 856 | ../Podfile 857 | sourceTree 858 | SOURCE_ROOT 859 | xcLanguageSpecificationIdentifier 860 | xcode.lang.ruby 861 | 862 | DD3D8A044E18E0599C69E524 863 | 864 | baseConfigurationReference 865 | 053EAC6924FC5900BC494530 866 | buildSettings 867 | 868 | ALWAYS_SEARCH_USER_PATHS 869 | NO 870 | COPY_PHASE_STRIP 871 | YES 872 | DSTROOT 873 | /tmp/xcodeproj.dst 874 | GCC_PRECOMPILE_PREFIX_HEADER 875 | YES 876 | INSTALL_PATH 877 | $(BUILT_PRODUCTS_DIR) 878 | IPHONEOS_DEPLOYMENT_TARGET 879 | 8.1 880 | OTHER_CFLAGS 881 | 882 | -DNS_BLOCK_ASSERTIONS=1 883 | $(inherited) 884 | 885 | OTHER_CPLUSPLUSFLAGS 886 | 887 | -DNS_BLOCK_ASSERTIONS=1 888 | $(inherited) 889 | 890 | OTHER_LDFLAGS 891 | 892 | OTHER_LIBTOOLFLAGS 893 | 894 | PRODUCT_NAME 895 | $(TARGET_NAME) 896 | PUBLIC_HEADERS_FOLDER_PATH 897 | $(TARGET_NAME) 898 | SDKROOT 899 | iphoneos 900 | SKIP_INSTALL 901 | YES 902 | VALIDATE_PRODUCT 903 | YES 904 | 905 | isa 906 | XCBuildConfiguration 907 | name 908 | Release 909 | 910 | E4298ABDB790A9D5A059A9A3 911 | 912 | includeInIndex 913 | 1 914 | isa 915 | PBXFileReference 916 | lastKnownFileType 917 | sourcecode.c.objc 918 | name 919 | PMUIViewHelpers.m 920 | path 921 | Classes/PMUIViewHelpers.m 922 | sourceTree 923 | <group> 924 | 925 | EEE651E56D96DE96CCC704FC 926 | 927 | includeInIndex 928 | 1 929 | isa 930 | PBXFileReference 931 | lastKnownFileType 932 | sourcecode.c.h 933 | name 934 | UIView+PMCopy.h 935 | path 936 | Classes/UIView+PMCopy.h 937 | sourceTree 938 | <group> 939 | 940 | F1480F73F9E26D6BFF8CF77B 941 | 942 | buildSettings 943 | 944 | ALWAYS_SEARCH_USER_PATHS 945 | NO 946 | CLANG_CXX_LANGUAGE_STANDARD 947 | gnu++0x 948 | CLANG_CXX_LIBRARY 949 | libc++ 950 | CLANG_ENABLE_MODULES 951 | YES 952 | CLANG_ENABLE_OBJC_ARC 953 | NO 954 | CLANG_WARN_BOOL_CONVERSION 955 | YES 956 | CLANG_WARN_CONSTANT_CONVERSION 957 | YES 958 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE 959 | YES 960 | CLANG_WARN_EMPTY_BODY 961 | YES 962 | CLANG_WARN_ENUM_CONVERSION 963 | YES 964 | CLANG_WARN_INT_CONVERSION 965 | YES 966 | CLANG_WARN_OBJC_ROOT_CLASS 967 | YES 968 | COPY_PHASE_STRIP 969 | YES 970 | GCC_C_LANGUAGE_STANDARD 971 | gnu99 972 | GCC_DYNAMIC_NO_PIC 973 | NO 974 | GCC_OPTIMIZATION_LEVEL 975 | 0 976 | GCC_PREPROCESSOR_DEFINITIONS 977 | 978 | DEBUG=1 979 | $(inherited) 980 | 981 | GCC_SYMBOLS_PRIVATE_EXTERN 982 | NO 983 | GCC_WARN_64_TO_32_BIT_CONVERSION 984 | YES 985 | GCC_WARN_ABOUT_RETURN_TYPE 986 | YES 987 | GCC_WARN_UNDECLARED_SELECTOR 988 | YES 989 | GCC_WARN_UNINITIALIZED_AUTOS 990 | YES 991 | GCC_WARN_UNUSED_FUNCTION 992 | YES 993 | GCC_WARN_UNUSED_VARIABLE 994 | YES 995 | IPHONEOS_DEPLOYMENT_TARGET 996 | 8.1 997 | ONLY_ACTIVE_ARCH 998 | YES 999 | STRIP_INSTALLED_PRODUCT 1000 | NO 1001 | 1002 | isa 1003 | XCBuildConfiguration 1004 | name 1005 | Debug 1006 | 1007 | FDF2439DEFC0A85E68EB7CD5 1008 | 1009 | includeInIndex 1010 | 1 1011 | isa 1012 | PBXFileReference 1013 | lastKnownFileType 1014 | sourcecode.c.objc 1015 | path 1016 | Pods-UIView+Copy-dummy.m 1017 | sourceTree 1018 | <group> 1019 | 1020 | 1021 | rootObject 1022 | C7A5DBEFD5A157AF0472D5CF 1023 | 1024 | 1025 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy-Private.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods-UIView+Copy.xcconfig" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Build" "${PODS_ROOT}/Headers/Build/UIView+Copy" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/UIView+Copy" 4 | OTHER_LDFLAGS = -ObjC 5 | PODS_ROOT = ${SRCROOT} -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_UIView_Copy : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_UIView_Copy 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | #import "Pods-environment.h" 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy.xcconfig: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pmairoldi/UIView-Copy/a4e076eef98794df772737d451be50eb1bbcbda9/Example/Pods/Target Support Files/Pods-UIView+Copy/Pods-UIView+Copy.xcconfig -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## UIView+Copy 5 | 6 | Copyright (c) 2014 pierremarcairoldi 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - http://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods-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 | Copyright (c) 2014 pierremarcairoldi <pierre-marc@mobila-canada.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | Title 38 | UIView+Copy 39 | Type 40 | PSGroupSpecifier 41 | 42 | 43 | FooterText 44 | Generated by CocoaPods - http://cocoapods.org 45 | Title 46 | 47 | Type 48 | PSGroupSpecifier 49 | 50 | 51 | StringsTable 52 | Acknowledgements 53 | Title 54 | Acknowledgements 55 | 56 | 57 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods : NSObject 3 | @end 4 | @implementation PodsDummy_Pods 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods-environment.h: -------------------------------------------------------------------------------- 1 | 2 | // To check if a library is compiled with CocoaPods you 3 | // can use the `COCOAPODS` macro definition which is 4 | // defined in the xcconfigs so it is available in 5 | // headers also when they are imported in the client 6 | // project. 7 | 8 | 9 | // UIView+Copy 10 | #define COCOAPODS_POD_AVAILABLE_UIView_Copy 11 | #define COCOAPODS_VERSION_MAJOR_UIView_Copy 0 12 | #define COCOAPODS_VERSION_MINOR_UIView_Copy 0 13 | #define COCOAPODS_VERSION_PATCH_UIView_Copy 8 14 | 15 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | install_resource() 10 | { 11 | case $1 in 12 | *.storyboard) 13 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 14 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 15 | ;; 16 | *.xib) 17 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}" 18 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}" 19 | ;; 20 | *.framework) 21 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 22 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 23 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 24 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 25 | ;; 26 | *.xcdatamodel) 27 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\"" 28 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom" 29 | ;; 30 | *.xcdatamodeld) 31 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\"" 32 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd" 33 | ;; 34 | *.xcassets) 35 | ;; 36 | /*) 37 | echo "$1" 38 | echo "$1" >> "$RESOURCES_TO_COPY" 39 | ;; 40 | *) 41 | echo "${PODS_ROOT}/$1" 42 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY" 43 | ;; 44 | esac 45 | } 46 | 47 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 48 | if [[ "${ACTION}" == "install" ]]; then 49 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 50 | fi 51 | rm -f "$RESOURCES_TO_COPY" 52 | 53 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ] 54 | then 55 | case "${TARGETED_DEVICE_FAMILY}" in 56 | 1,2) 57 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 58 | ;; 59 | 1) 60 | TARGET_DEVICE_ARGS="--target-device iphone" 61 | ;; 62 | 2) 63 | TARGET_DEVICE_ARGS="--target-device ipad" 64 | ;; 65 | *) 66 | TARGET_DEVICE_ARGS="--target-device mac" 67 | ;; 68 | esac 69 | find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 70 | fi 71 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/UIView+Copy" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/UIView+Copy" 4 | OTHER_LDFLAGS = -ObjC -l"Pods-UIView+Copy" 5 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 6 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods/Pods.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/UIView+Copy" 3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/UIView+Copy" 4 | OTHER_LDFLAGS = -ObjC -l"Pods-UIView+Copy" 5 | OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS) 6 | PODS_ROOT = ${SRCROOT}/Pods -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 pierremarcairoldi 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # UIView+Copy 2 | 3 | [![Version](https://img.shields.io/cocoapods/v/UIView+Copy.svg?style=flat)](http://cocoadocs.org/docsets/UIView+Copy) 4 | [![License](https://img.shields.io/cocoapods/l/UIView+Copy.svg?style=flat)](http://cocoadocs.org/docsets/UIView+Copy) 5 | [![Platform](https://img.shields.io/cocoapods/p/UIView+Copy.svg?style=flat)](http://cocoadocs.org/docsets/UIView+Copy) 6 | 7 | ## Usage 8 | 9 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 10 | 11 | #import 12 | 13 | //If you need drawRect: drawing 14 | UIView *copiedView = [originalView pm_copy]; 15 | 16 | //if you need mask layer property 17 | UIView *copiedViewWithDrawRect = (UIView *)[originalView pm_copyWithNeedsDrawRect:YES]; 18 | 19 | //copy using the snapshot api. iOS 7 only 20 | UIView *copiedViewFromSnapshot = (UIView *)[originalView pm_copyToImage]; 21 | 22 | ## Requirements 23 | 24 | iOS 6.0+ and ARC. 25 | 26 | ## Installation 27 | 28 | UIView+Copy is available through [CocoaPods](http://cocoapods.org). To install 29 | it, simply add the following line to your Podfile: 30 | 31 | pod "UIView+Copy" 32 | 33 | ## Author 34 | 35 | pierremarcairoldi, pierremarcairoldi@gmail.com 36 | 37 | ## License 38 | 39 | UIView+Copy is available under the MIT license. See the LICENSE file for more info. 40 | 41 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | desc "Runs the specs [EMPTY]" 2 | task :spec do 3 | # Provide your own implementation 4 | end 5 | 6 | task :version do 7 | git_remotes = `git remote`.strip.split("\n") 8 | 9 | if git_remotes.count > 0 10 | puts "-- fetching version number from github" 11 | sh 'git fetch' 12 | 13 | remote_version = remote_spec_version 14 | end 15 | 16 | if remote_version.nil? 17 | puts "There is no current released version. You're about to release a new Pod." 18 | version = "0.0.1" 19 | else 20 | puts "The current released version of your pod is " + 21 | remote_spec_version.to_s() 22 | version = suggested_version_number 23 | end 24 | 25 | puts "Enter the version you want to release (" + version + ") " 26 | new_version_number = $stdin.gets.strip 27 | if new_version_number == "" 28 | new_version_number = version 29 | end 30 | 31 | replace_version_number(new_version_number) 32 | end 33 | 34 | desc "Release a new version of the Pod (append repo=name to push to a private spec repo)" 35 | task :release do 36 | # Allow override of spec repo name using `repo=private` after task name 37 | repo = ENV["repo"] || "master" 38 | 39 | puts "* Running version" 40 | sh "rake version" 41 | 42 | unless ENV['SKIP_CHECKS'] 43 | if `git symbolic-ref HEAD 2>/dev/null`.strip.split('/').last != 'master' 44 | $stderr.puts "[!] You need to be on the `master' branch in order to be able to do a release." 45 | exit 1 46 | end 47 | 48 | if `git tag`.strip.split("\n").include?(spec_version) 49 | $stderr.puts "[!] A tag for version `#{spec_version}' already exists. Change the version in the podspec" 50 | exit 1 51 | end 52 | 53 | puts "You are about to release `#{spec_version}`, is that correct? [y/n]" 54 | exit if $stdin.gets.strip.downcase != 'y' 55 | end 56 | 57 | puts "* Running specs" 58 | sh "rake spec" 59 | 60 | puts "* Linting the podspec" 61 | sh "pod lib lint" 62 | 63 | # Then release 64 | sh "git commit #{podspec_path} CHANGELOG.md VERSION -m 'Release #{spec_version}' --allow-empty" 65 | sh "git tag -a #{spec_version} -m 'Release #{spec_version}'" 66 | sh "git push origin master" 67 | sh "git push origin --tags" 68 | if repo == "master" 69 | sh "pod trunk push #{podspec_path}" 70 | else 71 | sh "pod repo push #{repo} #{podspec_path}" 72 | end 73 | end 74 | 75 | # @return [Pod::Version] The version as reported by the Podspec. 76 | # 77 | def spec_version 78 | require 'cocoapods' 79 | spec = Pod::Specification.from_file(podspec_path) 80 | spec.version 81 | end 82 | 83 | # @return [Pod::Version] The version as reported by the Podspec from remote. 84 | # 85 | def remote_spec_version 86 | require 'cocoapods-core' 87 | 88 | if spec_file_exist_on_remote? 89 | remote_spec = eval(`git show origin/master:#{podspec_path}`) 90 | remote_spec.version 91 | else 92 | nil 93 | end 94 | end 95 | 96 | # @return [Bool] If the remote repository has a copy of the podpesc file or not. 97 | # 98 | def spec_file_exist_on_remote? 99 | test_condition = `if git rev-parse --verify --quiet origin/master:#{podspec_path} >/dev/null; 100 | then 101 | echo 'true' 102 | else 103 | echo 'false' 104 | fi` 105 | 106 | 'true' == test_condition.strip 107 | end 108 | 109 | # @return [String] The relative path of the Podspec. 110 | # 111 | def podspec_path 112 | podspecs = Dir.glob('*.podspec') 113 | if podspecs.count == 1 114 | podspecs.first 115 | else 116 | raise "Could not select a podspec" 117 | end 118 | end 119 | 120 | # @return [String] The suggested version number based on the local and remote 121 | # version numbers. 122 | # 123 | def suggested_version_number 124 | if spec_version != remote_spec_version 125 | spec_version.to_s() 126 | else 127 | next_version(spec_version).to_s() 128 | end 129 | end 130 | 131 | # @param [Pod::Version] version 132 | # the version for which you need the next version 133 | # 134 | # @note It is computed by bumping the last component of 135 | # the version string by 1. 136 | # 137 | # @return [Pod::Version] The version that comes next after 138 | # the version supplied. 139 | # 140 | def next_version(version) 141 | version_components = version.to_s().split("."); 142 | last = (version_components.last.to_i() + 1).to_s 143 | version_components[-1] = last 144 | Pod::Version.new(version_components.join(".")) 145 | end 146 | 147 | # @param [String] new_version_number 148 | # the new version number 149 | # 150 | # @note This methods replaces the version number in the podspec file 151 | # with a new version number. 152 | # 153 | # @return void 154 | # 155 | def replace_version_number(new_version_number) 156 | File.open('VERSION', "w") { |file| file.puts new_version_number } 157 | end 158 | -------------------------------------------------------------------------------- /UIView+Copy.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint NAME.podspec' to ensure this is a 3 | # valid spec and remove all comments before submitting the spec. 4 | # 5 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 6 | # 7 | Pod::Spec.new do |s| 8 | s.name = "UIView+Copy" 9 | s.version = "0.0.8" 10 | s.summary = "Adding a copy method to UIView." 11 | s.homepage = "https://github.com/petester42/UIView-Copy" 12 | #s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2" 13 | s.license = 'MIT' 14 | s.author = { "Pierre-Marc Airoldi" => "pierremarcairoldi@gmail.com" } 15 | s.source = { :git => "https://github.com/petester42/UIView-Copy.git", :tag => s.version.to_s } 16 | s.social_media_url = 'https://twitter.com/petester42' 17 | 18 | s.platform = :ios, '6.0' 19 | s.ios.deployment_target = '6.0' 20 | s.requires_arc = true 21 | 22 | s.source_files = 'Classes' 23 | #s.resources = 'Assets/*.png' 24 | end 25 | --------------------------------------------------------------------------------