diff --git a/README.md b/README.md index 17042a8..ca67f6a 100644 --- a/README.md +++ b/README.md @@ -19,4 +19,11 @@ Additionally, if you merely desire to know the `UIEdgeInsets` of the transparenc `[yourImage transparencyInsetsRequiringFullOpacity:YES];` -This call works based on the same principles as the "advanced" trim method, with the boolean dictating whether non-opaque pixels should be considered transparent. \ No newline at end of file +This call works based on the same principles as the "advanced" trim method, with the boolean dictating whether non-opaque pixels should be considered transparent. + + +This fork adds support for trimming white area around image with given tolerance + +`[yourImage imageByTrimmingWhitePixelsWithOpacity:VALUE];` + +where 0 - cut only white, 255 - remove everything \ No newline at end of file diff --git a/Transparency Trim Demo/Transparency Trim Demo.xcodeproj/project.pbxproj b/Transparency Trim Demo/Transparency Trim Demo.xcodeproj/project.pbxproj index b25269f..e67446f 100644 --- a/Transparency Trim Demo/Transparency Trim Demo.xcodeproj/project.pbxproj +++ b/Transparency Trim Demo/Transparency Trim Demo.xcodeproj/project.pbxproj @@ -21,6 +21,10 @@ 6B06373E177B30D900B55AC5 /* UIImage+Trim.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B06373D177B30D900B55AC5 /* UIImage+Trim.m */; }; 6B063741177B33B900B55AC5 /* demo_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 6B06373F177B33B900B55AC5 /* demo_image.png */; }; 6B063742177B33B900B55AC5 /* demo_image@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6B063740177B33B900B55AC5 /* demo_image@2x.png */; }; + 9F31271D18C1239E008CD497 /* demo_white_image.png in Resources */ = {isa = PBXBuildFile; fileRef = 9F31271B18C1239E008CD497 /* demo_white_image.png */; }; + 9F31271E18C1239E008CD497 /* demo_white_image@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 9F31271C18C1239E008CD497 /* demo_white_image@2x.png */; }; + 9F31272118C123D5008CD497 /* ELCWhiteViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F31272018C123D5008CD497 /* ELCWhiteViewController.m */; }; + 9F31272418C123DE008CD497 /* ELCWhiteViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9F31272218C123DE008CD497 /* ELCWhiteViewController.xib */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -44,6 +48,11 @@ 6B06373D177B30D900B55AC5 /* UIImage+Trim.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Trim.m"; sourceTree = ""; }; 6B06373F177B33B900B55AC5 /* demo_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = demo_image.png; sourceTree = ""; }; 6B063740177B33B900B55AC5 /* demo_image@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "demo_image@2x.png"; sourceTree = ""; }; + 9F31271B18C1239E008CD497 /* demo_white_image.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = demo_white_image.png; sourceTree = ""; }; + 9F31271C18C1239E008CD497 /* demo_white_image@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "demo_white_image@2x.png"; sourceTree = ""; }; + 9F31271F18C123D5008CD497 /* ELCWhiteViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELCWhiteViewController.h; sourceTree = ""; }; + 9F31272018C123D5008CD497 /* ELCWhiteViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELCWhiteViewController.m; sourceTree = ""; }; + 9F31272318C123DE008CD497 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/ELCWhiteViewController.xib; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -97,6 +106,9 @@ 6B063731177B30C400B55AC5 /* ELCViewController.h */, 6B063732177B30C400B55AC5 /* ELCViewController.m */, 6B063734177B30C400B55AC5 /* ELCViewController.xib */, + 9F31271F18C123D5008CD497 /* ELCWhiteViewController.h */, + 9F31272018C123D5008CD497 /* ELCWhiteViewController.m */, + 9F31272218C123DE008CD497 /* ELCWhiteViewController.xib */, 6B063720177B30C400B55AC5 /* Supporting Files */, ); path = "Transparency Trim Demo"; @@ -107,6 +119,8 @@ children = ( 6B06373F177B33B900B55AC5 /* demo_image.png */, 6B063740177B33B900B55AC5 /* demo_image@2x.png */, + 9F31271B18C1239E008CD497 /* demo_white_image.png */, + 9F31271C18C1239E008CD497 /* demo_white_image@2x.png */, 6B063721177B30C400B55AC5 /* Transparency Trim Demo-Info.plist */, 6B063722177B30C400B55AC5 /* InfoPlist.strings */, 6B063725177B30C400B55AC5 /* main.m */, @@ -171,11 +185,14 @@ buildActionMask = 2147483647; files = ( 6B063724177B30C400B55AC5 /* InfoPlist.strings in Resources */, + 9F31271E18C1239E008CD497 /* demo_white_image@2x.png in Resources */, 6B06372C177B30C400B55AC5 /* Default.png in Resources */, 6B06372E177B30C400B55AC5 /* Default@2x.png in Resources */, 6B063730177B30C400B55AC5 /* Default-568h@2x.png in Resources */, + 9F31272418C123DE008CD497 /* ELCWhiteViewController.xib in Resources */, 6B063736177B30C400B55AC5 /* ELCViewController.xib in Resources */, 6B063741177B33B900B55AC5 /* demo_image.png in Resources */, + 9F31271D18C1239E008CD497 /* demo_white_image.png in Resources */, 6B063742177B33B900B55AC5 /* demo_image@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -190,6 +207,7 @@ 6B063726177B30C400B55AC5 /* main.m in Sources */, 6B06372A177B30C400B55AC5 /* ELCAppDelegate.m in Sources */, 6B063733177B30C400B55AC5 /* ELCViewController.m in Sources */, + 9F31272118C123D5008CD497 /* ELCWhiteViewController.m in Sources */, 6B06373E177B30D900B55AC5 /* UIImage+Trim.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -213,6 +231,14 @@ name = ELCViewController.xib; sourceTree = ""; }; + 9F31272218C123DE008CD497 /* ELCWhiteViewController.xib */ = { + isa = PBXVariantGroup; + children = ( + 9F31272318C123DE008CD497 /* en */, + ); + name = ELCWhiteViewController.xib; + sourceTree = ""; + }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -345,6 +371,7 @@ 6B06373B177B30C400B55AC5 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; diff --git a/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.h b/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.h index c6f46f7..01b0475 100644 --- a/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.h +++ b/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.h @@ -8,12 +8,12 @@ #import -@class ELCViewController; +@class UIViewController; @interface ELCAppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; -@property (strong, nonatomic) ELCViewController *viewController; +@property (strong, nonatomic) UIViewController *viewController; @end diff --git a/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.m b/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.m index dbbfa7d..fe9e1de 100644 --- a/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.m +++ b/Transparency Trim Demo/Transparency Trim Demo/ELCAppDelegate.m @@ -8,7 +8,7 @@ #import "ELCAppDelegate.h" -#import "ELCViewController.h" +#import "ELCWhiteViewController.h" @implementation ELCAppDelegate @@ -16,7 +16,7 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. - self.viewController = [[ELCViewController alloc] initWithNibName:@"ELCViewController" bundle:nil]; + self.viewController = [[ELCWhiteViewController alloc] initWithNibName:@"ELCWhiteViewController" bundle:nil]; self.window.rootViewController = self.viewController; [self.window makeKeyAndVisible]; diff --git a/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.h b/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.h new file mode 100644 index 0000000..c255616 --- /dev/null +++ b/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.h @@ -0,0 +1,17 @@ +// +// ELCWhiteViewController.h +// Transparency Trim Demo +// +// Created by Blazej Stanek on 28.02.2014. +// Copyright (c) 2013 Chris Stroud. All rights reserved. +// + +#import + +@interface ELCWhiteViewController : UIViewController + +@property (weak, nonatomic) IBOutlet UIImageView *semiTransparentImageView; +@property (weak, nonatomic) IBOutlet UIImageView *originalImageView; +@property (weak, nonatomic) IBOutlet UIImageView *fullyOpaqueImageView; + +@end diff --git a/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.m b/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.m new file mode 100644 index 0000000..f7d5029 --- /dev/null +++ b/Transparency Trim Demo/Transparency Trim Demo/ELCWhiteViewController.m @@ -0,0 +1,27 @@ +// +// ELCWhiteViewController.m +// Transparency Trim Demo +// +// Created by Blazej Stanek on 28.02.2014. +// Copyright (c) 2013 Chris Stroud. All rights reserved. +// + +#import "ELCWhiteViewController.h" +#import "UIImage+Trim.h" + +@implementation ELCWhiteViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + UIImage *originalImage = [UIImage imageNamed:@"demo_white_image"]; + UIImage *semiTransparentCrop = [originalImage imageByTrimmingWhitePixelsWithOpacity:24]; + UIImage *fullOpacityCrop = [originalImage imageByTrimmingWhitePixelsWithOpacity:64]; + + [self.originalImageView setImage:originalImage]; + [self.semiTransparentImageView setImage:semiTransparentCrop]; + [self.fullyOpaqueImageView setImage:fullOpacityCrop]; +} + +@end diff --git a/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.h b/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.h index 006c4a2..6d12100 100644 --- a/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.h +++ b/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.h @@ -14,5 +14,6 @@ - (UIEdgeInsets)transparencyInsetsRequiringFullOpacity:(BOOL)fullyOpaque; - (UIImage *)imageByTrimmingTransparentPixels; - (UIImage *)imageByTrimmingTransparentPixelsRequiringFullOpacity:(BOOL)fullyOpaque; +- (UIImage *)imageByTrimmingWhitePixelsWithOpacity:(UInt8)tolerance; @end diff --git a/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.m b/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.m old mode 100644 new mode 100755 index 7251246..a41e7b7 --- a/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.m +++ b/Transparency Trim Demo/Transparency Trim Demo/UIImage+Trim.m @@ -28,7 +28,7 @@ - (UIEdgeInsets)transparencyInsetsRequiringFullOpacity:(BOOL)fullyOpaque uint8_t * bitmapData = calloc((size_t)(width * height), sizeof(uint8_t)); // Create alpha-only bitmap context - CGContextRef contextRef = CGBitmapContextCreate(bitmapData, (NSUInteger)width, (NSUInteger)height, 8, (NSUInteger)bytesPerRow, NULL, kCGImageAlphaOnly); + CGContextRef contextRef = CGBitmapContextCreate(bitmapData, (NSUInteger)width, (NSUInteger)height, 8, (NSUInteger)bytesPerRow, NULL, (kCGBitmapAlphaInfoMask & kCGImageAlphaOnly)); CGImageRef cgImage = self.CGImage; CGRect rect = CGRectMake(0, 0, width, height); @@ -172,4 +172,139 @@ - (UIImage *)imageByTrimmingTransparentPixelsRequiringFullOpacity:(BOOL)fullyOpa return img; } +/* + * Calculates the insets of white area around all sides of the image + * + * @param tolerance + * Maximal difference from white + */ +- (UIEdgeInsets)transparencyInsetsByCuttingWhitespace:(UInt8)tolerance +{ + // Draw our image on that context + NSInteger width = (NSInteger)CGImageGetWidth([self CGImage]); + NSInteger height = (NSInteger)CGImageGetHeight([self CGImage]); + NSInteger bytesPerRow = width * (NSInteger)sizeof(uint8_t); + + // Allocate array to hold alpha channel + uint8_t * bitmapData = calloc((size_t)(width * height), sizeof(uint8_t)); + + // Create grayscale image + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); + CGContextRef contextRef = CGBitmapContextCreate(bitmapData, (NSUInteger)width, (NSUInteger)height, 8, (NSUInteger)bytesPerRow, colorSpace, (kCGBitmapAlphaInfoMask & kCGImageAlphaNone)); + + CGImageRef cgImage = self.CGImage; + CGRect rect = CGRectMake(0, 0, width, height); + CGContextDrawImage(contextRef, rect, cgImage); + + // Sum all non-transparent pixels in every row and every column + uint16_t * rowSum = calloc((size_t)height, sizeof(uint16_t)); + uint16_t * colSum = calloc((size_t)width, sizeof(uint16_t)); + + // Enumerate through all pixels + for (NSInteger row = 0; row < height; row++) { + + for (NSInteger col = 0; col < width; col++) { + + // Found darker pixel + if (bitmapData[row*bytesPerRow + col] <= UINT8_MAX - tolerance) { + + rowSum[row]++; + colSum[col]++; + + } + } + } + + // Initialize crop insets and enumerate cols/rows arrays until we find non-empty columns or row + UIEdgeInsets crop = UIEdgeInsetsZero; + + // Top + for (NSInteger i = 0; i < height; i++) { + + if (rowSum[i] > 0) { + + crop.top = i; + break; + + } + + } + + // Bottom + for (NSInteger i = height - 1; i >= 0; i--) { + + if (rowSum[i] > 0) { + crop.bottom = MAX(0, height - i - 1); + break; + } + + } + + // Left + for (NSInteger i = 0; i < width; i++) { + + if (colSum[i] > 0) { + crop.left = i; + break; + } + + } + + // Right + for (NSInteger i = width - 1; i >= 0; i--) { + + if (colSum[i] > 0) { + + crop.right = MAX(0, width - i - 1); + break; + + } + } + + free(bitmapData); + free(colSum); + free(rowSum); + + CGContextRelease(contextRef); + + return crop; +} + +- (UIImage *)imageByTrimmingWhitePixelsWithOpacity:(UInt8)tolerance +{ + if (self.size.height < 2 || self.size.width < 2) { + + return self; + + } + + CGRect rect = CGRectMake(0, 0, self.size.width * self.scale, self.size.height * self.scale); + UIEdgeInsets crop = [self transparencyInsetsByCuttingWhitespace:tolerance]; + + UIImage *img = self; + + if (crop.top == 0 && crop.bottom == 0 && crop.left == 0 && crop.right == 0) { + + // No cropping needed + + } else { + + // Calculate new crop bounds + rect.origin.x += crop.left; + rect.origin.y += crop.top; + rect.size.width -= crop.left + crop.right; + rect.size.height -= crop.top + crop.bottom; + + // Crop it + CGImageRef newImage = CGImageCreateWithImageInRect([self CGImage], rect); + + // Convert back to UIImage + img = [UIImage imageWithCGImage:newImage scale:self.scale orientation:self.imageOrientation]; + + CGImageRelease(newImage); + } + + return img; +} + @end diff --git a/Transparency Trim Demo/Transparency Trim Demo/demo_white_image.png b/Transparency Trim Demo/Transparency Trim Demo/demo_white_image.png new file mode 100755 index 0000000..162f0cf Binary files /dev/null and b/Transparency Trim Demo/Transparency Trim Demo/demo_white_image.png differ diff --git a/Transparency Trim Demo/Transparency Trim Demo/demo_white_image@2x.png b/Transparency Trim Demo/Transparency Trim Demo/demo_white_image@2x.png new file mode 100755 index 0000000..0386388 Binary files /dev/null and b/Transparency Trim Demo/Transparency Trim Demo/demo_white_image@2x.png differ diff --git a/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCViewController.xib b/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCViewController.xib index 4913a34..557dc74 100644 --- a/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCViewController.xib +++ b/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCViewController.xib @@ -3,12 +3,12 @@ 1552 12E55 - 3084 + 4514 1187.39 626.00 com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 + 3747 IBNSLayoutConstraint @@ -43,6 +43,7 @@ {{180, 20}, {120, 120}} + _NS:9 4 NO @@ -54,6 +55,7 @@ {{180, 214}, {120, 120}} + _NS:9 4 NO @@ -65,6 +67,7 @@ {{180, 408}, {120, 120}} + _NS:9 4 NO @@ -76,6 +79,7 @@ {{20, 69}, {152, 21}} + _NS:9 NO YES @@ -95,8 +99,8 @@ 1 17 - - Helvetica + + HelveticaNeue 17 16 @@ -108,6 +112,7 @@ {{20, 457}, {152, 21}} + _NS:9 NO YES @@ -120,7 +125,7 @@ 0 2 - + NO @@ -129,6 +134,7 @@ {{20, 263}, {152, 21}} + _NS:9 NO YES @@ -141,13 +147,14 @@ 0 2 - + NO {{0, 20}, {320, 548}} + 3 MC43NQA @@ -171,7 +178,7 @@ IBCocoaTouchFramework - Retina 4 Full Screen + Retina 4-inch Full Screen 2 IBCocoaTouchFramework @@ -247,9 +254,10 @@ 1000 - 8 + 0 29 3 + NO @@ -266,6 +274,7 @@ 3 9 3 + NO @@ -282,6 +291,7 @@ 6 24 3 + NO @@ -295,9 +305,10 @@ 1000 - 8 + 0 29 3 + NO @@ -314,6 +325,7 @@ 6 24 2 + NO @@ -327,9 +339,10 @@ 1000 - 8 + 0 29 3 + NO @@ -346,6 +359,7 @@ 6 24 3 + NO @@ -359,9 +373,10 @@ 1000 - 8 + 0 29 3 + NO @@ -378,6 +393,7 @@ 5 22 2 + NO @@ -391,9 +407,10 @@ 1000 - 8 + 0 29 3 + NO @@ -410,6 +427,7 @@ 3 9 3 + NO @@ -426,6 +444,7 @@ 6 24 3 + NO @@ -439,9 +458,10 @@ 1000 - 8 + 0 29 3 + NO @@ -458,6 +478,7 @@ 6 24 2 + NO @@ -471,9 +492,10 @@ 1000 - 8 + 0 29 3 + NO @@ -490,6 +512,7 @@ 3 9 3 + NO @@ -503,9 +526,10 @@ 1000 - 8 + 0 29 3 + NO @@ -535,6 +559,7 @@ 3 9 1 + NO @@ -551,6 +576,7 @@ 3 9 1 + NO @@ -574,6 +600,7 @@ 3 9 1 + NO @@ -597,6 +624,7 @@ 3 9 1 + NO @@ -841,9 +869,18 @@ 0 IBCocoaTouchFramework + YES + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + YES 3 YES - 2083 + 3747 diff --git a/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCWhiteViewController.xib b/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCWhiteViewController.xib new file mode 100644 index 0000000..df20f88 --- /dev/null +++ b/Transparency Trim Demo/Transparency Trim Demo/en.lproj/ELCWhiteViewController.xib @@ -0,0 +1,839 @@ + + + + 1552 + 12E55 + 4514 + 1187.39 + 626.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 3747 + + + IBNSLayoutConstraint + IBProxyObject + IBUIImageView + IBUILabel + IBUIView + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 274 + {{180, 20}, {120, 120}} + + + _NS:9 + 4 + NO + IBCocoaTouchFramework + + + + 274 + {{180, 214}, {120, 120}} + + + _NS:9 + 4 + NO + IBCocoaTouchFramework + + + + 274 + {{180, 408}, {120, 120}} + + _NS:9 + 4 + NO + IBCocoaTouchFramework + + + + 292 + {{20, 69}, {152, 21}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Tolerance 24 + + 1 + MCAwIDAAA + darkTextColor + + + 0 + 2 + + 1 + 17 + + + HelveticaNeue + 17 + 16 + + NO + + + + 292 + {{20, 457}, {152, 21}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Tolerance 64 + + + 0 + 2 + + + NO + + + + 292 + {{20, 263}, {152, 21}} + + + _NS:9 + NO + YES + 7 + NO + IBCocoaTouchFramework + Original + + + 0 + 2 + + + NO + + + {{0, 20}, {320, 548}} + + + 3 + MC43NQA + + 2 + + + NO + + + IBUIScreenMetrics + + YES + + + + + + {320, 568} + {568, 320} + + + IBCocoaTouchFramework + Retina 4-inch Full Screen + 2 + + IBCocoaTouchFramework + + + + + + + view + + + + 7 + + + + semiTransparentImageView + + + + 18 + + + + originalImageView + + + + 19 + + + + fullyOpaqueImageView + + + + 20 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 4 + 0 + + 4 + 1 + + 70 + + 1000 + + 3 + 9 + 3 + NO + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + NO + + + + 4 + 0 + + 4 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + NO + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + NO + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 10 + 0 + + 10 + 1 + + 0.0 + + 1000 + + 5 + 22 + 2 + NO + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 3 + 0 + + 3 + 1 + + 263 + + 1000 + + 3 + 9 + 3 + NO + + + + 5 + 0 + + 6 + 1 + + 8 + + 1000 + + 6 + 24 + 3 + NO + + + + 6 + 0 + + 6 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 5 + 0 + + 5 + 1 + + 0.0 + + 1000 + + 6 + 24 + 2 + NO + + + + 3 + 0 + + 3 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + 3 + 0 + + 3 + 1 + + 69 + + 1000 + + 3 + 9 + 3 + NO + + + + 5 + 0 + + 5 + 1 + + 20 + + 1000 + + 0 + 29 + 3 + NO + + + + + + + + + + + + 8 + + + + + 8 + 0 + + 0 + 1 + + 120 + + 1000 + + 3 + 9 + 1 + NO + + + + 7 + 0 + + 0 + 1 + + 120 + + 1000 + + 3 + 9 + 1 + NO + + + + + + 13 + + + + + 8 + 0 + + 0 + 1 + + 120 + + 1000 + + 3 + 9 + 1 + NO + + + + + + 14 + + + + + 8 + 0 + + 0 + 1 + + 120 + + 1000 + + 3 + 9 + 1 + NO + + + + + + 15 + + + + + 16 + + + + + + 17 + + + + + + 22 + + + + + 23 + + + + + 40 + + + + + 42 + + + + + 61 + + + + + 69 + + + + + 72 + + + + + 73 + + + + + 74 + + + + + 76 + + + + + 79 + + + + + 81 + + + + + 88 + + + + + 89 + + + + + 91 + + + + + 93 + + + + + 97 + + + + + 98 + + + + + 99 + + + + + 100 + + + + + 101 + + + + + + + ELCWhiteViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + + + + + + + + + + + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 101 + + + 0 + IBCocoaTouchFramework + YES + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + 3 + YES + 3747 + +