diff --git a/DemoImageEditor.h b/DemoImageEditor.h new file mode 100755 index 0000000..d9633e4 --- /dev/null +++ b/DemoImageEditor.h @@ -0,0 +1,7 @@ +#import "HFImageEditorViewController.h" + +@interface DemoImageEditor : HFImageEditorViewController + +@property(nonatomic,strong) IBOutlet UIBarButtonItem *saveButton; + +@end diff --git a/DemoImageEditor.m b/DemoImageEditor.m new file mode 100755 index 0000000..60607c5 --- /dev/null +++ b/DemoImageEditor.m @@ -0,0 +1,63 @@ +#import "HFImageEditorViewController+Private.h" +#import "DemoImageEditor.h" + +@interface DemoImageEditor () + +@end + +@implementation DemoImageEditor + +@synthesize saveButton = _saveButton; + +-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if(self) { + self.cropRect = CGRectMake(0,0,320,320); + self.minimumScale = 0.2; + self.maximumScale = 10; + } + return self; +} + + +- (void)viewDidUnload +{ + [super viewDidUnload]; + self.saveButton = nil; +} + + + +- (IBAction)setSquareAction:(id)sender +{ + self.cropRect = CGRectMake((self.frameView.frame.size.width-320)/2.0f, (self.frameView.frame.size.height-320)/2.0f, 320, 320); + [self reset:YES]; +} + +- (IBAction)setLandscapeAction:(id)sender +{ + self.cropRect = CGRectMake((self.frameView.frame.size.width-320)/2.0f, (self.frameView.frame.size.height-240)/2.0f, 320, 240); + [self reset:YES]; +} + + +- (IBAction)setLPortraitAction:(id)sender +{ + self.cropRect = CGRectMake((self.frameView.frame.size.width-240)/2.0f, (self.frameView.frame.size.height-320)/2.0f, 240, 320); + [self reset:YES]; +} + +#pragma mark Hooks +- (void)startTransformHook +{ + self.saveButton.tintColor = [UIColor colorWithRed:0 green:49/255.0f blue:98/255.0f alpha:1]; +} + +- (void)endTransformHook +{ + self.saveButton.tintColor = [UIColor colorWithRed:0 green:128/255.0f blue:1 alpha:1]; +} + + +@end diff --git a/DemoImageEditor.xib b/DemoImageEditor.xib new file mode 100755 index 0000000..f44f706 --- /dev/null +++ b/DemoImageEditor.xib @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Example/PNImagePickerViewController.xcodeproj/project.pbxproj b/Example/PNImagePickerViewController.xcodeproj/project.pbxproj index b4b9575..7cc8aa0 100644 --- a/Example/PNImagePickerViewController.xcodeproj/project.pbxproj +++ b/Example/PNImagePickerViewController.xcodeproj/project.pbxproj @@ -20,7 +20,6 @@ 6003F5B2195388D20070C39A /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6003F591195388D20070C39A /* UIKit.framework */; }; 6003F5BA195388D20070C39A /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 6003F5B8195388D20070C39A /* InfoPlist.strings */; }; 6003F5BC195388D20070C39A /* Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 6003F5BB195388D20070C39A /* Tests.m */; }; - 681785911C69DCB50032DAAC /* PNImagePickerViewController.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 681785901C69DCB50032DAAC /* PNImagePickerViewController.framework */; }; 873B8AEB1B1F5CCA007FD442 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */; }; AE78532B104C86CFD7E59E56 /* libPods-PNImagePickerViewController_Tests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C6AEC746978DFB326EAAA7FF /* libPods-PNImagePickerViewController_Tests.a */; }; DC5F4864BF4E2B1C54F620F6 /* libPods-PNImagePickerViewController_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C80B5FA595CB4977C47CBE3 /* libPods-PNImagePickerViewController_Example.a */; }; @@ -61,7 +60,7 @@ 606FC2411953D9B200FFA9A0 /* Tests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tests-Prefix.pch"; sourceTree = ""; }; 681785901C69DCB50032DAAC /* PNImagePickerViewController.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PNImagePickerViewController.framework; path = "Pods/../build/Debug-iphoneos/PNImagePickerViewController.framework"; sourceTree = ""; }; 873B8AEA1B1F5CCA007FD442 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; - 930DB7C275684056258BA5EF /* PNImagePickerViewController.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = PNImagePickerViewController.podspec; path = ../PNImagePickerViewController.podspec; sourceTree = ""; }; + 930DB7C275684056258BA5EF /* PNImagePickerViewController.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = PNImagePickerViewController.podspec; path = ../PNImagePickerViewController.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; AD447568A76DA895F7B37A24 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; ADC9C57C00FD4B2D4EF4A32E /* Pods-PNImagePickerViewController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PNImagePickerViewController_Example.release.xcconfig"; path = "Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.release.xcconfig"; sourceTree = ""; }; C6AEC746978DFB326EAAA7FF /* libPods-PNImagePickerViewController_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-PNImagePickerViewController_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -74,7 +73,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 681785911C69DCB50032DAAC /* PNImagePickerViewController.framework in Frameworks */, 6003F590195388D20070C39A /* CoreGraphics.framework in Frameworks */, 6003F592195388D20070C39A /* UIKit.framework in Frameworks */, 6003F58E195388D20070C39A /* Foundation.framework in Frameworks */, @@ -194,7 +192,6 @@ 43986E6CA155C636B098FB5C /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */, CB8F44A02F3C2331783D2F8C /* Pods-PNImagePickerViewController_Tests.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -209,6 +206,7 @@ 6003F586195388D20070C39A /* Sources */, 6003F587195388D20070C39A /* Frameworks */, 6003F588195388D20070C39A /* Resources */, + C56906A3A098A96D094B8E5B /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -227,6 +225,7 @@ 6003F5AA195388D20070C39A /* Sources */, 6003F5AB195388D20070C39A /* Frameworks */, 6003F5AC195388D20070C39A /* Resources */, + 1A8BC91A508BD0EFA14DD6F1 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -297,6 +296,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 1A8BC91A508BD0EFA14DD6F1 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-resources.sh", + "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CLImageEditor.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; 2C6565F5C43756D0430E8CA7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -341,6 +362,28 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + C56906A3A098A96D094B8E5B /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-resources.sh", + "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/CLImageEditor.bundle", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ diff --git a/Example/PNImagePickerViewController/PNImagePickerViewControllerViewController.m b/Example/PNImagePickerViewController/PNImagePickerViewControllerViewController.m index 946a031..87e98c7 100644 --- a/Example/PNImagePickerViewController/PNImagePickerViewControllerViewController.m +++ b/Example/PNImagePickerViewController/PNImagePickerViewControllerViewController.m @@ -71,6 +71,7 @@ _imagePickerController = [[PNImagePickerViewController alloc] init]; _imagePickerController.delegate = self; } + [_imagePickerController setEnableEditMode:YES]; [_imagePickerController showImagePickerInController:self animated:YES]; } diff --git a/Example/Podfile.lock b/Example/Podfile.lock index 2192003..121f95f 100644 --- a/Example/Podfile.lock +++ b/Example/Podfile.lock @@ -1,4 +1,22 @@ PODS: + - CLImageEditor/AllTools (0.2.4): + - CLImageEditor/Core + - CLImageEditor/EmoticonTool + - CLImageEditor/ResizeTool + - CLImageEditor/SplashTool + - CLImageEditor/StickerTool + - CLImageEditor/TextTool + - CLImageEditor/Core (0.2.4) + - CLImageEditor/EmoticonTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/ResizeTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/SplashTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/StickerTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/TextTool (0.2.4): + - CLImageEditor/Core - DGActivityIndicatorView (2.1.1) - Expecta (1.0.6) - "Expecta+Snapshots (3.1.1)": @@ -7,6 +25,7 @@ PODS: - Specta (~> 1.0) - FBSnapshotTestCase/Core (2.1.4) - PNImagePickerViewController (1.0): + - CLImageEditor/AllTools - DGActivityIndicatorView - PureLayout - PureLayout (3.1.4) @@ -21,6 +40,7 @@ DEPENDENCIES: SPEC REPOS: https://github.com/cocoapods/specs.git: + - CLImageEditor - DGActivityIndicatorView - Expecta - "Expecta+Snapshots" @@ -33,11 +53,12 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: + CLImageEditor: dc3e5358f641368da3a76fc1c744a4c2ceb270ad DGActivityIndicatorView: ff2c76073d79692f724863c8dd38685866a03cb6 Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5 "Expecta+Snapshots": dcff217eef506dabd6dfdc7864ea2da321fafbb8 FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a - PNImagePickerViewController: ec5feb9bd69e25a02dd13423ba2f27aa07812dbf + PNImagePickerViewController: 38f4dff617354431e0b6071a52bd3136b79e3ef3 PureLayout: f08c01b8dec00bb14a1fefa3de4c7d9c265df85e Specta: 3e1bd89c3517421982dc4d1c992503e48bd5fe66 diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness.png new file mode 100644 index 0000000..88e73f6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness@2x.png new file mode 100644 index 0000000..0b2a1fd Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/brightness@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast.png new file mode 100644 index 0000000..11f7832 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast@2x.png new file mode 100644 index 0000000..5746071 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/contrast@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/icon.png new file mode 100644 index 0000000..05126fe Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation.png new file mode 100644 index 0000000..421dbf1 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation@2x.png new file mode 100644 index 0000000..5b3a012 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/black/saturation@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness.png new file mode 100644 index 0000000..88e73f6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness@2x.png new file mode 100644 index 0000000..0b2a1fd Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/brightness@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast.png new file mode 100644 index 0000000..11f7832 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast@2x.png new file mode 100644 index 0000000..5746071 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/contrast@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/icon.png new file mode 100644 index 0000000..29c0d59 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation.png new file mode 100644 index 0000000..421dbf1 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation@2x.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation@2x.png new file mode 100644 index 0000000..5b3a012 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLAdjustmentTool/white/saturation@2x.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/band.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/band.png new file mode 100644 index 0000000..5aeac88 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/band.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_band.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_band.png new file mode 100644 index 0000000..ee1c504 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_band.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_circle.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_circle.png new file mode 100644 index 0000000..1c101e1 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_circle.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_normal.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_normal.png new file mode 100644 index 0000000..2f0006f Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/btn_normal.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/circle.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/circle.png new file mode 100644 index 0000000..ad98b8d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/circle.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/icon.png new file mode 100644 index 0000000..b023234 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/band.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/band.png new file mode 100644 index 0000000..5aeac88 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/band.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_band.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_band.png new file mode 100644 index 0000000..065669e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_band.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_circle.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_circle.png new file mode 100644 index 0000000..b4186e6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_circle.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_normal.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_normal.png new file mode 100644 index 0000000..c32604e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/btn_normal.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/circle.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/circle.png new file mode 100644 index 0000000..ad98b8d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/circle.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/icon.png new file mode 100644 index 0000000..b9131ab Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLBlurTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/btn_rotate.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/btn_rotate.png new file mode 100644 index 0000000..d83445b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/btn_rotate.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/icon.png new file mode 100644 index 0000000..a23016d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/btn_rotate.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/btn_rotate.png new file mode 100644 index 0000000..d4eda25 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/btn_rotate.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/icon.png new file mode 100644 index 0000000..eb25ab5 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLClippingTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/btn_eraser.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/btn_eraser.png new file mode 100644 index 0000000..8325adc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/btn_eraser.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/icon.png new file mode 100644 index 0000000..ab12c22 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/btn_eraser.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/btn_eraser.png new file mode 100644 index 0000000..67e8cfc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/btn_eraser.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/icon.png new file mode 100644 index 0000000..bcd172e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLDrawTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLBloomEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLBloomEffect.png new file mode 100644 index 0000000..1a328f2 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLBloomEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLEffectBase.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLEffectBase.png new file mode 100644 index 0000000..7721c02 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLEffectBase.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLGloomEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLGloomEffect.png new file mode 100644 index 0000000..0ad4534 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLGloomEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHighlightShadowEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHighlightShadowEffect.png new file mode 100644 index 0000000..224a06e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHighlightShadowEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHueEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHueEffect.png new file mode 100644 index 0000000..58ce182 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLHueEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPixellateEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPixellateEffect.png new file mode 100644 index 0000000..f25ce04 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPixellateEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPosterizeEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPosterizeEffect.png new file mode 100644 index 0000000..1fba755 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLPosterizeEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLSpotEffect.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLSpotEffect.png new file mode 100644 index 0000000..77d8de7 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/CLSpotEffect.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/black/icon.png new file mode 100644 index 0000000..5a52b01 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/white/icon.png new file mode 100644 index 0000000..648efb8 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEffectTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Copyright b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Copyright new file mode 100644 index 0000000..accce66 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Copyright @@ -0,0 +1,3 @@ + +The images in ./Emoticons are copyrighted by iMokhles (http:/imokhles.com/). + diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/001.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/001.png new file mode 100644 index 0000000..b0732a6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/001.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/002.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/002.png new file mode 100644 index 0000000..6096c84 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/002.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/003.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/003.png new file mode 100644 index 0000000..de2ef19 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/003.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/004.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/004.png new file mode 100644 index 0000000..db0858c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/004.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/005.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/005.png new file mode 100644 index 0000000..1e5d518 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/005.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/006.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/006.png new file mode 100644 index 0000000..616865d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/006.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/007.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/007.png new file mode 100644 index 0000000..a09d39e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/007.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/008.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/008.png new file mode 100644 index 0000000..b340a99 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/008.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/009.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/009.png new file mode 100644 index 0000000..fbe31d2 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/009.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/010.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/010.png new file mode 100644 index 0000000..6ea9db5 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/010.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/011.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/011.png new file mode 100644 index 0000000..88d0e3b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/011.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/012.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/012.png new file mode 100644 index 0000000..7e70e1c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/012.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/013.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/013.png new file mode 100644 index 0000000..7fbb672 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/013.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/014.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/014.png new file mode 100644 index 0000000..c11e90c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/014.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/015.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/015.png new file mode 100644 index 0000000..a1236f0 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/015.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/016.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/016.png new file mode 100644 index 0000000..f7c8263 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/016.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/017.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/017.png new file mode 100644 index 0000000..a62893e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/Emoticons/017.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/btn_delete.png new file mode 100644 index 0000000..8f2524b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/icon.png new file mode 100644 index 0000000..fa1be2c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/btn_delete.png new file mode 100644 index 0000000..b220792 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/icon.png new file mode 100644 index 0000000..70874b4 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLEmoticonTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/black/icon.png new file mode 100644 index 0000000..0c812d2 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/white/icon.png new file mode 100644 index 0000000..411f429 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLFilterTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_off.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_off.png new file mode 100644 index 0000000..c9bac33 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_off.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_on.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_on.png new file mode 100644 index 0000000..d0f1ed3 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_chain_on.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_height.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_height.png new file mode 100644 index 0000000..0a5d5c2 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_height.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_width.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_width.png new file mode 100644 index 0000000..8d554e0 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/btn_width.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/icon.png new file mode 100644 index 0000000..df485ec Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_off.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_off.png new file mode 100644 index 0000000..44f5fe9 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_off.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_on.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_on.png new file mode 100644 index 0000000..14f97a5 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_chain_on.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_height.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_height.png new file mode 100644 index 0000000..1bf1ff8 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_height.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_width.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_width.png new file mode 100644 index 0000000..441369d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/btn_width.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/icon.png new file mode 100644 index 0000000..cbedc05 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLResizeTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip1.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip1.png new file mode 100644 index 0000000..34e6fc3 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip1.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip2.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip2.png new file mode 100644 index 0000000..17e0481 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_flip2.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_rotate.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_rotate.png new file mode 100644 index 0000000..0ee20d9 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/btn_rotate.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/icon.png new file mode 100644 index 0000000..8794d4e Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip1.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip1.png new file mode 100644 index 0000000..9be1eae Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip1.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip2.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip2.png new file mode 100644 index 0000000..ec884a0 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_flip2.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_rotate.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_rotate.png new file mode 100644 index 0000000..d4eda25 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/btn_rotate.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/icon.png new file mode 100644 index 0000000..df3092d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLRotateTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/btn_eraser.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/btn_eraser.png new file mode 100644 index 0000000..8325adc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/btn_eraser.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/icon.png new file mode 100644 index 0000000..13aeab7 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/btn_eraser.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/btn_eraser.png new file mode 100644 index 0000000..67e8cfc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/btn_eraser.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/icon.png new file mode 100644 index 0000000..2e66ebd Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLSplashTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/Copyright b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/Copyright new file mode 100644 index 0000000..90c118a --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/Copyright @@ -0,0 +1,15 @@ + +The following images are copyrighted by ICON HOIHOI(http://iconhoihoi.oops.jp/). + +stickers/001.png +stickers/002.png +stickers/003.png +stickers/004.png +stickers/005.png +stickers/006.png +stickers/007.png +stickers/008.png +stickers/009.png +stickers/010.png +stickers/011.png +stickers/012.png diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/btn_delete.png new file mode 100644 index 0000000..8f2524b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/icon.png new file mode 100644 index 0000000..32d60bf Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/001.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/001.png new file mode 100644 index 0000000..3d370dc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/001.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/002.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/002.png new file mode 100644 index 0000000..c759577 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/002.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/003.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/003.png new file mode 100644 index 0000000..cc16198 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/003.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/004.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/004.png new file mode 100644 index 0000000..7e136ee Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/004.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/005.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/005.png new file mode 100644 index 0000000..10b205d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/005.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/006.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/006.png new file mode 100644 index 0000000..9c8f5b6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/006.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/007.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/007.png new file mode 100644 index 0000000..0861c14 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/007.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/008.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/008.png new file mode 100644 index 0000000..af30283 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/008.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/009.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/009.png new file mode 100644 index 0000000..c9bec4b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/009.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/010.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/010.png new file mode 100644 index 0000000..2d9b61d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/010.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/011.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/011.png new file mode 100644 index 0000000..eb0c87d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/011.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/012.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/012.png new file mode 100644 index 0000000..9600399 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/stickers/012.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/btn_delete.png new file mode 100644 index 0000000..b220792 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/icon.png new file mode 100644 index 0000000..08c412d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLStickerTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_add.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_add.png new file mode 100644 index 0000000..3a4c42c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_add.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_center.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_center.png new file mode 100644 index 0000000..ed85528 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_center.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_left.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_left.png new file mode 100644 index 0000000..caac58c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_left.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_right.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_right.png new file mode 100644 index 0000000..d1c4656 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_align_right.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_delete.png new file mode 100644 index 0000000..8f2524b Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_font.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_font.png new file mode 100644 index 0000000..1d75530 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/btn_font.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/icon.png new file mode 100644 index 0000000..ac82180 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_add.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_add.png new file mode 100644 index 0000000..f7536b6 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_add.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_center.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_center.png new file mode 100644 index 0000000..978e8cf Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_center.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_left.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_left.png new file mode 100644 index 0000000..739fdab Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_left.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_right.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_right.png new file mode 100644 index 0000000..ab2b3ba Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_align_right.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_delete.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_delete.png new file mode 100644 index 0000000..b220792 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_delete.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_font.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_font.png new file mode 100644 index 0000000..a4a5b3a Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/btn_font.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/icon.png new file mode 100644 index 0000000..12f4819 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLTextTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_arrow.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_arrow.png new file mode 100644 index 0000000..cd359e9 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_arrow.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_reset.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_reset.png new file mode 100644 index 0000000..35c0ec3 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/btn_reset.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/icon.png new file mode 100644 index 0000000..ae5f2c4 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/black/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_arrow.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_arrow.png new file mode 100644 index 0000000..dccef3f Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_arrow.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_reset.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_reset.png new file mode 100644 index 0000000..ad19f58 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/btn_reset.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/icon.png b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/icon.png new file mode 100644 index 0000000..737d15d Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/CLToneCurveTool/white/icon.png differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ar.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ar.lproj/Localizable.strings new file mode 100644 index 0000000..5584bed Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ar.lproj/Localizable.strings differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/en.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/en.lproj/Localizable.strings new file mode 100644 index 0000000..d98765c Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/en.lproj/Localizable.strings differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/fr.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/fr.lproj/Localizable.strings new file mode 100644 index 0000000..63acab6 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/fr.lproj/Localizable.strings @@ -0,0 +1,167 @@ +/* No comment provided by engineer. */ +"CLAdjustmentTool_DefaultTitle" = "ajustement"; + +/* No comment provided by engineer. */ +"CLBloomEffect_DefaultTitle" = "Bloom"; + +/* No comment provided by engineer. */ +"CLBlurEffect_DefaultTitle" = "Blur & Focus"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemBand" = "Band"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemCircle" = "Circle"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemNormal" = "Normal"; + +/* No comment provided by engineer. */ +"CLClippingTool_DefaultTitle" = "Rogner"; + +/* No comment provided by engineer. */ +"CLClippingTool_ItemMenuCustom" = "Custom"; + +/* No comment provided by engineer. */ +"CLDefaultChromeFilter_DefaultTitle" = "Chrome"; + +/* No comment provided by engineer. */ +"CLDefaultCurveFilter_DefaultTitle" = "Curve"; + +/* No comment provided by engineer. */ +"CLDefaultEmptyFilter_DefaultTitle" = "Aucun"; + +/* No comment provided by engineer. */ +"CLDefaultFadeFilter_DefaultTitle" = "Fade"; + +/* No comment provided by engineer. */ +"CLDefaultInstantFilter_DefaultTitle" = "Instantané"; + +/* No comment provided by engineer. */ +"CLDefaultInvertFilter_DefaultTitle" = "Inverser"; + +/* No comment provided by engineer. */ +"CLDefaultLinearFilter_DefaultTitle" = "Linéaire"; + +/* No comment provided by engineer. */ +"CLDefaultMonoFilter_DefaultTitle" = "Mono"; + +/* No comment provided by engineer. */ +"CLDefaultNoirFilter_DefaultTitle" = "Noir"; + +/* No comment provided by engineer. */ +"CLDefaultProcessFilter_DefaultTitle" = "Processus"; + +/* No comment provided by engineer. */ +"CLDefaultSepiaFilter_DefaultTitle" = "Sépia"; + +/* No comment provided by engineer. */ +"CLDefaultTonalFilter_DefaultTitle" = "Tonal"; + +/* No comment provided by engineer. */ +"CLDefaultTransferFilter_DefaultTitle" = "Transfer"; + +/* No comment provided by engineer. */ +"CLDefaultVignetteFilter_DefaultTitle" = "Vignette"; + +/* No comment provided by engineer. */ +"CLDrawTool_DefaultTitle" = "Draw"; + +/* No comment provided by engineer. */ +"CLEffectBase_DefaultTitle" = "Aucun"; + +/* No comment provided by engineer. */ +"CLEffectTool_DefaultTitle" = "Effet"; + +/* No comment provided by engineer. */ +"CLFilterTool_DefaultTitle" = "Filtre"; + +/* No comment provided by engineer. */ +"CLGloomEffect_DefaultTitle" = "tristesse"; + +/* No comment provided by engineer. */ +"CLHighlightSadowEffect_DefaultTitle" = "Highlight"; + +/* No comment provided by engineer. */ +"CLHueEffect_DefaultTitle" = "Hue"; + +/* No comment provided by engineer. */ +"CLImageEditor_BackBtnTitle" = "Retour"; + +/* No comment provided by engineer. */ +"CLImageEditor_DefaultTitle" = "Modifier"; + +/* No comment provided by engineer. */ +"CLImageEditor_OKBtnTitle" = "OK"; + +/* No comment provided by engineer. */ +"CLPixellateEffect_DefaultTitle" = "Pixellisation"; + +/* No comment provided by engineer. */ +"CLPosterizeEffect_DefaultTitle" = "Postérisation"; + +/* No comment provided by engineer. */ +"CLResizeTool_DefaultTitle" = "Redimensionner"; + +/* No comment provided by engineer. */ +"CLResizeTool_InfoPanelTextNewSize" = "Nouvelle taille de l'image :"; + +/* No comment provided by engineer. */ +"CLResizeTool_InfoPanelTextOriginalSize" = "Taille de l'image d'origine :"; + +/* No comment provided by engineer. */ +"CLRotateTool_DefaultTitle" = "Rotation"; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemFlipTitle1" = " "; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemFlipTitle2" = " "; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemRotateTitle" = " "; + +/* No comment provided by engineer. */ +"CLSplashTool_DefaultTitle" = "Splash"; + +/* No comment provided by engineer. */ +"CLSpotEffect_DefaultTitle" = "Spot"; + +/* No comment provided by engineer. */ +"CLStickerTool_DefaultTitle" = "Sticker"; + +/* No comment provided by engineer. */ +"CLEmoticonTool_DefaultTitle" = "émoticônes"; + +/* No comment provided by engineer. */ +"CLTextTool_DefaultTitle" = "Texte"; + +/* No comment provided by engineer. */ +"CLTextTool_EmptyText" = "Texte"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignCenter" = " "; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignLeft" = " "; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignRight" = " "; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemColor" = "Couleur"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemFont" = "Police"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemNew" = "Nouveau"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemText" = "Texte"; + +/* No comment provided by engineer. */ +"CLToneCurveTool_DefaultTitle" = "ToneCurve"; + + +/* French Translation By : @iMokhles . */ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ja.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ja.lproj/Localizable.strings new file mode 100644 index 0000000..603d5d0 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ja.lproj/Localizable.strings differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ru.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ru.lproj/Localizable.strings new file mode 100644 index 0000000..90bc735 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/ru.lproj/Localizable.strings @@ -0,0 +1,167 @@ +/* No comment provided by engineer. */ +"CLFilterTool_DefaultTitle" = "Фильтры"; + +/* No comment provided by engineer. */ +"CLDefaultEmptyFilter_DefaultTitle" = "Оригинал"; + +/* No comment provided by engineer. */ +"CLDefaultLinearFilter_DefaultTitle" = "Linear"; + +/* No comment provided by engineer. */ +"CLDefaultVignetteFilter_DefaultTitle" = "Vignette"; + +/* No comment provided by engineer. */ +"CLDefaultInstantFilter_DefaultTitle" = "Instant"; + +/* No comment provided by engineer. */ +"CLDefaultProcessFilter_DefaultTitle" = "Process"; + +/* No comment provided by engineer. */ +"CLDefaultTransferFilter_DefaultTitle" = "Transfer"; + +/* No comment provided by engineer. */ +"CLDefaultSepiaFilter_DefaultTitle" = "Sepia"; + +/* No comment provided by engineer. */ +"CLDefaultFadeFilter_DefaultTitle" = "Fade"; + +/* No comment provided by engineer. */ +"CLDefaultCurveFilter_DefaultTitle" = "Curve"; + +/* No comment provided by engineer. */ +"CLDefaultTonalFilter_DefaultTitle" = "Tonal"; + +/* No comment provided by engineer. */ +"CLDefaultNoirFilter_DefaultTitle" = "Noir"; + +/* No comment provided by engineer. */ +"CLDefaultMonoFilter_DefaultTitle" = "Mono"; + +/* No comment provided by engineer. */ +"CLDefaultInvertFilter_DefaultTitle" = "Invert"; + +/* No comment provided by engineer. */ +"CLDrawTool_DefaultTitle" = "Draw"; + +/* No comment provided by engineer. */ +"CLAdjustmentTool_DefaultTitle" = "Регулировка"; + +/* No comment provided by engineer. */ +"CLEffectTool_DefaultTitle" = "Эффекты"; + +/* No comment provided by engineer. */ +"CLEffectBase_DefaultTitle" = "Оригинал"; + +/* No comment provided by engineer. */ +"CLSpotEffect_DefaultTitle" = "Пятно"; + +/* No comment provided by engineer. */ +"CLHueEffect_DefaultTitle" = "Тонер"; + +/* No comment provided by engineer. */ +"CLHighlightSadowEffect_DefaultTitle" = "Тени"; + +/* No comment provided by engineer. */ +"CLBloomEffect_DefaultTitle" = "Выцвет"; + +/* No comment provided by engineer. */ +"CLGloomEffect_DefaultTitle" = "Мрак"; + +/* No comment provided by engineer. */ +"CLPosterizeEffect_DefaultTitle" = "Постер"; + +/* No comment provided by engineer. */ +"CLPixellateEffect_DefaultTitle" = "Пиксели"; + +/* No comment provided by engineer. */ +"CLBlurEffect_DefaultTitle" = "Размытие"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemNormal" = "Полностью"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemCircle" = "Фокус"; + +/* No comment provided by engineer. */ +"CLBlurEffect_MenuItemBand" = "Полоса"; + +/* No comment provided by engineer. */ +"CLRotateTool_DefaultTitle" = "Повернуть"; + +/* No comment provided by engineer. */ +"CLClippingTool_DefaultTitle" = "Обрезать"; + +/* No comment provided by engineer. */ +"CLClippingTool_ItemMenuCustom" = "Вручную"; + +/* No comment provided by engineer. */ +"CLResizeTool_DefaultTitle" = "Размер"; + +/* No comment provided by engineer. */ +"CLResizeTool_InfoPanelTextNewSize" = "Новый размер:"; + +/* No comment provided by engineer. */ +"CLResizeTool_InfoPanelTextOriginalSize" = "Оригинальный размер:"; + +/* No comment provided by engineer. */ +"CLToneCurveTool_DefaultTitle" = "Кривые"; + +/* No comment provided by engineer. */ +"CLStickerTool_DefaultTitle" = "Стикеры"; + +/* No comment provided by engineer. */ +"CLEmoticonTool_DefaultTitle" = "Смайлики"; + +/* No comment provided by engineer. */ +"CLDefaultChromeFilter_DefaultTitle" = "Хром"; + +/* No comment provided by engineer. */ +"CLImageEditor_BackBtnTitle" = "Назад"; + +/* No comment provided by engineer. */ +"CLImageEditor_DefaultTitle" = "Изменить"; + +/* No comment provided by engineer. */ +"CLImageEditor_OKBtnTitle" = "ОК"; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemFlipTitle1" = "Зеркально"; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemFlipTitle2" = "Вертикально"; + +/* No comment provided by engineer. */ +"CLRotateTool_MenuItemRotateTitle" = "По часовой"; + +/* No comment provided by engineer. */ +"CLTextTool_DefaultTitle" = "Текст"; + +/* No comment provided by engineer. */ +"CLTextTool_EmptyText" = "Текст"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemText" = "Текст"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignLeft" = "Слева"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignCenter" = "По центру"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemAlignRight" = "Справа"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemColor" = "Цвет"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemFont" = "Шрифт"; + +/* No comment provided by engineer. */ +"CLTextTool_MenuItemNew" = "Новый"; + + + + + +/* Переведено специально для зрителей и читалей JailbreakVideo */ \ No newline at end of file diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hans.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hans.lproj/Localizable.strings new file mode 100644 index 0000000..c168c72 Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hans.lproj/Localizable.strings differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hant.lproj/Localizable.strings b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hant.lproj/Localizable.strings new file mode 100644 index 0000000..63196dc Binary files /dev/null and b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.bundle/Resources/zh-Hant.lproj/Localizable.strings differ diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.h b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.h new file mode 100644 index 0000000..1538b05 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.h @@ -0,0 +1,51 @@ +// +// CLImageEditor.h +// +// Created by sho yakushiji on 2013/10/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "CLImageToolInfo.h" +#import "CLImageEditorTheme.h" + +@protocol CLImageEditorDelegate; +@protocol CLImageEditorTransitionDelegate; + +@interface CLImageEditor : UIViewController +{ + +} +@property (nonatomic, weak) id delegate; +@property (nonatomic, readonly) CLImageEditorTheme *theme; +@property (nonatomic, readonly) CLImageToolInfo *toolInfo; + +- (id)initWithImage:(UIImage*)image; +- (id)initWithImage:(UIImage*)image delegate:(id)delegate; +- (id)initWithDelegate:(id)delegate; + +- (void)showInViewController:(UIViewController*)controller withImageView:(UIImageView*)imageView; + +- (void)refreshToolSettings; + +@end + + + +@protocol CLImageEditorDelegate +@optional +- (void)imageEditor:(CLImageEditor*)editor didFinishEdittingWithImage:(UIImage*)image __attribute__ ((deprecated)); +- (void)imageEditor:(CLImageEditor*)editor didFinishEditingWithImage:(UIImage*)image; +- (void)imageEditorDidCancel:(CLImageEditor*)editor; + +@end + + +@protocol CLImageEditorTransitionDelegate +@optional +- (void)imageEditor:(CLImageEditor*)editor willDismissWithImageView:(UIImageView*)imageView canceled:(BOOL)canceled; +- (void)imageEditor:(CLImageEditor*)editor didDismissWithImageView:(UIImageView*)imageView canceled:(BOOL)canceled; + +@end + diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.m b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.m new file mode 100644 index 0000000..0fcbdc2 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditor.m @@ -0,0 +1,55 @@ +// +// CLImageEditor.m +// +// Created by sho yakushiji on 2013/10/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageEditor.h" + +#import "_CLImageEditorViewController.h" + +@interface CLImageEditor () + +@end + + +@implementation CLImageEditor + +- (id)init +{ + return [_CLImageEditorViewController new]; +} + +- (id)initWithImage:(UIImage*)image +{ + return [self initWithImage:image delegate:nil]; +} + +- (id)initWithImage:(UIImage*)image delegate:(id)delegate +{ + return [[_CLImageEditorViewController alloc] initWithImage:image delegate:delegate]; +} + +- (id)initWithDelegate:(id)delegate +{ + return [[_CLImageEditorViewController alloc] initWithDelegate:delegate]; +} + +- (void)showInViewController:(UIViewController*)controller withImageView:(UIImageView*)imageView; +{ + +} + +- (void)refreshToolSettings +{ + +} + +- (CLImageEditorTheme*)theme +{ + return [CLImageEditorTheme theme]; +} + +@end + diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.h b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.h new file mode 100644 index 0000000..1d42f9a --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.h @@ -0,0 +1,34 @@ +// +// CLImageEditorTheme.h +// +// Created by sho yakushiji on 2013/12/05. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import +#import +@protocol CLImageEditorThemeDelegate; + +@interface CLImageEditorTheme : NSObject + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) NSString *bundleName; +@property (nonatomic, strong) UIColor *backgroundColor; +@property (nonatomic, strong) UIColor *toolbarColor; +@property (nonatomic, strong) NSString *toolIconColor; +@property (nonatomic, strong) UIColor *toolbarTextColor; +@property (nonatomic, strong) UIColor *toolbarSelectedButtonColor; +@property (nonatomic, strong) UIFont *toolbarTextFont; +@property (nonatomic, assign) BOOL statusBarHidden; +@property (nonatomic, assign) UIStatusBarStyle statusBarStyle; + ++ (CLImageEditorTheme*)theme; + +@end + + +@protocol CLImageEditorThemeDelegate +@optional +- (UIActivityIndicatorView*)imageEditorThemeActivityIndicatorView; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.m b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.m new file mode 100644 index 0000000..37d889d --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageEditorTheme.m @@ -0,0 +1,58 @@ +// +// CLImageEditorTheme.m +// +// Created by sho yakushiji on 2013/12/05. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageEditorTheme.h" + +@implementation CLImageEditorTheme + +#pragma mark - singleton pattern + +static CLImageEditorTheme *_sharedInstance = nil; + ++ (CLImageEditorTheme*)theme +{ + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + _sharedInstance = [[CLImageEditorTheme alloc] init]; + }); + return _sharedInstance; +} + ++ (id)allocWithZone:(NSZone *)zone +{ + @synchronized(self) { + if (_sharedInstance == nil) { + _sharedInstance = [super allocWithZone:zone]; + return _sharedInstance; + } + } + return nil; +} + +- (id)copyWithZone:(NSZone *)zone +{ + return self; +} + +- (id)init +{ + self = [super init]; + if (self) { + self.bundleName = @"CLImageEditor"; + self.backgroundColor = [UIColor whiteColor]; + self.toolbarColor = [UIColor colorWithWhite:1 alpha:0.8]; + self.toolIconColor = @"black"; + self.toolbarTextColor = [UIColor blackColor]; + self.toolbarSelectedButtonColor = [[UIColor cyanColor] colorWithAlphaComponent:0.2]; + self.toolbarTextFont = [UIFont systemFontOfSize:10]; + self.statusBarHidden = NO; + self.statusBarStyle = UIStatusBarStyleDefault; + } + return self; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.h b/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.h new file mode 100644 index 0000000..741a96c --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.h @@ -0,0 +1,27 @@ +// +// CLImageToolInfo.h +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import +#import +@interface CLImageToolInfo : NSObject + +@property (nonatomic, readonly) NSString *toolName; +@property (nonatomic, strong) NSString *title; +@property (nonatomic, assign) BOOL available; +@property (nonatomic, assign) CGFloat dockedNumber; +@property (nonatomic, strong) NSString *iconImagePath; +@property (nonatomic, readonly) UIImage *iconImage; +@property (nonatomic, readonly) NSArray *subtools; +@property (nonatomic, strong) NSMutableDictionary *optionalInfo; + + +- (NSString*)toolTreeDescription; +- (NSArray*)sortedSubtools; + +- (CLImageToolInfo*)subToolInfoWithToolName:(NSString*)toolName recursive:(BOOL)recursive; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.m b/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.m new file mode 100644 index 0000000..9d846ab --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/CLImageToolInfo.m @@ -0,0 +1,113 @@ +// +// CLImageToolInfo.m +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolInfo.h" +#import "UIImage+Utility.h" + +@interface CLImageToolInfo() +@property (nonatomic, strong) NSString *toolName; +@property (nonatomic, strong) NSArray *subtools; +@end + +@implementation CLImageToolInfo + +- (void)setObject:(id)object forKey:(NSString *)key inDictionary:(NSMutableDictionary*)dictionary +{ + if(object){ + dictionary[key] = object; + } +} + +- (NSDictionary*)descriptionDictionary +{ + NSMutableArray *array = [NSMutableArray array]; + for(CLImageToolInfo *sub in self.sortedSubtools){ + [array addObject:sub.descriptionDictionary]; + } + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [self setObject:self.toolName forKey:@"toolName" inDictionary:dict]; + [self setObject:self.title forKey:@"title" inDictionary:dict]; + [self setObject:((self.available)?@"YES":@"NO") forKey:@"available" inDictionary:dict]; + [self setObject:@(self.dockedNumber) forKey:@"dockedNumber" inDictionary:dict]; + [self setObject:self.iconImagePath forKey:@"iconImagePath" inDictionary:dict]; + [self setObject:array forKey:@"subtools" inDictionary:dict]; + if(self.optionalInfo){ + [self setObject:self.optionalInfo forKey:@"optionalInfo" inDictionary:dict]; + } + + return dict; +} + +- (NSString*)description +{ + return [NSString stringWithFormat:@"%@", self.descriptionDictionary]; +} + +- (NSString*)toolTreeDescriptionWithSpace:(NSString*)space +{ + NSString *str = [NSString stringWithFormat:@"%@%@\n", space, self.toolName]; + + space = [NSString stringWithFormat:@" %@", space]; + for(CLImageToolInfo *sub in self.sortedSubtools){ + str = [str stringByAppendingFormat:@"%@", [sub toolTreeDescriptionWithSpace:space]]; + } + return str; +} + +- (NSString*)toolTreeDescription +{ + return [NSString stringWithFormat:@"\n%@", [self toolTreeDescriptionWithSpace:@""]]; +} + +- (UIImage*)iconImage +{ + return [UIImage fastImageWithContentsOfFile:self.iconImagePath]; +} + +- (NSString*)toolName +{ + if([_toolName isEqualToString:@"_CLImageEditorViewController"]){ + return @"CLImageEditor"; + } + return _toolName; +} + +- (NSArray*)sortedSubtools +{ + self.subtools = [self.subtools sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { + CGFloat dockedNum1 = [obj1 dockedNumber]; + CGFloat dockedNum2 = [obj2 dockedNumber]; + + if(dockedNum1 < dockedNum2){ return NSOrderedAscending; } + else if(dockedNum1 > dockedNum2){ return NSOrderedDescending; } + return NSOrderedSame; + }]; + return self.subtools; +} + +- (CLImageToolInfo*)subToolInfoWithToolName:(NSString*)toolName recursive:(BOOL)recursive +{ + CLImageToolInfo *result = nil; + + for(CLImageToolInfo *sub in self.subtools){ + if([sub.toolName isEqualToString:toolName]){ + result = sub; + break; + } + if(recursive){ + result = [sub subToolInfoWithToolName:toolName recursive:recursive]; + if(result){ + break; + } + } + } + + return result; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h new file mode 100644 index 0000000..1914e72 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h @@ -0,0 +1,12 @@ +// +// CLAdjustmentTool.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLAdjustmentTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.m new file mode 100644 index 0000000..7568bfe --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.m @@ -0,0 +1,183 @@ +// +// CLAdjustmentTool.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLAdjustmentTool.h" + +static NSString* const kCLAdjustmentToolSaturationIconName = @"saturationIconAssetsName"; +static NSString* const kCLAdjustmentToolBrightnessIconName = @"brightnessIconAssetsName"; +static NSString* const kCLAdjustmentToolContrastIconName = @"contrastIconAssetsName"; + + +@implementation CLAdjustmentTool +{ + UIImage *_originalImage; + UIImage *_thumbnailImage; + + UISlider *_saturationSlider; + UISlider *_brightnessSlider; + UISlider *_contrastSlider; + UIActivityIndicatorView *_indicatorView; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLAdjustmentTool_DefaultTitle" withDefault:@"Adjustment"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + _thumbnailImage = [_originalImage resize:self.editor.imageView.frame.size]; + + [self.editor fixZoomScaleWithAnimated:YES]; + + [self setupSlider]; +} + +- (void)cleanup +{ + [_indicatorView removeFromSuperview]; + [_saturationSlider.superview removeFromSuperview]; + [_brightnessSlider.superview removeFromSuperview]; + [_contrastSlider.superview removeFromSuperview]; + + [self.editor resetZoomScaleWithAnimated:YES]; +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self->_indicatorView = [CLImageEditorTheme indicatorView]; + self->_indicatorView.center = self.editor.view.center; + [self.editor.view addSubview:self->_indicatorView]; + [self->_indicatorView startAnimating]; + }); + + CGFloat saturation = _saturationSlider.value; + CGFloat brightness = _brightnessSlider.value; + CGFloat contrast = _contrastSlider.value; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self filteredImage:self->_originalImage saturation:saturation brightness:brightness contrast:contrast]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLAdjustmentToolSaturationIconName : @"", + kCLAdjustmentToolBrightnessIconName : @"", + kCLAdjustmentToolContrastIconName : @"" + }; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max action:(SEL)action +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 240, 35)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 260, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = YES; + [slider addTarget:self action:action forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [self.editor.view addSubview:container]; + + return slider; +} + +- (void)setIconForSlider:(UISlider*)slider withKey:(NSString*)key defaultIconName:(NSString*)defaultIconName +{ + UIImage *icon = [self imageForKey:key defaultImageName:defaultIconName]; + [slider setThumbImage:icon forState:UIControlStateNormal]; + [slider setThumbImage:icon forState:UIControlStateHighlighted]; +} + +- (void)setupSlider +{ + _saturationSlider = [self sliderWithValue:1 minimumValue:0 maximumValue:2 action:@selector(sliderDidChange:)]; + _saturationSlider.superview.center = CGPointMake(self.editor.view.width/2, self.editor.menuView.top-30); + [self setIconForSlider:_saturationSlider withKey:kCLAdjustmentToolSaturationIconName defaultIconName:@"saturation.png"]; + + _brightnessSlider = [self sliderWithValue:0 minimumValue:-1 maximumValue:1 action:@selector(sliderDidChange:)]; + _brightnessSlider.superview.center = CGPointMake(20, _saturationSlider.superview.top - 150); + _brightnessSlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); + [self setIconForSlider:_brightnessSlider withKey:kCLAdjustmentToolBrightnessIconName defaultIconName:@"brightness.png"]; + + _contrastSlider = [self sliderWithValue:1 minimumValue:0.5 maximumValue:1.5 action:@selector(sliderDidChange:)]; + _contrastSlider.superview.center = CGPointMake(self.editor.view.width-20, _brightnessSlider.superview.center.y); + _contrastSlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); + [self setIconForSlider:_contrastSlider withKey:kCLAdjustmentToolContrastIconName defaultIconName:@"contrast.png"]; +} + +- (void)sliderDidChange:(UISlider*)sender +{ + static BOOL inProgress = NO; + + if(inProgress){ return; } + inProgress = YES; + + CGFloat saturation = _saturationSlider.value; + CGFloat brightness = _brightnessSlider.value; + CGFloat contrast = _contrastSlider.value; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self filteredImage:self->_thumbnailImage saturation:saturation brightness:brightness contrast:contrast]; + [self.editor.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; + inProgress = NO; + }); +} + +- (UIImage*)filteredImage:(UIImage*)image saturation:(CGFloat)saturation brightness:(CGFloat)brightness contrast:(CGFloat)contrast +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIColorControls" keysAndValues:kCIInputImageKey, ciImage, nil]; + + [filter setDefaults]; + [filter setValue:[NSNumber numberWithFloat:saturation] forKey:@"inputSaturation"]; + + filter = [CIFilter filterWithName:@"CIExposureAdjust" keysAndValues:kCIInputImageKey, [filter outputImage], nil]; + [filter setDefaults]; + brightness = 2*brightness; + [filter setValue:[NSNumber numberWithFloat:brightness] forKey:@"inputEV"]; + + filter = [CIFilter filterWithName:@"CIGammaAdjust" keysAndValues:kCIInputImageKey, [filter outputImage], nil]; + [filter setDefaults]; + contrast = contrast * contrast; + [filter setValue:[NSNumber numberWithFloat:contrast] forKey:@"inputPower"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h new file mode 100644 index 0000000..85398a6 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h @@ -0,0 +1,12 @@ +// +// CLBlurTool.h +// +// Created by sho yakushiji on 2013/10/19. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLBlurTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.m new file mode 100644 index 0000000..545ef1c --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.m @@ -0,0 +1,675 @@ +// +// CLBlurTool.m +// +// Created by sho yakushiji on 2013/10/19. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLBlurTool.h" + +static NSString* const kCLBlurToolNormalIconName = @"normalIconAssetsName"; +static NSString* const kCLBlurToolCircleIconName = @"circleIconAssetsName"; +static NSString* const kCLBlurToolBandIconName = @"bandIconAssetsName"; + +typedef NS_ENUM(NSUInteger, CLBlurType) +{ + kCLBlurTypeNormal = 0, + kCLBlurTypeCircle, + kCLBlurTypeBand, +}; + + +@interface CLBlurCircle : UIView +@property (nonatomic, strong) UIColor *color; +@end + +@interface CLBlurBand : UIView +@property (nonatomic, strong) UIColor *color; +@property (nonatomic, assign) CGFloat rotation; +@property (nonatomic, assign) CGFloat scale; +@property (nonatomic, assign) CGFloat offset; +@end + + + +@interface CLBlurTool() + +@property (nonatomic, strong) UIView *selectedMenu; +@end + +@implementation CLBlurTool +{ + UIImage *_originalImage; + UIImage *_thumbnailImage; + UIImage *_blurImage; + + UISlider *_blurSlider; + UIScrollView *_menuScroll; + + UIView *_handlerView; + + CLBlurCircle *_circleView; + CLBlurBand *_bandView; + CGRect _bandImageRect; + + CLBlurType _blurType; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLBlurEffect_DefaultTitle" withDefault:@"Blur & Focus"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLBlurToolNormalIconName : @"", + kCLBlurToolCircleIconName : @"", + kCLBlurToolBandIconName : @"" + }; +} + +#pragma mark- + +- (void)setup +{ + _blurType = kCLBlurTypeNormal; + _originalImage = self.editor.imageView.image; + _thumbnailImage = [_originalImage resize:self.editor.imageView.frame.size]; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _blurSlider = [self sliderWithValue:0.2 minimumValue:0 maximumValue:1]; + _blurSlider.superview.center = CGPointMake(self.editor.view.width/2, self.editor.menuView.top-30); + + _handlerView = [[UIView alloc] initWithFrame:self.editor.imageView.frame]; + [self.editor.imageView.superview addSubview:_handlerView]; + [self setHandlerView]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + [self setBlurMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; + + [self setDefaultParams]; + [self sliderDidChange:nil]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + [_blurSlider.superview removeFromSuperview]; + [_handlerView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + UIActivityIndicatorView *indicator = [CLImageEditorTheme indicatorView]; + indicator.center = CGPointMake(self->_handlerView.width/2, self->_handlerView.height/2); + [self->_handlerView addSubview:indicator]; + [indicator startAnimating]; + }); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *blurImage = [self->_originalImage gaussBlur:[self getBlurValue]]; + UIImage *image = [self buildResultImage:self->_originalImage withBlurImage:blurImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +- (CGFloat)getBlurValue +{ + __block CGFloat value = 0; + + safe_dispatch_sync_main(^{ + value = self->_blurSlider.value; + }); + return value; +} + +#pragma mark- + +- (void)setBlurMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSArray *_menu = @[ + @{@"title":[CLImageEditorTheme localizedString:@"CLBlurEffect_MenuItemNormal" withDefault:@"Normal"], @"icon":[self imageForKey:kCLBlurToolNormalIconName defaultImageName:@"btn_normal.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLBlurEffect_MenuItemCircle" withDefault:@"Circle"], @"icon":[self imageForKey:kCLBlurToolCircleIconName defaultImageName:@"btn_circle.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLBlurEffect_MenuItemBand" withDefault:@"Band"], @"icon":[self imageForKey:kCLBlurToolBandIconName defaultImageName:@"btn_band.png"]}, + ]; + + NSInteger tag = 0; + for(NSDictionary *obj in _menu){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedBlurMenu:) toolInfo:nil]; + view.tag = tag++; + view.title = obj[@"title"]; + view.iconImage = obj[@"icon"]; + + if(self.selectedMenu==nil){ + self.selectedMenu = view; + } + + [_menuScroll addSubview:view]; + x += W; + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)setSelectedMenu:(UIView *)selectedMenu +{ + if(selectedMenu != _selectedMenu){ + _selectedMenu.backgroundColor = [UIColor clearColor]; + _selectedMenu = selectedMenu; + _selectedMenu.backgroundColor = [CLImageEditorTheme toolbarSelectedButtonColor]; + } +} + +- (void)setHandlerView +{ + UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapHandlerView:)]; + UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panHandlerView:)]; + UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchHandlerView:)]; + UIRotationGestureRecognizer *rot = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateHandlerView:)]; + + panGesture.maximumNumberOfTouches = 1; + + tapGesture.delegate = self; + //panGesture.delegate = self; + pinch.delegate = self; + rot.delegate = self; + + [_handlerView addGestureRecognizer:tapGesture]; + [_handlerView addGestureRecognizer:panGesture]; + [_handlerView addGestureRecognizer:pinch]; + [_handlerView addGestureRecognizer:rot]; +} + +- (void)setDefaultParams +{ + CGFloat W = 1.5*MIN(_handlerView.width, _handlerView.height); + + _circleView = [[CLBlurCircle alloc] initWithFrame:CGRectMake(_handlerView.width/2-W/2, _handlerView.height/2-W/2, W, W)]; + _circleView.backgroundColor = [UIColor clearColor]; + _circleView.color = [UIColor whiteColor]; + + CGFloat H = _handlerView.height; + CGFloat R = sqrt((_handlerView.width*_handlerView.width) + (_handlerView.height*_handlerView.height)); + + _bandView = [[CLBlurBand alloc] initWithFrame:CGRectMake(0, 0, R, H)]; + _bandView.center = CGPointMake(_handlerView.width/2, _handlerView.height/2); + _bandView.backgroundColor = [UIColor clearColor]; + _bandView.color = [UIColor whiteColor]; + + CGFloat ratio = _originalImage.size.width / self.editor.imageView.width; + _bandImageRect = _bandView.frame; + _bandImageRect.size.width *= ratio; + _bandImageRect.size.height *= ratio; + _bandImageRect.origin.x *= ratio; + _bandImageRect.origin.y *= ratio; + +} + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = NO; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [self.editor.view addSubview:container]; + + return slider; +} + +- (void)sliderDidChange:(UISlider*)slider +{ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + self->_blurImage = [self->_thumbnailImage gaussBlur:[self getBlurValue]]; + [self buildThumbnailImage]; + }); +} + +- (void)buildThumbnailImage +{ + static BOOL inProgress = NO; + + if(inProgress){ return; } + + inProgress = YES; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildResultImage:self->_thumbnailImage withBlurImage:self->_blurImage]; + + [self.editor.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; + inProgress = NO; + }); +} + +- (UIImage*)buildResultImage:(UIImage*)image withBlurImage:(UIImage*)blurImage +{ + UIImage *result = blurImage; + + switch (_blurType) { + case kCLBlurTypeCircle: + result = [self circleBlurImage:image withBlurImage:blurImage]; + break; + case kCLBlurTypeBand: + result = [self bandBlurImage:image withBlurImage:blurImage]; + break; + default: + break; + } + return result; +} + +- (UIImage*)blurImage:(UIImage*)image withBlurImage:(UIImage*)blurImage andMask:(UIImage*)maskImage +{ + UIImage *tmp = [image maskedImage:maskImage]; + + UIGraphicsBeginImageContext(blurImage.size); + { + [blurImage drawAtPoint:CGPointZero]; + [tmp drawInRect:CGRectMake(0, 0, blurImage.size.width, blurImage.size.height)]; + tmp = UIGraphicsGetImageFromCurrentImageContext(); + } + UIGraphicsEndImageContext(); + + return tmp; +} + +- (UIImage*)circleBlurImage:(UIImage*)image withBlurImage:(UIImage*)blurImage +{ + __block CGFloat ratio = 1; + __block CGRect frame = CGRectZero; + + safe_dispatch_sync_main(^{ + ratio = image.size.width / self.editor.imageView.width; + frame = self->_circleView.frame; + }); + + frame.size.width *= ratio; + frame.size.height *= ratio; + frame.origin.x *= ratio; + frame.origin.y *= ratio; + + UIImage *mask = [CLImageEditorTheme imageNamed:[self class] image:@"circle.png"]; + UIGraphicsBeginImageContext(image.size); + { + CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext() , [[UIColor whiteColor] CGColor]); + CGContextFillRect(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, image.size.width, image.size.height)); + [mask drawInRect:frame]; + mask = UIGraphicsGetImageFromCurrentImageContext(); + } + UIGraphicsEndImageContext(); + + return [self blurImage:image withBlurImage:blurImage andMask:mask]; +} + +- (UIImage*)bandBlurImage:(UIImage*)image withBlurImage:(UIImage*)blurImage +{ + __block CGFloat offset = 0; + + safe_dispatch_sync_main(^{ + offset = self->_bandView.offset*image.size.width/self->_handlerView.width; + }); + + UIImage *mask = [CLImageEditorTheme imageNamed:[self class] image:@"band.png"]; + + UIGraphicsBeginImageContext(image.size); + { + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(context, [[UIColor whiteColor] CGColor]); + CGContextFillRect(context, CGRectMake(0, 0, image.size.width, image.size.height)); + + CGContextSaveGState(context); + CGFloat ratio = image.size.width / _originalImage.size.width; + CGFloat Tx = (_bandImageRect.size.width/2 + _bandImageRect.origin.x)*ratio; + CGFloat Ty = (_bandImageRect.size.height/2 + _bandImageRect.origin.y)*ratio; + + CGContextTranslateCTM(context, Tx, Ty); + CGContextRotateCTM(context, _bandView.rotation); + CGContextTranslateCTM(context, 0, offset); + CGContextScaleCTM(context, 1, _bandView.scale); + CGContextTranslateCTM(context, -Tx, -Ty); + + CGRect rct = _bandImageRect; + rct.size.width *= ratio; + rct.size.height *= ratio; + rct.origin.x *= ratio; + rct.origin.y *= ratio; + + [mask drawInRect:rct]; + + CGContextRestoreGState(context); + + mask = UIGraphicsGetImageFromCurrentImageContext(); + } + UIGraphicsEndImageContext(); + + return [self blurImage:image withBlurImage:blurImage andMask:mask]; +} + +#pragma mark- Gesture handler + +- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer +{ + return YES; +} + +- (void)tappedBlurMenu:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + self.selectedMenu = view; + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; + + if(view.tag != _blurType){ + _blurType = view.tag; + + [_circleView removeFromSuperview]; + [_bandView removeFromSuperview]; + + switch (_blurType) { + case kCLBlurTypeNormal: + break; + case kCLBlurTypeCircle: + [_handlerView addSubview:_circleView]; + [_circleView setNeedsDisplay]; + break; + case kCLBlurTypeBand: + [_handlerView addSubview:_bandView]; + [_bandView setNeedsDisplay]; + break; + default: + break; + } + [self buildThumbnailImage]; + } +} + +- (void)tapHandlerView:(UITapGestureRecognizer*)sender +{ + switch (_blurType) { + case kCLBlurTypeCircle: + { + CGPoint point = [sender locationInView:_handlerView]; + _circleView.center = point; + [self buildThumbnailImage]; + break; + } + case kCLBlurTypeBand: + { + CGPoint point = [sender locationInView:_handlerView]; + point = CGPointMake(point.x-_handlerView.width/2, point.y-_handlerView.height/2); + point = CGPointMake(point.x*cos(-_bandView.rotation)-point.y*sin(-_bandView.rotation), point.x*sin(-_bandView.rotation)+point.y*cos(-_bandView.rotation)); + _bandView.offset = point.y; + [self buildThumbnailImage]; + break; + } + default: + break; + } +} + +- (void)panHandlerView:(UIPanGestureRecognizer*)sender +{ + switch (_blurType) { + case kCLBlurTypeCircle: + { + CGPoint point = [sender locationInView:_handlerView]; + _circleView.center = point; + [self buildThumbnailImage]; + break; + } + case kCLBlurTypeBand: + { + CGPoint point = [sender locationInView:_handlerView]; + point = CGPointMake(point.x-_handlerView.width/2, point.y-_handlerView.height/2); + point = CGPointMake(point.x*cos(-_bandView.rotation)-point.y*sin(-_bandView.rotation), point.x*sin(-_bandView.rotation)+point.y*cos(-_bandView.rotation)); + _bandView.offset = point.y; + [self buildThumbnailImage]; + break; + } + default: + break; + } +} + +- (void)pinchHandlerView:(UIPinchGestureRecognizer*)sender +{ + switch (_blurType) { + case kCLBlurTypeCircle: + { + static CGRect initialFrame; + if (sender.state == UIGestureRecognizerStateBegan) { + initialFrame = _circleView.frame; + } + + CGFloat scale = sender.scale; + CGRect rct; + rct.size.width = MAX(MIN(initialFrame.size.width*scale, 3*MAX(_handlerView.width, _handlerView.height)), 0.3*MIN(_handlerView.width, _handlerView.height)); + rct.size.height = rct.size.width; + rct.origin.x = initialFrame.origin.x + (initialFrame.size.width-rct.size.width)/2; + rct.origin.y = initialFrame.origin.y + (initialFrame.size.height-rct.size.height)/2; + + _circleView.frame = rct; + [self buildThumbnailImage]; + break; + } + case kCLBlurTypeBand: + { + static CGFloat initialScale; + if (sender.state == UIGestureRecognizerStateBegan) { + initialScale = _bandView.scale; + } + + _bandView.scale = MIN(2, MAX(0.2, initialScale * sender.scale)); + [self buildThumbnailImage]; + break; + } + default: + break; + } +} + +- (void)rotateHandlerView:(UIRotationGestureRecognizer*)sender +{ + switch (_blurType) { + case kCLBlurTypeBand: + { + static CGFloat initialRotation; + if (sender.state == UIGestureRecognizerStateBegan) { + initialRotation = _bandView.rotation; + } + + _bandView.rotation = MIN(M_PI/2, MAX(-M_PI/2, initialRotation + sender.rotation)); + [self buildThumbnailImage]; + break; + } + default: + break; + } + +} + +@end + + +#pragma mark- UI components + +@implementation CLBlurCircle + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + [self setNeedsDisplay]; +} + +- (void)setCenter:(CGPoint)center +{ + [super setCenter:center]; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x = 0.35*rct.size.width; + rct.origin.y = 0.35*rct.size.height; + rct.size.width *= 0.3; + rct.size.height *= 0.3; + + CGContextSetStrokeColorWithColor(context, self.color.CGColor); + CGContextStrokeEllipseInRect(context, rct); + + self.alpha = 1; + [UIView animateWithDuration:kCLImageToolFadeoutDuration + delay:1 + options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction + animations:^{ + self.alpha = 0; + } + completion:^(BOOL finished) { + + } + ]; +} + +@end + + + + +@implementation CLBlurBand + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + _scale = 1; + _rotation = 0; + _offset = 0; + } + return self; +} + +- (void)setScale:(CGFloat)scale +{ + _scale = scale; + [self calcTransform]; +} + +- (void)setRotation:(CGFloat)rotation +{ + _rotation = rotation; + [self calcTransform]; +} + +- (void)setOffset:(CGFloat)offset +{ + _offset = offset; + [self calcTransform]; +} + +- (void)calcTransform +{ + CGAffineTransform transform = CGAffineTransformIdentity; + transform = CGAffineTransformTranslate(transform, -self.offset*sin(self.rotation), self.offset*cos(self.rotation)); + transform = CGAffineTransformRotate(transform, self.rotation); + transform = CGAffineTransformScale(transform, 1, self.scale); + self.transform = transform; +} + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + [self setNeedsDisplay]; +} + +- (void)setCenter:(CGPoint)center +{ + [super setCenter:center]; + [self setNeedsDisplay]; +} + +- (void)setTransform:(CGAffineTransform)transform +{ + [super setTransform:transform]; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.y = 0.3*rct.size.height; + rct.size.height *= 0.4; + + CGContextSetLineWidth(context, 1/self.scale); + CGContextSetStrokeColorWithColor(context, self.color.CGColor); + CGContextStrokeRect(context, rct); + + self.alpha = 1; + [UIView animateWithDuration:kCLImageToolFadeoutDuration + delay:1 + options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction + animations:^{ + self.alpha = 0; + } + completion:^(BOOL finished) { + + } + ]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h new file mode 100644 index 0000000..5bb73c1 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h @@ -0,0 +1,12 @@ +// +// CLClippingTool.h +// +// Created by sho yakushiji on 2013/10/18. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLClippingTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.m new file mode 100644 index 0000000..2b2e569 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.m @@ -0,0 +1,738 @@ +// +// CLClippingTool.m +// +// Created by sho yakushiji on 2013/10/18. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLClippingTool.h" + + +static NSString* const kCLClippingToolRatios = @"ratios"; +static NSString* const kCLClippingToolSwapButtonHidden = @"swapButtonHidden"; +static NSString* const kCLClippingToolRotateIconName = @"rotateIconAssetsName"; + +static NSString* const kCLClippingToolRatioValue1 = @"value1"; +static NSString* const kCLClippingToolRatioValue2 = @"value2"; +static NSString* const kCLClippingToolRatioTitleFormat = @"titleFormat"; + + +@interface CLRatio : NSObject +@property (nonatomic, assign) BOOL isLandscape; +@property (nonatomic, readonly) CGFloat ratio; +@property (nonatomic, strong) NSString *titleFormat; + +- (id)initWithValue1:(CGFloat)value1 value2:(CGFloat)value2; + +@end + + +@interface CLRatioMenuItem : CLToolbarMenuItem +@property (nonatomic, strong) CLRatio *ratio; +- (void)changeOrientation; +@end + + +@interface CLClippingPanel : UIView +@property (nonatomic, assign) CGRect clippingRect; +@property (nonatomic, strong) CLRatio *clippingRatio; +- (id)initWithSuperview:(UIView*)superview frame:(CGRect)frame; +- (void)setBgColor:(UIColor*)bgColor; +- (void)setGridColor:(UIColor*)gridColor; +- (void)clippingRatioDidChange; +@end + + +#pragma mark- CLClippintTool + +@interface CLClippingTool() +@property (nonatomic, strong) CLRatioMenuItem *selectedMenu; +@end + +@implementation CLClippingTool +{ + CLClippingPanel *_gridView; + + UIView *_menuContainer; + UIScrollView *_menuScroll; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLClippingTool_DefaultTitle" withDefault:@"Crop"]; +} + ++ (BOOL)isAvailable +{ + return YES; +} + +#pragma mark- optional info + ++ (NSArray*)defaultPresetRatios +{ + return @[ + @{kCLClippingToolRatioValue1:@0, kCLClippingToolRatioValue2:@0, kCLClippingToolRatioTitleFormat:[CLImageEditorTheme localizedString:@"CLClippingTool_ItemMenuCustom" withDefault:@"Custom"]}, + @{kCLClippingToolRatioValue1:@1, kCLClippingToolRatioValue2:@1, kCLClippingToolRatioTitleFormat:@"%g : %g"}, + @{kCLClippingToolRatioValue1:@4, kCLClippingToolRatioValue2:@3, kCLClippingToolRatioTitleFormat:@"%g : %g"}, + @{kCLClippingToolRatioValue1:@3, kCLClippingToolRatioValue2:@2, kCLClippingToolRatioTitleFormat:@"%g : %g"}, + @{kCLClippingToolRatioValue1:@16, kCLClippingToolRatioValue2:@9, kCLClippingToolRatioTitleFormat:@"%g : %g"}, + ]; +} + ++ (NSValue*)defaultSwapButtonHidden +{ + return @(NO); +} + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLClippingToolRatios:[self defaultPresetRatios], + kCLClippingToolSwapButtonHidden:[self defaultSwapButtonHidden], + kCLClippingToolRotateIconName:@"" + }; +} + +#pragma mark- implementation + +- (void)setup +{ + [self.editor fixZoomScaleWithAnimated:YES]; + + if(!self.toolInfo.optionalInfo){ + self.toolInfo.optionalInfo = [[self.class optionalInfo] mutableCopy]; + } + + BOOL swapBtnHidden = [self.toolInfo.optionalInfo[kCLClippingToolSwapButtonHidden] boolValue]; + CGFloat buttonWidth = (swapBtnHidden) ? 0 : 70; + + _menuContainer = [[UIView alloc] initWithFrame:self.editor.menuView.frame]; + _menuContainer.backgroundColor = self.editor.menuView.backgroundColor; + [self.editor.view addSubview:_menuContainer]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, _menuContainer.width - buttonWidth, _menuContainer.height)]; + _menuScroll.backgroundColor = [UIColor clearColor]; + _menuScroll.showsHorizontalScrollIndicator = NO; + _menuScroll.clipsToBounds = NO; + [_menuContainer addSubview:_menuScroll]; + + if(!swapBtnHidden){ + UIView *btnPanel = [[UIView alloc] initWithFrame:CGRectMake(_menuScroll.right, 0, buttonWidth, _menuContainer.height)]; + btnPanel.backgroundColor = [_menuContainer.backgroundColor colorWithAlphaComponent:0.9]; + [_menuContainer addSubview:btnPanel]; + + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(0, 0, 40, 40); + btn.center = CGPointMake(btnPanel.width/2, btnPanel.height/2 - 10); + [btn addTarget:self action:@selector(pushedRotateBtn:) forControlEvents:UIControlEventTouchUpInside]; + [btn setImage:[self imageForKey:kCLClippingToolRotateIconName defaultImageName:@"btn_rotate.png"] forState:UIControlStateNormal]; + btn.adjustsImageWhenHighlighted = YES; + [btnPanel addSubview:btn]; + } + + _gridView = [[CLClippingPanel alloc] initWithSuperview:self.editor.imageView.superview frame:self.editor.imageView.frame]; + _gridView.backgroundColor = [UIColor clearColor]; + _gridView.bgColor = [self.editor.view.backgroundColor colorWithAlphaComponent:0.8]; + _gridView.gridColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.8]; + _gridView.clipsToBounds = NO; + + [self setCropMenu]; + + _menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + [_gridView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuContainer removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + CGFloat zoomScale = self.editor.imageView.width / self.editor.imageView.image.size.width; + CGRect rct = _gridView.clippingRect; + rct.size.width /= zoomScale; + rct.size.height /= zoomScale; + rct.origin.x /= zoomScale; + rct.origin.y /= zoomScale; + + UIImage *result = [self.editor.imageView.image crop:rct]; + completionBlock(result, nil, nil); +} + +#pragma mark- + +- (void)setCropMenu +{ + CGFloat W = 70; + CGFloat x = 0; + + NSArray *ratios = self.toolInfo.optionalInfo[kCLClippingToolRatios]; + BOOL swapBtnHidden = [self.toolInfo.optionalInfo[kCLClippingToolSwapButtonHidden] boolValue]; + + CGSize imgSize = self.editor.imageView.image.size; + CGFloat maxW = MIN(imgSize.width, imgSize.height); + UIImage *iconImage = [self.editor.imageView.image resize:CGSizeMake(W * imgSize.width/maxW, W * imgSize.height/maxW)]; + + for(NSDictionary *info in ratios){ + CGFloat val1 = [info[kCLClippingToolRatioValue1] floatValue]; + CGFloat val2 = [info[kCLClippingToolRatioValue2] floatValue]; + + CLRatio *ratio = [[CLRatio alloc] initWithValue1:val1 value2:val2]; + ratio.titleFormat = info[kCLClippingToolRatioTitleFormat]; + + if(swapBtnHidden){ + ratio.isLandscape = (val1 > val2); + } + else{ + ratio.isLandscape = (imgSize.width > imgSize.height); + } + + CLRatioMenuItem *view = [[CLRatioMenuItem alloc] initWithFrame:CGRectMake(x, 0, W, _menuScroll.height) target:self action:@selector(tappedMenu:) toolInfo:nil]; + view.iconImage = iconImage; + view.ratio = ratio; + + if(ratios.count>1 || !swapBtnHidden){ + [_menuScroll addSubview:view]; + x += W; + } + + if(self.selectedMenu==nil){ + self.selectedMenu = view; + } + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedMenu:(UITapGestureRecognizer*)sender +{ + CLRatioMenuItem *view = (CLRatioMenuItem*)sender.view; + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; + + self.selectedMenu = view; +} + +- (void)setSelectedMenu:(CLRatioMenuItem *)selectedMenu +{ + if(selectedMenu != _selectedMenu){ + _selectedMenu.backgroundColor = [UIColor clearColor]; + _selectedMenu = selectedMenu; + _selectedMenu.backgroundColor = [CLImageEditorTheme toolbarSelectedButtonColor]; + + if(selectedMenu.ratio.ratio==0){ + _gridView.clippingRatio = nil; + } + else{ + _gridView.clippingRatio = selectedMenu.ratio; + } + } +} + +- (void)pushedRotateBtn:(UIButton*)sender +{ + for(CLRatioMenuItem *item in _menuScroll.subviews){ + if([item isKindOfClass:[CLRatioMenuItem class]]){ + [item changeOrientation]; + } + } + + if(_gridView.clippingRatio.ratio!=0 && _gridView.clippingRatio.ratio!=1){ + [_gridView clippingRatioDidChange]; + } +} + +@end + + +#pragma mark- UI components + +@interface CLClippingCircle : UIView + +@property (nonatomic, strong) UIColor *bgColor; + +@end + +@implementation CLClippingCircle + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x = rct.size.width/2-rct.size.width/6; + rct.origin.y = rct.size.height/2-rct.size.height/6; + rct.size.width /= 3; + rct.size.height /= 3; + + CGContextSetFillColorWithColor(context, self.bgColor.CGColor); + CGContextFillEllipseInRect(context, rct); +} + +@end + +@interface CLGridLayar : CALayer +@property (nonatomic, assign) CGRect clippingRect; +@property (nonatomic, strong) UIColor *bgColor; +@property (nonatomic, strong) UIColor *gridColor; +@end + +@implementation CLGridLayar + ++ (BOOL)needsDisplayForKey:(NSString*)key +{ + if ([key isEqualToString:@"clippingRect"]) { + return YES; + } + return [super needsDisplayForKey:key]; +} + +- (id)initWithLayer:(id)layer +{ + self = [super initWithLayer:layer]; + if(self && [layer isKindOfClass:[CLGridLayar class]]){ + self.bgColor = ((CLGridLayar*)layer).bgColor; + self.gridColor = ((CLGridLayar*)layer).gridColor; + self.clippingRect = ((CLGridLayar*)layer).clippingRect; + } + return self; +} + +- (void)drawInContext:(CGContextRef)context +{ + CGRect rct = self.bounds; + CGContextSetFillColorWithColor(context, self.bgColor.CGColor); + CGContextFillRect(context, rct); + + CGContextClearRect(context, _clippingRect); + + CGContextSetStrokeColorWithColor(context, self.gridColor.CGColor); + CGContextSetLineWidth(context, 1); + + rct = self.clippingRect; + + CGContextBeginPath(context); + CGFloat dW = 0; + for(int i=0;i<4;++i){ + CGContextMoveToPoint(context, rct.origin.x+dW, rct.origin.y); + CGContextAddLineToPoint(context, rct.origin.x+dW, rct.origin.y+rct.size.height); + dW += _clippingRect.size.width/3; + } + + dW = 0; + for(int i=0;i<4;++i){ + CGContextMoveToPoint(context, rct.origin.x, rct.origin.y+dW); + CGContextAddLineToPoint(context, rct.origin.x+rct.size.width, rct.origin.y+dW); + dW += rct.size.height/3; + } + CGContextStrokePath(context); +} + +@end + +@implementation CLClippingPanel +{ + CLGridLayar *_gridLayer; + CLClippingCircle *_ltView; + CLClippingCircle *_lbView; + CLClippingCircle *_rtView; + CLClippingCircle *_rbView; +} + +- (CLClippingCircle*)clippingCircleWithTag:(NSInteger)tag +{ + CLClippingCircle *view = [[CLClippingCircle alloc] initWithFrame:CGRectMake(0, 0, 75, 75)]; + view.backgroundColor = [UIColor clearColor]; + view.bgColor = [UIColor blackColor]; + view.tag = tag; + + UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panCircleView:)]; + [view addGestureRecognizer:panGesture]; + + [self.superview addSubview:view]; + + return view; +} + +- (id)initWithSuperview:(UIView*)superview frame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + [superview addSubview:self]; + + _gridLayer = [[CLGridLayar alloc] init]; + _gridLayer.frame = self.bounds; + _gridLayer.bgColor = [UIColor colorWithWhite:1 alpha:0.6]; + _gridLayer.gridColor = [UIColor colorWithWhite:0 alpha:0.6]; + [self.layer addSublayer:_gridLayer]; + + _ltView = [self clippingCircleWithTag:0]; + _lbView = [self clippingCircleWithTag:1]; + _rtView = [self clippingCircleWithTag:2]; + _rbView = [self clippingCircleWithTag:3]; + + UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGridView:)]; + [self addGestureRecognizer:panGesture]; + + self.clippingRect = self.bounds; + } + return self; +} + +- (void)removeFromSuperview +{ + [super removeFromSuperview]; + + [_ltView removeFromSuperview]; + [_lbView removeFromSuperview]; + [_rtView removeFromSuperview]; + [_rbView removeFromSuperview]; +} + +- (void)setBgColor:(UIColor *)bgColor +{ + _gridLayer.bgColor = bgColor; +} + +- (void)setGridColor:(UIColor *)gridColor +{ + _gridLayer.gridColor = gridColor; + _ltView.bgColor = _lbView.bgColor = _rtView.bgColor = _rbView.bgColor = [gridColor colorWithAlphaComponent:1]; +} + +- (void)setClippingRect:(CGRect)clippingRect +{ + _clippingRect = clippingRect; + + _ltView.center = [self.superview convertPoint:CGPointMake(_clippingRect.origin.x, _clippingRect.origin.y) fromView:self]; + _lbView.center = [self.superview convertPoint:CGPointMake(_clippingRect.origin.x, _clippingRect.origin.y+_clippingRect.size.height) fromView:self]; + _rtView.center = [self.superview convertPoint:CGPointMake(_clippingRect.origin.x+_clippingRect.size.width, _clippingRect.origin.y) fromView:self]; + _rbView.center = [self.superview convertPoint:CGPointMake(_clippingRect.origin.x+_clippingRect.size.width, _clippingRect.origin.y+_clippingRect.size.height) fromView:self]; + + _gridLayer.clippingRect = clippingRect; + [self setNeedsDisplay]; +} + +- (void)setClippingRect:(CGRect)clippingRect animated:(BOOL)animated +{ + if(animated){ + [UIView animateWithDuration:kCLImageToolFadeoutDuration + animations:^{ + self->_ltView.center = [self.superview convertPoint:CGPointMake(clippingRect.origin.x, clippingRect.origin.y) fromView:self]; + self->_lbView.center = [self.superview convertPoint:CGPointMake(clippingRect.origin.x, clippingRect.origin.y+clippingRect.size.height) fromView:self]; + self->_rtView.center = [self.superview convertPoint:CGPointMake(clippingRect.origin.x+clippingRect.size.width, clippingRect.origin.y) fromView:self]; + self->_rbView.center = [self.superview convertPoint:CGPointMake(clippingRect.origin.x+clippingRect.size.width, clippingRect.origin.y+clippingRect.size.height) fromView:self]; + } + ]; + + CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"clippingRect"]; + animation.duration = kCLImageToolFadeoutDuration; + animation.fromValue = [NSValue valueWithCGRect:_clippingRect]; + animation.toValue = [NSValue valueWithCGRect:clippingRect]; + [_gridLayer addAnimation:animation forKey:nil]; + + _gridLayer.clippingRect = clippingRect; + _clippingRect = clippingRect; + [self setNeedsDisplay]; + } + else{ + self.clippingRect = clippingRect; + } +} + +- (void)clippingRatioDidChange +{ + CGRect rect = self.bounds; + if(self.clippingRatio){ + CGFloat H = rect.size.width * self.clippingRatio.ratio; + if(H<=rect.size.height){ + rect.size.height = H; + } + else{ + rect.size.width *= rect.size.height / H; + } + + rect.origin.x = (self.bounds.size.width - rect.size.width) / 2; + rect.origin.y = (self.bounds.size.height - rect.size.height) / 2; + } + [self setClippingRect:rect animated:YES]; +} + +- (void)setClippingRatio:(CLRatio *)clippingRatio +{ + if(clippingRatio != _clippingRatio){ + _clippingRatio = clippingRatio; + [self clippingRatioDidChange]; + } +} + +- (void)setNeedsDisplay +{ + [super setNeedsDisplay]; + [_gridLayer setNeedsDisplay]; +} + +- (void)panCircleView:(UIPanGestureRecognizer*)sender +{ + CGPoint point = [sender locationInView:self]; + CGPoint dp = [sender translationInView:self]; + + CGRect rct = self.clippingRect; + + const CGFloat W = self.frame.size.width; + const CGFloat H = self.frame.size.height; + CGFloat minX = 0; + CGFloat minY = 0; + CGFloat maxX = W; + CGFloat maxY = H; + + CGFloat ratio = (sender.view.tag == 1 || sender.view.tag==2) ? -self.clippingRatio.ratio : self.clippingRatio.ratio; + + switch (sender.view.tag) { + case 0: // upper left + { + maxX = MAX((rct.origin.x + rct.size.width) - 0.1 * W, 0.1 * W); + maxY = MAX((rct.origin.y + rct.size.height) - 0.1 * H, 0.1 * H); + + if(ratio!=0){ + CGFloat y0 = rct.origin.y - ratio * rct.origin.x; + CGFloat x0 = -y0 / ratio; + minX = MAX(x0, 0); + minY = MAX(y0, 0); + + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + + if(-dp.x*ratio + dp.y > 0){ point.x = (point.y - y0) / ratio; } + else{ point.y = point.x * ratio + y0; } + } + else{ + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + } + + rct.size.width = rct.size.width - (point.x - rct.origin.x); + rct.size.height = rct.size.height - (point.y - rct.origin.y); + rct.origin.x = point.x; + rct.origin.y = point.y; + break; + } + case 1: // lower left + { + maxX = MAX((rct.origin.x + rct.size.width) - 0.1 * W, 0.1 * W); + minY = MAX(rct.origin.y + 0.1 * H, 0.1 * H); + + if(ratio!=0){ + CGFloat y0 = (rct.origin.y + rct.size.height) - ratio* rct.origin.x ; + CGFloat xh = (H - y0) / ratio; + minX = MAX(xh, 0); + maxY = MIN(y0, H); + + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + + if(-dp.x*ratio + dp.y < 0){ point.x = (point.y - y0) / ratio; } + else{ point.y = point.x * ratio + y0; } + } + else{ + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + } + + rct.size.width = rct.size.width - (point.x - rct.origin.x); + rct.size.height = point.y - rct.origin.y; + rct.origin.x = point.x; + break; + } + case 2: // upper right + { + minX = MAX(rct.origin.x + 0.1 * W, 0.1 * W); + maxY = MAX((rct.origin.y + rct.size.height) - 0.1 * H, 0.1 * H); + + if(ratio!=0){ + CGFloat y0 = rct.origin.y - ratio * (rct.origin.x + rct.size.width); + CGFloat yw = ratio * W + y0; + CGFloat x0 = -y0 / ratio; + maxX = MIN(x0, W); + minY = MAX(yw, 0); + + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + + if(-dp.x*ratio + dp.y > 0){ point.x = (point.y - y0) / ratio; } + else{ point.y = point.x * ratio + y0; } + } + else{ + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + } + + rct.size.width = point.x - rct.origin.x; + rct.size.height = rct.size.height - (point.y - rct.origin.y); + rct.origin.y = point.y; + break; + } + case 3: // lower right + { + minX = MAX(rct.origin.x + 0.1 * W, 0.1 * W); + minY = MAX(rct.origin.y + 0.1 * H, 0.1 * H); + + if(ratio!=0){ + CGFloat y0 = (rct.origin.y + rct.size.height) - ratio * (rct.origin.x + rct.size.width); + CGFloat yw = ratio * W + y0; + CGFloat xh = (H - y0) / ratio; + maxX = MIN(xh, W); + maxY = MIN(yw, H); + + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + + if(-dp.x*ratio + dp.y < 0){ point.x = (point.y - y0) / ratio; } + else{ point.y = point.x * ratio + y0; } + } + else{ + point.x = MAX(minX, MIN(point.x, maxX)); + point.y = MAX(minY, MIN(point.y, maxY)); + } + + rct.size.width = point.x - rct.origin.x; + rct.size.height = point.y - rct.origin.y; + break; + } + default: + break; + } + self.clippingRect = rct; +} + +- (void)panGridView:(UIPanGestureRecognizer*)sender +{ + static BOOL dragging = NO; + static CGRect initialRect; + + if(sender.state==UIGestureRecognizerStateBegan){ + CGPoint point = [sender locationInView:self]; + dragging = CGRectContainsPoint(_clippingRect, point); + initialRect = self.clippingRect; + } + else if(dragging){ + CGPoint point = [sender translationInView:self]; + CGFloat left = MIN(MAX(initialRect.origin.x + point.x, 0), self.frame.size.width-initialRect.size.width); + CGFloat top = MIN(MAX(initialRect.origin.y + point.y, 0), self.frame.size.height-initialRect.size.height); + + CGRect rct = self.clippingRect; + rct.origin.x = left; + rct.origin.y = top; + self.clippingRect = rct; + } +} +@end + + + + +@implementation CLRatio +{ + CGFloat _longSide; + CGFloat _shortSide; +} + +- (id)initWithValue1:(CGFloat)value1 value2:(CGFloat)value2 +{ + self = [super init]; + if(self){ + _longSide = MAX(fabs(value1), fabs(value2)); + _shortSide = MIN(fabs(value1), fabs(value2)); + } + return self; +} + +- (NSString*)description +{ + NSString *format = (self.titleFormat) ? self.titleFormat : @"%g : %g"; + + if(self.isLandscape){ + return [NSString stringWithFormat:format, _longSide, _shortSide]; + } + return [NSString stringWithFormat:format, _shortSide, _longSide]; +} + +- (CGFloat)ratio +{ + if(_longSide==0 || _shortSide==0){ + return 0; + } + + if(self.isLandscape){ + return _shortSide / (CGFloat)_longSide; + } + return _longSide / (CGFloat)_shortSide; +} + +@end + + +@implementation CLRatioMenuItem + +- (void)setRatio:(CLRatio *)ratio +{ + if(ratio != _ratio){ + _ratio = ratio; + [self refreshViews]; + } +} + +- (void)refreshViews +{ + _titleLabel.text = [_ratio description]; + + CGPoint center = _iconView.center; + CGFloat W, H; + if(_ratio.ratio!=0){ + if(_ratio.isLandscape){ + W = 50; + H = 50*_ratio.ratio; + } + else{ + W = 50/_ratio.ratio; + H = 50; + } + } + else{ + CGFloat maxW = MAX(_iconView.image.size.width, _iconView.image.size.height); + W = 50 * _iconView.image.size.width / maxW; + H = 50 * _iconView.image.size.height / maxW; + } + _iconView.frame = CGRectMake(center.x-W/2, center.y-H/2, W, H); +} + +- (void)changeOrientation +{ + self.ratio.isLandscape = !self.ratio.isLandscape; + + [UIView animateWithDuration:kCLImageToolFadeoutDuration + animations:^{ + [self refreshViews]; + } + ]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h new file mode 100644 index 0000000..ca102e1 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h @@ -0,0 +1,12 @@ +// +// CLDrawTool.h +// +// Created by sho yakushiji on 2014/06/20. +// Copyright (c) 2014年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLDrawTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.m new file mode 100644 index 0000000..0511bd0 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.m @@ -0,0 +1,353 @@ +// +// CLDrawTool.m +// +// Created by sho yakushiji on 2014/06/20. +// Copyright (c) 2014年 CALACULU. All rights reserved. +// + +#import "CLDrawTool.h" + +static NSString* const kCLDrawToolEraserIconName = @"eraserIconAssetsName"; + +@implementation CLDrawTool +{ + UIImageView *_drawingView; + CGSize _originalImageSize; + + CGPoint _prevDraggingPosition; + UIView *_menuView; + UISlider *_colorSlider; + UISlider *_widthSlider; + UIView *_strokePreview; + UIView *_strokePreviewBackground; + UIImageView *_eraserIcon; + + CLToolbarMenuItem *_colorBtn; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLDrawTool_DefaultTitle" withDefault:@"Draw"]; +} + ++ (BOOL)isAvailable +{ + return YES; +} + ++ (CGFloat)defaultDockedNumber +{ + return 4.5; +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLDrawToolEraserIconName : @"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImageSize = self.editor.imageView.image.size; + + _drawingView = [[UIImageView alloc] initWithFrame:self.editor.imageView.bounds]; + + UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(drawingViewDidPan:)]; + panGesture.maximumNumberOfTouches = 1; + + _drawingView.userInteractionEnabled = YES; + [_drawingView addGestureRecognizer:panGesture]; + + [self.editor.imageView addSubview:_drawingView]; + self.editor.imageView.userInteractionEnabled = YES; + self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2; + self.editor.scrollView.panGestureRecognizer.delaysTouchesBegan = NO; + self.editor.scrollView.pinchGestureRecognizer.delaysTouchesBegan = NO; + + _menuView = [[UIView alloc] initWithFrame:self.editor.menuView.frame]; + _menuView.backgroundColor = self.editor.menuView.backgroundColor; + [self.editor.view addSubview:_menuView]; + + [self setMenu]; + + _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuView.transform = CGAffineTransformIdentity; + }]; + +} + +- (void)cleanup +{ + [_drawingView removeFromSuperview]; + self.editor.imageView.userInteractionEnabled = NO; + self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 1; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuView.top); + } + completion:^(BOOL finished) { + [self->_menuView removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + UIImage *backgroundImage = self.editor.imageView.image; + UIImage *foregroundImage = _drawingView.image; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImageWithBackgroundImage:backgroundImage foregroundImage:foregroundImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (UISlider*)defaultSliderWithWidth:(CGFloat)width +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, width, 34)]; + + [slider setMaximumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setMinimumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setThumbImage:[UIImage new] forState:UIControlStateNormal]; + slider.thumbTintColor = [UIColor whiteColor]; + + return slider; +} + +- (UIImage*)colorSliderBackground +{ + CGSize size = _colorSlider.frame.size; + + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect frame = CGRectMake(5, (size.height-10)/2, size.width-10, 5); + CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:5].CGPath; + CGContextAddPath(context, path); + CGContextClip(context); + + CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); + CGFloat components[] = { + 0.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 1.0f, 1.0f, 1.0f, + 1.0f, 0.0f, 0.0f, 1.0f, + 1.0f, 1.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 0.0f, 1.0f, + 0.0f, 1.0f, 1.0f, 1.0f, + 0.0f, 0.0f, 1.0f, 1.0f + }; + + size_t count = sizeof(components)/ (sizeof(CGFloat)* 4); + CGFloat locations[] = {0.0f, 0.9/3.0, 1/3.0, 1.5/3.0, 2/3.0, 2.5/3.0, 1.0}; + + CGPoint startPoint = CGPointMake(5, 0); + CGPoint endPoint = CGPointMake(size.width-5, 0); + + CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpaceRef, components, locations, count); + + CGContextDrawLinearGradient(context, gradientRef, startPoint, endPoint, kCGGradientDrawsAfterEndLocation); + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + CGGradientRelease(gradientRef); + CGColorSpaceRelease(colorSpaceRef); + + UIGraphicsEndImageContext(); + + return tmp; +} + +- (UIImage*)widthSliderBackground +{ + CGSize size = _widthSlider.frame.size; + + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + UIColor *color = [[[CLImageEditorTheme theme] toolbarTextColor] colorWithAlphaComponent:0.5]; + + CGFloat strRadius = 1; + CGFloat endRadius = size.height/2 * 0.6; + + CGPoint strPoint = CGPointMake(strRadius + 5, size.height/2 - 2); + CGPoint endPoint = CGPointMake(size.width-endRadius - 1, strPoint.y); + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddArc(path, NULL, strPoint.x, strPoint.y, strRadius, -M_PI/2, M_PI-M_PI/2, YES); + CGPathAddLineToPoint(path, NULL, endPoint.x, endPoint.y + endRadius); + CGPathAddArc(path, NULL, endPoint.x, endPoint.y, endRadius, M_PI/2, M_PI+M_PI/2, YES); + CGPathAddLineToPoint(path, NULL, strPoint.x, strPoint.y - strRadius); + + CGPathCloseSubpath(path); + + CGContextAddPath(context, path); + CGContextSetFillColorWithColor(context, color.CGColor); + CGContextFillPath(context); + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + CGPathRelease(path); + + UIGraphicsEndImageContext(); + + return tmp; +} + +- (UIColor*)colorForValue:(CGFloat)value +{ + if(value<1/3.0){ + return [UIColor colorWithWhite:value/0.3 alpha:1]; + } + return [UIColor colorWithHue:((value-1/3.0)/0.7)*2/3.0 saturation:1 brightness:1 alpha:1]; +} + +- (void)setMenu +{ + CGFloat W = 70; + + _colorSlider = [self defaultSliderWithWidth:_menuView.width - W - 20]; + _colorSlider.left = 10; + _colorSlider.top = 5; + [_colorSlider addTarget:self action:@selector(colorSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + _colorSlider.backgroundColor = [UIColor colorWithPatternImage:[self colorSliderBackground]]; + _colorSlider.value = 0; + [_menuView addSubview:_colorSlider]; + + _widthSlider = [self defaultSliderWithWidth:_colorSlider.width]; + _widthSlider.left = 10; + _widthSlider.top = _colorSlider.bottom + 5; + [_widthSlider addTarget:self action:@selector(widthSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + _widthSlider.value = 0.1; + _widthSlider.backgroundColor = [UIColor colorWithPatternImage:[self widthSliderBackground]]; + [_menuView addSubview:_widthSlider]; + + _strokePreview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, W - 5, W - 5)]; + _strokePreview.layer.cornerRadius = _strokePreview.height/2; + _strokePreview.layer.borderWidth = 1; + _strokePreview.layer.borderColor = [[[CLImageEditorTheme theme] toolbarTextColor] CGColor]; + _strokePreview.center = CGPointMake(_menuView.width-W/2, _menuView.height/2); + [_menuView addSubview:_strokePreview]; + + _strokePreviewBackground = [[UIView alloc] initWithFrame:_strokePreview.frame]; + _strokePreviewBackground.layer.cornerRadius = _strokePreviewBackground.height/2; + _strokePreviewBackground.alpha = 0.3; + [_strokePreviewBackground addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(strokePreviewDidTap:)]]; + [_menuView insertSubview:_strokePreviewBackground aboveSubview:_strokePreview]; + + _eraserIcon = [[UIImageView alloc] initWithFrame:_strokePreview.frame]; + _eraserIcon.image = [self imageForKey:kCLDrawToolEraserIconName defaultImageName:@"btn_eraser.png"]; + _eraserIcon.hidden = YES; + [_menuView addSubview:_eraserIcon]; + + [self colorSliderDidChange:_colorSlider]; + [self widthSliderDidChange:_widthSlider]; + + _menuView.clipsToBounds = NO; +} + +- (void)colorSliderDidChange:(UISlider*)sender +{ + if(_eraserIcon.hidden){ + _strokePreview.backgroundColor = [self colorForValue:_colorSlider.value]; + _strokePreviewBackground.backgroundColor = _strokePreview.backgroundColor; + _colorSlider.thumbTintColor = _strokePreview.backgroundColor; + } +} + +- (void)widthSliderDidChange:(UISlider*)sender +{ + CGFloat scale = MAX(0.05, _widthSlider.value); + _strokePreview.transform = CGAffineTransformMakeScale(scale, scale); + _strokePreview.layer.borderWidth = 2/scale; +} + +- (void)strokePreviewDidTap:(UITapGestureRecognizer*)sender +{ + _eraserIcon.hidden = !_eraserIcon.hidden; + + if(_eraserIcon.hidden){ + [self colorSliderDidChange:_colorSlider]; + } + else{ + _strokePreview.backgroundColor = [[CLImageEditorTheme theme] toolbarTextColor]; + _strokePreviewBackground.backgroundColor = _strokePreview.backgroundColor; + } +} + +- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender +{ + CGPoint currentDraggingPosition = [sender locationInView:_drawingView]; + + if(sender.state == UIGestureRecognizerStateBegan){ + _prevDraggingPosition = currentDraggingPosition; + } + + if(sender.state != UIGestureRecognizerStateEnded){ + [self drawLine:_prevDraggingPosition to:currentDraggingPosition]; + } + _prevDraggingPosition = currentDraggingPosition; +} + +-(void)drawLine:(CGPoint)from to:(CGPoint)to +{ + CGSize size = _drawingView.frame.size; + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + [_drawingView.image drawAtPoint:CGPointZero]; + + CGFloat strokeWidth = MAX(1, _widthSlider.value * 65); + UIColor *strokeColor = _strokePreview.backgroundColor; + + CGContextSetLineWidth(context, strokeWidth); + CGContextSetStrokeColorWithColor(context, strokeColor.CGColor); + CGContextSetLineCap(context, kCGLineCapRound); + + if(!_eraserIcon.hidden){ + CGContextSetBlendMode(context, kCGBlendModeClear); + } + + CGContextMoveToPoint(context, from.x, from.y); + CGContextAddLineToPoint(context, to.x, to.y); + CGContextStrokePath(context); + + _drawingView.image = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); +} + +- (UIImage*)buildImageWithBackgroundImage:(UIImage*)backgroundImage foregroundImage:(UIImage*)foregroundImage +{ + UIGraphicsBeginImageContextWithOptions(_originalImageSize, NO, backgroundImage.scale); + + [backgroundImage drawAtPoint:CGPointZero]; + [foregroundImage drawInRect:CGRectMake(0, 0, _originalImageSize.width, _originalImageSize.height)]; + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h new file mode 100644 index 0000000..3250e22 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h @@ -0,0 +1,12 @@ +// +// CLBloomEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLBloomEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.m new file mode 100644 index 0000000..076c85b --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.m @@ -0,0 +1,136 @@ +// +// CLBloomEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLBloomEffect.h" + +#import "UIImage+Utility.h" +#import "UIView+Frame.h" + +@implementation CLBloomEffect +{ + UIView *_containerView; + UISlider *_radiusSlider; + UISlider *_intensitySlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLBloomEffect_DefaultTitle" withDefault:@"Bloom"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 6.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo*)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIBloom" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + + CGFloat R = [self getRadius] * MIN(image.size.width, image.size.height) * 0.05; + [filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputRadius"]; + [filter setValue:[self getIntensityValue] forKey:@"inputIntensity"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + CGFloat dW = (result.size.width - image.size.width)/2; + CGFloat dH = (result.size.height - image.size.height)/2; + + CGRect rct = CGRectMake(dW, dH, image.size.width, image.size.height); + + return [result crop:rct]; +} + +- (CGFloat)getRadius +{ + __block CGFloat value = 0; + + safe_dispatch_sync_main(^{ + value = self->_radiusSlider.value; + }); + return value; +} + +- (NSNumber*)getIntensityValue +{ + __block NSNumber *value = nil; + + safe_dispatch_sync_main(^{ + value = [NSNumber numberWithFloat:self->_intensitySlider.value]; + }); + return value; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = NO; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _radiusSlider = [self sliderWithValue:0.5 minimumValue:0 maximumValue:1.0]; + _radiusSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); + + _intensitySlider = [self sliderWithValue:1 minimumValue:0 maximumValue:1.0]; + _intensitySlider.superview.center = CGPointMake(_containerView.width-20, _radiusSlider.superview.top - 150); + _intensitySlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h new file mode 100644 index 0000000..495ed87 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h @@ -0,0 +1,12 @@ +// +// CLGloomEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLGloomEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.m new file mode 100644 index 0000000..c369f10 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.m @@ -0,0 +1,136 @@ +// +// CLGloomEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLGloomEffect.h" + +#import "UIImage+Utility.h" +#import "UIView+Frame.h" + +@implementation CLGloomEffect +{ + UIView *_containerView; + UISlider *_radiusSlider; + UISlider *_intensitySlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLGloomEffect_DefaultTitle" withDefault:@"Gloom"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 6.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIGloom" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + + CGFloat R = [self getRadius] * MIN(image.size.width, image.size.height) * 0.05; + [filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputRadius"]; + [filter setValue:[self getIntensityValue] forKey:@"inputIntensity"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + CGFloat dW = (result.size.width - image.size.width)/2; + CGFloat dH = (result.size.height - image.size.height)/2; + + CGRect rct = CGRectMake(dW, dH, image.size.width, image.size.height); + + return [result crop:rct]; +} + +- (CGFloat)getRadius +{ + __block CGFloat value = 0; + + safe_dispatch_sync_main(^{ + value = self->_radiusSlider.value; + }); + return value; +} + +- (NSNumber*)getIntensityValue +{ + __block NSNumber *value = nil; + + safe_dispatch_sync_main(^{ + value = [NSNumber numberWithFloat:self->_intensitySlider.value]; + }); + return value; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = NO; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _radiusSlider = [self sliderWithValue:0.5 minimumValue:0 maximumValue:1.0]; + _radiusSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); + + _intensitySlider = [self sliderWithValue:1 minimumValue:0 maximumValue:1.0]; + _intensitySlider.superview.center = CGPointMake(_containerView.width-20, _radiusSlider.superview.top - 150); + _intensitySlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h new file mode 100644 index 0000000..710e476 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h @@ -0,0 +1,12 @@ +// +// CLHighlightShadowEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLHighlightShadowEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.m new file mode 100644 index 0000000..9507332 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.m @@ -0,0 +1,129 @@ +// +// CLHighlightShadowEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLHighlightShadowEffect.h" + +#import "UIView+Frame.h" + +@implementation CLHighlightShadowEffect +{ + UIView *_containerView; + + //UISlider *_highlightSlider; + UISlider *_shadowSlider; + //UISlider *_radiusSlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLHighlightSadowEffect_DefaultTitle" withDefault:@"Highlight"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIHighlightShadowAdjust" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + //[filter setValue:[NSNumber numberWithFloat:_highlightSlider.value] forKey:@"inputHighlightAmount"]; + [filter setValue:[self getShadowValue] forKey:@"inputShadowAmount"]; + //CGFloat R = MAX(image.size.width, image.size.height) * 0.02 * _radiusSlider.value; + //[filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputRadius"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +- (NSNumber*)getShadowValue +{ + __block NSNumber *value = nil; + + safe_dispatch_sync_main(^{ + value = [NSNumber numberWithFloat:self->_shadowSlider.value]; + }); + return value; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = YES; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _shadowSlider = [self sliderWithValue:0 minimumValue:-1 maximumValue:1]; + _shadowSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); + + //_radiusSlider = [self sliderWithValue:0.5 minimumValue:0 maximumValue:1]; + //_radiusSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); + + //_highlightSlider = [self sliderWithValue:1 minimumValue:0.3 maximumValue:1]; + //_highlightSlider.superview.center = CGPointMake(20, _radiusSlider.superview.top - 150); + //_highlightSlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); + + //_shadowSlider = [self sliderWithValue:0 minimumValue:-1 maximumValue:1]; + //_shadowSlider.superview.center = CGPointMake(300, _highlightSlider.superview.center.y); + //_shadowSlider.superview.transform = CGAffineTransformMakeRotation(-M_PI * 90 / 180.0f); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h new file mode 100644 index 0000000..2351284 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h @@ -0,0 +1,12 @@ +// +// CLHueEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLHueEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.m new file mode 100644 index 0000000..33bf47b --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.m @@ -0,0 +1,113 @@ +// +// CLHueEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLHueEffect.h" + +#import "UIView+Frame.h" + +@implementation CLHueEffect +{ + UIView *_containerView; + UISlider *_hueSlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLHueEffect_DefaultTitle" withDefault:@"Hue"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + _containerView.clipsToBounds = YES; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIHueAdjust" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + [filter setValue:[self getHueValue] forKey:@"inputAngle"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +- (NSNumber*)getHueValue +{ + __block NSNumber *value = nil; + + safe_dispatch_sync_main(^{ + value = [NSNumber numberWithFloat:self->_hueSlider.value]; + }); + return value; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = YES; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _hueSlider = [self sliderWithValue:0 minimumValue:-M_PI maximumValue:M_PI]; + _hueSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h new file mode 100644 index 0000000..85881a1 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h @@ -0,0 +1,12 @@ +// +// CLPixellateEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLPixellateEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.m new file mode 100644 index 0000000..839783d --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.m @@ -0,0 +1,188 @@ +// +// CLPixellateEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLPixellateEffect.h" + +#import "UIView+Frame.h" +#import "UIImage+Utility.h" + +@implementation CLPixellateEffect +{ + UIView *_containerView; + UISlider *_radiusSlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLPixellateEffect_DefaultTitle" withDefault:@"Pixelate"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 6.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIPixellate" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + + CGFloat R = MIN(image.size.width, image.size.height) * 0.1 * [self getRadius]; + CIVector *vct = [[CIVector alloc] initWithX:image.size.width/2 Y:image.size.height/2]; + [filter setValue:vct forKey:@"inputCenter"]; + [filter setValue:[NSNumber numberWithFloat:MAX(R, 0.01)] forKey:@"inputScale"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + CGRect clippingRect = [self clippingRectForTransparentSpace:cgImage]; + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return [result crop:clippingRect]; +} + +- (CGFloat)getRadius +{ + __block CGFloat value = 0; + + safe_dispatch_sync_main(^{ + value = self->_radiusSlider.value; + }); + return value; +} + +#pragma mark- + +- (CGRect)clippingRectForTransparentSpace:(CGImageRef)inImage +{ + CGFloat left=0, right=0, top=0, bottom=0; + + CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); + UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); + + int width = (int)CGImageGetWidth(inImage); + int height = (int)CGImageGetHeight(inImage); + + BOOL breakOut = NO; + for (int x = 0;breakOut==NO && x < width; ++x) { + for (int y = 0; y < height; ++y) { + int loc = x + (y * width); + loc *= 4; + if (m_PixelBuf[loc + 3] != 0) { + left = x; + breakOut = YES; + break; + } + } + } + + breakOut = NO; + for (int y = 0;breakOut==NO && y < height; ++y) { + for (int x = 0; x < width; ++x) { + int loc = x + (y * width); + loc *= 4; + if (m_PixelBuf[loc + 3] != 0) { + top = y; + breakOut = YES; + break; + } + + } + } + + breakOut = NO; + for (int y = height-1;breakOut==NO && y >= 0; --y) { + for (int x = width-1; x >= 0; --x) { + int loc = x + (y * width); + loc *= 4; + if (m_PixelBuf[loc + 3] != 0) { + bottom = y; + breakOut = YES; + break; + } + + } + } + + breakOut = NO; + for (int x = width-1;breakOut==NO && x >= 0; --x) { + for (int y = height-1; y >= 0; --y) { + int loc = x + (y * width); + loc *= 4; + if (m_PixelBuf[loc + 3] != 0) { + right = x; + breakOut = YES; + break; + } + + } + } + + CFRelease(m_DataRef); + + return CGRectMake(left, top, right-left, bottom-top); +} + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = NO; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _radiusSlider = [self sliderWithValue:0.5 minimumValue:0 maximumValue:1.0]; + _radiusSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h new file mode 100644 index 0000000..488eaa2 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h @@ -0,0 +1,12 @@ +// +// CLPosterizeEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLPosterizeEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.m new file mode 100644 index 0000000..e8af5db --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.m @@ -0,0 +1,112 @@ +// +// CLPosterizeEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLPosterizeEffect.h" + +#import "UIView+Frame.h" + +@implementation CLPosterizeEffect +{ + UIView *_containerView; + UISlider *_levelSlider; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLPosterizeEffect_DefaultTitle" withDefault:@"Posterize"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 6.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:superview.bounds]; + [superview addSubview:_containerView]; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIColorPosterize" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + [filter setValue:[self getLevelValue] forKey:@"inputLevels"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +- (NSNumber*)getLevelValue +{ + __block NSNumber *value = nil; + + safe_dispatch_sync_main(^{ + value = [NSNumber numberWithFloat:-self->_levelSlider.value]; + }); + return value; +} + +#pragma mark- + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = NO; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [_containerView addSubview:container]; + + return slider; +} + +- (void)setUserInterface +{ + _levelSlider = [self sliderWithValue:-4 minimumValue:-10 maximumValue:-2.0]; + _levelSlider.superview.center = CGPointMake(_containerView.width/2, _containerView.height-30); +} + +- (void)sliderDidChange:(UISlider*)sender +{ + [self.delegate effectParameterDidChange:self]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h new file mode 100644 index 0000000..68cf6b3 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h @@ -0,0 +1,12 @@ +// +// CLSpotEffect.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@interface CLSpotEffect : CLEffectBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.m new file mode 100644 index 0000000..20f24b1 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.m @@ -0,0 +1,216 @@ +// +// CLSpotEffect.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLSpotEffect.h" + +#import "UIView+Frame.h" + + + +@interface CLSpotCircle : UIView +@property (nonatomic, strong) UIColor *color; +@end + +@interface CLSpotEffect() + +@end + + +@implementation CLSpotEffect +{ + UIView *_containerView; + CLSpotCircle *_circleView; + + CGFloat _X; + CGFloat _Y; + CGFloat _R; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLSpotEffect_DefaultTitle" withDefault:@"Spot"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 7.0); +} + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo *)info +{ + self = [super initWithSuperView:superview imageViewFrame:frame toolInfo:info]; + if(self){ + _containerView = [[UIView alloc] initWithFrame:frame]; + [superview addSubview:_containerView]; + + _X = 0.5; + _Y = 0.5; + _R = 0.5; + + [self setUserInterface]; + } + return self; +} + +- (void)cleanup +{ + [_containerView removeFromSuperview]; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIVignetteEffect" keysAndValues:kCIInputImageKey, ciImage, nil]; + + [filter setDefaults]; + + CGFloat R = MIN(image.size.width, image.size.height) * image.scale * 0.5 * (_R + 0.1); + CIVector *vct = [[CIVector alloc] initWithX:image.size.width * image.scale * _X Y:image.size.height * image.scale * (1 - _Y)]; + [filter setValue:vct forKey:@"inputCenter"]; + [filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputRadius"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +#pragma mark- + +- (void)setUserInterface +{ + UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapContainerView:)]; + UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panContainerView:)]; + UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchContainerView:)]; + + pan.maximumNumberOfTouches = 1; + + tap.delegate = self; + //pan.delegate = self; + pinch.delegate = self; + + [_containerView addGestureRecognizer:tap]; + [_containerView addGestureRecognizer:pan]; + [_containerView addGestureRecognizer:pinch]; + + _circleView = [[CLSpotCircle alloc] init]; + _circleView.backgroundColor = [UIColor clearColor]; + _circleView.color = [UIColor whiteColor]; + [_containerView addSubview:_circleView]; + + [self drawCircleView]; +} + +- (void)drawCircleView +{ + CGFloat R = MIN(_containerView.width, _containerView.height) * (_R + 0.1) * 1.2; + + _circleView.width = R; + _circleView.height = R; + _circleView.center = CGPointMake(_containerView.width * _X, _containerView.height * _Y); + + [_circleView setNeedsDisplay]; +} + +- (void)tapContainerView:(UITapGestureRecognizer*)sender +{ + CGPoint point = [sender locationInView:_containerView]; + _X = MIN(1.0, MAX(0.0, point.x / _containerView.width)); + _Y = MIN(1.0, MAX(0.0, point.y / _containerView.height)); + + [self drawCircleView]; + + if (sender.state == UIGestureRecognizerStateEnded){ + [self.delegate effectParameterDidChange:self]; + } +} + +- (void)panContainerView:(UIPanGestureRecognizer*)sender +{ + CGPoint point = [sender locationInView:_containerView]; + _X = MIN(1.0, MAX(0.0, point.x / _containerView.width)); + _Y = MIN(1.0, MAX(0.0, point.y / _containerView.height)); + + [self drawCircleView]; + + if (sender.state == UIGestureRecognizerStateEnded){ + [self.delegate effectParameterDidChange:self]; + } +} + +- (void)pinchContainerView:(UIPinchGestureRecognizer*)sender +{ + static CGFloat initialScale; + if (sender.state == UIGestureRecognizerStateBegan) { + initialScale = (_R + 0.1); + } + + _R = MIN(1.1, MAX(0.1, initialScale * sender.scale)) - 0.1; + + [self drawCircleView]; + + if (sender.state == UIGestureRecognizerStateEnded){ + [self.delegate effectParameterDidChange:self]; + } +} + +@end + + + + +#pragma mark- UI components + +@implementation CLSpotCircle + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + [self setNeedsDisplay]; +} + +- (void)setCenter:(CGPoint)center +{ + [super setCenter:center]; + [self setNeedsDisplay]; +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x += 1; + rct.origin.y += 1; + rct.size.width -= 2; + rct.size.height -= 2; + + CGContextSetStrokeColorWithColor(context, self.color.CGColor); + CGContextStrokeEllipseInRect(context, rct); + + self.alpha = 1; + [UIView animateWithDuration:kCLEffectToolAnimationDuration + delay:1 + options:UIViewAnimationOptionCurveEaseInOut | UIViewAnimationOptionAllowUserInteraction + animations:^{ + self.alpha = 0; + } + completion:^(BOOL finished) { + + } + ]; +} + +@end + diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h new file mode 100644 index 0000000..d92b0d8 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h @@ -0,0 +1,37 @@ +// +// CLEffectBase.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "../ToolSettings/CLImageToolSettings.h" + + +static const CGFloat kCLEffectToolAnimationDuration = 0.2; + + +@protocol CLEffectDelegate; + +@interface CLEffectBase : NSObject + +@property (nonatomic, weak) id delegate; +@property (nonatomic, weak) CLImageToolInfo *toolInfo; + + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo*)info; +- (void)cleanup; + +- (BOOL)needsThumbnailPreview; +- (UIImage*)applyEffect:(UIImage*)image; + +@end + + + +@protocol CLEffectDelegate +@required +- (void)effectParameterDidChange:(CLEffectBase*)effect; +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.m new file mode 100644 index 0000000..91e92b3 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.m @@ -0,0 +1,82 @@ +// +// CLEffectBase.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectBase.h" + +@implementation CLEffectBase + +#pragma mark- + ++ (NSString*)defaultIconImagePath +{ + return [NSString stringWithFormat:@"%@/CLEffectTool/%@.png", CLImageEditorTheme.bundle.bundlePath, NSStringFromClass([self class])]; +} + ++ (CGFloat)defaultDockedNumber +{ + // Effect tools are sorted according to the dockedNumber in tool bar. + // Override point for tool bar customization + NSArray *effects = @[ + @"CLEffectBase", + @"CLSpotEffect", + @"CLHueEffect", + @"CLHighlightShadowEffect", + @"CLBloomEffect", + @"CLGloomEffect", + @"CLPosterizeEffect", + @"CLPixellateEffect", + ]; + return [effects indexOfObject:NSStringFromClass(self)]; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLEffectBase_DefaultTitle" withDefault:@"None"]; +} + ++ (BOOL)isAvailable +{ + return YES; +} + ++ (NSDictionary*)optionalInfo +{ + return nil; +} + +#pragma mark- + +- (id)initWithSuperView:(UIView*)superview imageViewFrame:(CGRect)frame toolInfo:(CLImageToolInfo*)info +{ + self = [super init]; + if(self){ + self.toolInfo = info; + } + return self; +} + +- (void)cleanup +{ + +} + +- (BOOL)needsThumbnailPreview +{ + return YES; +} + +- (UIImage*)applyEffect:(UIImage*)image +{ + return image; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h new file mode 100644 index 0000000..dc215e0 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h @@ -0,0 +1,15 @@ +// +// CLEffectTool.h +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +#import "CLEffectBase.h" + +@interface CLEffectTool : CLImageToolBase + + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.m new file mode 100644 index 0000000..29dd398 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.m @@ -0,0 +1,190 @@ +// +// CLEffectTool.m +// +// Created by sho yakushiji on 2013/10/23. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLEffectTool.h" + + +@interface CLEffectTool() +@property (nonatomic, strong) UIView *selectedMenu; +@property (nonatomic, strong) CLEffectBase *selectedEffect; +@end + + +@implementation CLEffectTool +{ + UIImage *_originalImage; + UIImage *_thumbnailImage; + + UIScrollView *_menuScroll; + UIActivityIndicatorView *_indicatorView; +} + ++ (NSArray*)subtools +{ + return [CLImageToolInfo toolsWithToolClass:[CLEffectBase class]]; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLEffectTool_DefaultTitle" withDefault:@"Effect"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +#pragma mark- + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + _thumbnailImage = [_originalImage resize:self.editor.imageView.frame.size]; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + + [self setEffectMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.selectedEffect cleanup]; + [_indicatorView removeFromSuperview]; + + [self.editor resetZoomScaleWithAnimated:YES]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self->_indicatorView = [CLImageEditorTheme indicatorView]; + self->_indicatorView.center = self.editor.view.center; + [self.editor.view addSubview:self->_indicatorView]; + [self->_indicatorView startAnimating]; + }); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self.selectedEffect applyEffect:self->_originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (void)setEffectMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + for(CLImageToolInfo *info in self.toolInfo.sortedSubtools){ + if(!info.available){ + continue; + } + + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedMenu:) toolInfo:info]; + [_menuScroll addSubview:view]; + x += W; + + if(self.selectedMenu==nil){ + self.selectedMenu = view; + } + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedMenu:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; + + self.selectedMenu = view; +} + +- (void)setSelectedMenu:(UIView *)selectedMenu +{ + if(selectedMenu != _selectedMenu){ + _selectedMenu.backgroundColor = [UIColor clearColor]; + _selectedMenu = selectedMenu; + _selectedMenu.backgroundColor = [CLImageEditorTheme toolbarSelectedButtonColor]; + + Class effectClass = NSClassFromString(_selectedMenu.toolInfo.toolName); + self.selectedEffect = [[effectClass alloc] initWithSuperView:self.editor.imageView.superview imageViewFrame:self.editor.imageView.frame toolInfo:_selectedMenu.toolInfo]; + } +} + +- (void)setSelectedEffect:(CLEffectBase *)selectedEffect +{ + if(selectedEffect != _selectedEffect){ + [_selectedEffect cleanup]; + _selectedEffect = selectedEffect; + _selectedEffect.delegate = self; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self buildThumbnailImage]; + }); + } +} + +- (void)buildThumbnailImage +{ + UIImage *image; + if(self.selectedEffect.needsThumbnailPreview){ + image = [self.selectedEffect applyEffect:_thumbnailImage]; + } + else{ + image = [self.selectedEffect applyEffect:_originalImage]; + } + [self.editor.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; +} + +#pragma mark- CLEffect delegate + +- (void)effectParameterDidChange:(CLEffectBase *)effect +{ + if(effect == self.selectedEffect){ + static BOOL inProgress = NO; + + if(inProgress){ return; } + inProgress = YES; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [self buildThumbnailImage]; + inProgress = NO; + }); + } +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h new file mode 100644 index 0000000..3142c2d --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h @@ -0,0 +1,22 @@ +// +// CLFilterBase.h +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "../ToolSettings/CLImageToolSettings.h" + +@protocol CLFilterBaseProtocol + +@required ++ (UIImage*)applyFilter:(UIImage*)image; + +@end + + +@interface CLFilterBase : NSObject + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.m new file mode 100644 index 0000000..3406dc7 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.m @@ -0,0 +1,222 @@ +// +// CLFilterBase.m +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLFilterBase.h" + +@implementation CLFilterBase + ++ (NSString*)defaultIconImagePath +{ + return nil; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (CGFloat)defaultDockedNumber +{ + return 0; +} + ++ (NSString*)defaultTitle +{ + return @"CLFilterBase"; +} + ++ (BOOL)isAvailable +{ + return NO; +} + ++ (NSDictionary*)optionalInfo +{ + return nil; +} + +#pragma mark- + ++ (UIImage*)applyFilter:(UIImage*)image +{ + return image; +} + +@end + + + + +#pragma mark- Default Filters + + +@interface CLDefaultEmptyFilter : CLFilterBase + +@end + +@implementation CLDefaultEmptyFilter + ++ (NSDictionary*)defaultFilterInfo +{ + NSDictionary *defaultFilterInfo = nil; + if(defaultFilterInfo==nil){ + defaultFilterInfo = + @{ + @"CLDefaultEmptyFilter" : @{@"name":@"CLDefaultEmptyFilter", @"title":[CLImageEditorTheme localizedString:@"CLDefaultEmptyFilter_DefaultTitle" withDefault:@"None"], @"version":@(0.0), @"dockedNum":@(0.0)}, + @"CLDefaultLinearFilter" : @{@"name":@"CISRGBToneCurveToLinear", @"title":[CLImageEditorTheme localizedString:@"CLDefaultLinearFilter_DefaultTitle" withDefault:@"Linear"], @"version":@(7.0), @"dockedNum":@(1.0)}, + @"CLDefaultVignetteFilter" : @{@"name":@"CIVignetteEffect", @"title":[CLImageEditorTheme localizedString:@"CLDefaultVignetteFilter_DefaultTitle" withDefault:@"Vignette"], @"version":@(7.0), @"dockedNum":@(2.0)}, + @"CLDefaultInstantFilter" : @{@"name":@"CIPhotoEffectInstant", @"title":[CLImageEditorTheme localizedString:@"CLDefaultInstantFilter_DefaultTitle" withDefault:@"Instant"], @"version":@(7.0), @"dockedNum":@(3.0)}, + @"CLDefaultProcessFilter" : @{@"name":@"CIPhotoEffectProcess", @"title":[CLImageEditorTheme localizedString:@"CLDefaultProcessFilter_DefaultTitle" withDefault:@"Process"], @"version":@(7.0), @"dockedNum":@(4.0)}, + @"CLDefaultTransferFilter" : @{@"name":@"CIPhotoEffectTransfer", @"title":[CLImageEditorTheme localizedString:@"CLDefaultTransferFilter_DefaultTitle" withDefault:@"Transfer"], @"version":@(7.0), @"dockedNum":@(5.0)}, + @"CLDefaultSepiaFilter" : @{@"name":@"CISepiaTone", @"title":[CLImageEditorTheme localizedString:@"CLDefaultSepiaFilter_DefaultTitle" withDefault:@"Sepia"], @"version":@(5.0), @"dockedNum":@(6.0)}, + @"CLDefaultChromeFilter" : @{@"name":@"CIPhotoEffectChrome", @"title":[CLImageEditorTheme localizedString:@"CLDefaultChromeFilter_DefaultTitle" withDefault:@"Chrome"], @"version":@(7.0), @"dockedNum":@(7.0)}, + @"CLDefaultFadeFilter" : @{@"name":@"CIPhotoEffectFade", @"title":[CLImageEditorTheme localizedString:@"CLDefaultFadeFilter_DefaultTitle" withDefault:@"Fade"], @"version":@(7.0), @"dockedNum":@(8.0)}, + @"CLDefaultCurveFilter" : @{@"name":@"CILinearToSRGBToneCurve", @"title":[CLImageEditorTheme localizedString:@"CLDefaultCurveFilter_DefaultTitle" withDefault:@"Curve"], @"version":@(7.0), @"dockedNum":@(9.0)}, + @"CLDefaultTonalFilter" : @{@"name":@"CIPhotoEffectTonal", @"title":[CLImageEditorTheme localizedString:@"CLDefaultTonalFilter_DefaultTitle" withDefault:@"Tonal"], @"version":@(7.0), @"dockedNum":@(10.0)}, + @"CLDefaultNoirFilter" : @{@"name":@"CIPhotoEffectNoir", @"title":[CLImageEditorTheme localizedString:@"CLDefaultNoirFilter_DefaultTitle" withDefault:@"Noir"], @"version":@(7.0), @"dockedNum":@(11.0)}, + @"CLDefaultMonoFilter" : @{@"name":@"CIPhotoEffectMono", @"title":[CLImageEditorTheme localizedString:@"CLDefaultMonoFilter_DefaultTitle" withDefault:@"Mono"], @"version":@(7.0), @"dockedNum":@(12.0)}, + @"CLDefaultInvertFilter" : @{@"name":@"CIColorInvert", @"title":[CLImageEditorTheme localizedString:@"CLDefaultInvertFilter_DefaultTitle" withDefault:@"Invert"], @"version":@(6.0), @"dockedNum":@(13.0)}, + }; + } + return defaultFilterInfo; +} + ++ (id)defaultInfoForKey:(NSString*)key +{ + return self.defaultFilterInfo[NSStringFromClass(self)][key]; +} + ++ (NSString*)filterName +{ + return [self defaultInfoForKey:@"name"]; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [self defaultInfoForKey:@"title"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= [[self defaultInfoForKey:@"version"] floatValue]); +} + ++ (CGFloat)defaultDockedNumber +{ + return [[self defaultInfoForKey:@"dockedNum"] floatValue]; +} + +#pragma mark- + ++ (UIImage*)applyFilter:(UIImage *)image +{ + return [self filteredImage:image withFilterName:self.filterName]; +} + ++ (UIImage*)filteredImage:(UIImage*)image withFilterName:(NSString*)filterName +{ + if([filterName isEqualToString:@"CLDefaultEmptyFilter"]){ + return image; + } + + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:filterName keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + + if([filterName isEqualToString:@"CIVignetteEffect"]){ + // parameters for CIVignetteEffect + CGFloat R = MIN(image.size.width, image.size.height)*image.scale/2; + CIVector *vct = [[CIVector alloc] initWithX:image.size.width*image.scale/2 Y:image.size.height*image.scale/2]; + [filter setValue:vct forKey:@"inputCenter"]; + [filter setValue:[NSNumber numberWithFloat:0.9] forKey:@"inputIntensity"]; + [filter setValue:[NSNumber numberWithFloat:R] forKey:@"inputRadius"]; + } + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +@end + + + +@interface CLDefaultLinearFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultLinearFilter +@end + +@interface CLDefaultVignetteFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultVignetteFilter +@end + +@interface CLDefaultInstantFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultInstantFilter +@end + +@interface CLDefaultProcessFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultProcessFilter +@end + +@interface CLDefaultTransferFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultTransferFilter +@end + +@interface CLDefaultSepiaFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultSepiaFilter +@end + +@interface CLDefaultChromeFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultChromeFilter +@end + +@interface CLDefaultFadeFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultFadeFilter +@end + +@interface CLDefaultCurveFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultCurveFilter +@end + +@interface CLDefaultTonalFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultTonalFilter +@end + +@interface CLDefaultNoirFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultNoirFilter +@end + +@interface CLDefaultMonoFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultMonoFilter +@end + +@interface CLDefaultInvertFilter : CLDefaultEmptyFilter +@end +@implementation CLDefaultInvertFilter +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h new file mode 100644 index 0000000..1d1da0c --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h @@ -0,0 +1,12 @@ +// +// CLFilterTool.h +// +// Created by sho yakushiji on 2013/10/19. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLFilterTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.m new file mode 100644 index 0000000..954427a --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.m @@ -0,0 +1,131 @@ +// +// CLFilterTool.m +// +// Created by sho yakushiji on 2013/10/19. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLFilterTool.h" + +#import "CLFilterBase.h" + + +@implementation CLFilterTool +{ + UIImage *_originalImage; + + UIScrollView *_menuScroll; +} + ++ (NSArray*)subtools +{ + return [CLImageToolInfo toolsWithToolClass:[CLFilterBase class]]; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLFilterTool_DefaultTitle" withDefault:@"Filter"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + + [self setFilterMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + completionBlock(self.editor.imageView.image, nil, nil); +} + +#pragma mark- + +- (void)setFilterMenu +{ + CGFloat W = 70; + CGFloat x = 0; + + UIImage *iconThumbnail = [_originalImage aspectFill:CGSizeMake(50*[[UIScreen mainScreen] scale], 50*[[UIScreen mainScreen] scale])]; + + for(CLImageToolInfo *info in self.toolInfo.sortedSubtools){ + if(!info.available){ + continue; + } + + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, _menuScroll.height) target:self action:@selector(tappedFilterPanel:) toolInfo:info]; + [_menuScroll addSubview:view]; + x += W; + + if(view.iconImage==nil){ + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *iconImage = [self filteredImage:iconThumbnail withToolInfo:info]; + [view performSelectorOnMainThread:@selector(setIconImage:) withObject:iconImage waitUntilDone:NO]; + }); + } + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedFilterPanel:(UITapGestureRecognizer*)sender +{ + static BOOL inProgress = NO; + + if(inProgress){ return; } + inProgress = YES; + + UIView *view = sender.view; + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self filteredImage:self->_originalImage withToolInfo:view.toolInfo]; + [self.editor.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; + inProgress = NO; + }); +} + +- (UIImage*)filteredImage:(UIImage*)image withToolInfo:(CLImageToolInfo*)info +{ + @autoreleasepool { + Class filterClass = NSClassFromString(info.toolName); + if([(Class)filterClass conformsToProtocol:@protocol(CLFilterBaseProtocol)]){ + return [filterClass applyFilter:image]; + } + return nil; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.h new file mode 100644 index 0000000..9e36967 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.h @@ -0,0 +1,34 @@ +// +// CLImageToolBase.h +// +// Created by sho yakushiji on 2013/10/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "../ViewController/_CLImageEditorViewController.h" +#import "ToolSettings/CLImageToolSettings.h" + + +static const CGFloat kCLImageToolAnimationDuration = 0.3; +static const CGFloat kCLImageToolFadeoutDuration = 0.2; + + + +@interface CLImageToolBase : NSObject +{ + +} +@property (nonatomic, weak) _CLImageEditorViewController *editor; +@property (nonatomic, weak) CLImageToolInfo *toolInfo; + +- (id)initWithImageEditor:(_CLImageEditorViewController*)editor withToolInfo:(CLImageToolInfo*)info; + +- (void)setup; +- (void)cleanup; +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock; + +- (UIImage*)imageForKey:(NSString*)key defaultImageName:(NSString*)defaultImageName; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.m new file mode 100644 index 0000000..e308ef2 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.m @@ -0,0 +1,93 @@ +// +// CLImageToolBase.m +// +// Created by sho yakushiji on 2013/10/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@implementation CLImageToolBase + +- (id)initWithImageEditor:(_CLImageEditorViewController*)editor withToolInfo:(CLImageToolInfo*)info +{ + self = [super init]; + if(self){ + self.editor = editor; + self.toolInfo = info; + } + return self; +} + ++ (NSString*)defaultIconImagePath +{ + CLImageEditorTheme *theme = [CLImageEditorTheme theme]; + return [NSString stringWithFormat:@"%@/%@/%@/icon.png", CLImageEditorTheme.bundle.bundlePath, NSStringFromClass([self class]), theme.toolIconColor]; +} + ++ (CGFloat)defaultDockedNumber +{ + // Image tools are sorted according to the dockedNumber in tool bar. + // Override point for tool bar customization + NSArray *tools = @[ + @"CLFilterTool", + @"CLAdjustmentTool", + @"CLEffectTool", + @"CLBlurTool", + @"CLRotateTool", + @"CLClippingTool", + @"CLToneCurveTool", + ]; + return [tools indexOfObject:NSStringFromClass(self)]; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return @"DefaultTitle"; +} + ++ (BOOL)isAvailable +{ + return NO; +} + ++ (NSDictionary*)optionalInfo +{ + return nil; +} + +#pragma mark- + +- (void)setup +{ + +} + +- (void)cleanup +{ + +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + completionBlock(self.editor.imageView.image, nil, nil); +} + +- (UIImage*)imageForKey:(NSString*)key defaultImageName:(NSString*)defaultImageName +{ + NSString *iconName = self.toolInfo.optionalInfo[key]; + + if(iconName.length>0){ + return [UIImage imageNamed:iconName]; + } + else{ + return [CLImageEditorTheme imageNamed:[self class] image:defaultImageName]; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h new file mode 100644 index 0000000..bdadf64 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h @@ -0,0 +1,12 @@ +// +// CLRotateTool.h +// +// Created by sho yakushiji on 2013/11/08. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLRotateTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.m new file mode 100644 index 0000000..9493081 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.m @@ -0,0 +1,390 @@ +// +// CLRotateTool.m +// +// Created by sho yakushiji on 2013/11/08. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLRotateTool.h" + +static NSString* const kCLRotateToolRotateIconName = @"rotateIconAssetsName"; +static NSString* const kCLRotateToolFlipHorizontalIconName = @"flipHorizontalIconAssetsName"; +static NSString* const kCLRotateToolFlipVerticalIconName = @"flipVerticalIconAssetsName"; +static NSString* const kCLRotateToolFineRotationEnabled = @"fineRotationEnabled"; +static NSString* const kCLRotateToolCropRotate = @"cropRotateEnabled"; + + +@interface CLRotatePanel : UIView +@property(nonatomic, strong) UIColor *bgColor; +@property(nonatomic, strong) UIColor *gridColor; +@property(nonatomic, assign) CGRect gridRect; +- (id)initWithSuperview:(UIView*)superview frame:(CGRect)frame; +@end + + + + + +@implementation CLRotateTool +{ + UISlider *_rotateSlider; + UIScrollView *_menuScroll; + CGRect _initialRect; + + BOOL _executed; + + BOOL _fineRotationEnabled; + + CLRotatePanel *_gridView; + UIImageView *_rotateImageView; + + CGFloat _rotationArg; + CGFloat _orientation; + NSInteger _flipState1; + NSInteger _flipState2; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLRotateTool_DefaultTitle" withDefault:@"Rotate"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLRotateToolRotateIconName : @"", + kCLRotateToolFlipHorizontalIconName : @"", + kCLRotateToolFlipVerticalIconName : @"", + kCLRotateToolFineRotationEnabled : @NO, + kCLRotateToolCropRotate : @NO + }; +} + +#pragma mark- + +- (void)setup +{ + _executed = NO; + + _fineRotationEnabled = [self.toolInfo.optionalInfo[kCLRotateToolFineRotationEnabled] boolValue]; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _initialRect = self.editor.imageView.frame; + + _rotationArg = 0; + _flipState1 = 0; + _flipState2 = 0; + + _gridView = [[CLRotatePanel alloc] initWithSuperview:self.editor.imageView.superview frame:self.editor.imageView.frame]; + _gridView.backgroundColor = [UIColor clearColor]; + _gridView.bgColor = [self.editor.view.backgroundColor colorWithAlphaComponent:0.8]; + _gridView.gridColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.8]; + _gridView.clipsToBounds = NO; + + float sliderMaxima = _fineRotationEnabled ? 0.5 : 1; + _rotateSlider = [self sliderWithValue:0 minimumValue:-sliderMaxima maximumValue:sliderMaxima]; + _rotateSlider.superview.center = CGPointMake(self.editor.view.width/2, self.editor.menuView.top-30); + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + [self setMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + } + completion:^(BOOL finished) { + self->_rotateImageView = [[UIImageView alloc] initWithFrame:self->_initialRect]; + self->_rotateImageView.image = self.editor.imageView.image; + [self->_gridView.superview insertSubview:self->_rotateImageView belowSubview:self->_gridView]; + self.editor.imageView.hidden = YES; + }]; +} + +- (void)cleanup +{ + [_rotateSlider.superview removeFromSuperview]; + [_gridView removeFromSuperview]; + + if(_executed){ + [self.editor resetZoomScaleWithAnimated:NO]; + [self.editor fixZoomScaleWithAnimated:NO]; + + _rotateImageView.transform = CGAffineTransformIdentity; + _rotateImageView.frame = self.editor.imageView.frame; + _rotateImageView.image = self.editor.imageView.image; + } + [self.editor resetZoomScaleWithAnimated:NO]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + + self->_rotateImageView.transform = CGAffineTransformIdentity; + self->_rotateImageView.frame = self.editor.imageView.frame; + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + [self->_rotateImageView removeFromSuperview]; + self.editor.imageView.hidden = NO; + }]; +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + UIActivityIndicatorView *indicator = [CLImageEditorTheme indicatorView]; + indicator.center = CGPointMake(self->_gridView.width/2, self->_gridView.height/2); + [self->_gridView addSubview:indicator]; + [indicator startAnimating]; + }); + + UIImage *originalImage = self.editor.imageView.image; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImage:originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + self->_executed = YES; + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (void)setMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSArray *_menu = @[ + @{@"title":[CLImageEditorTheme localizedString:@"CLRotateTool_MenuItemRotateTitle" withDefault:@" "], @"icon":[self imageForKey:kCLRotateToolRotateIconName defaultImageName:@"btn_rotate.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLRotateTool_MenuItemFlipTitle1" withDefault:@" "], @"icon":[self imageForKey:kCLRotateToolFlipHorizontalIconName defaultImageName:@"btn_flip1.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLRotateTool_MenuItemFlipTitle2" withDefault:@" "], @"icon":[self imageForKey:kCLRotateToolFlipVerticalIconName defaultImageName:@"btn_flip2.png"]}, + ]; + + NSInteger tag = 0; + for(NSDictionary *obj in _menu){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedMenu:) toolInfo:nil]; + view.tag = tag++; + view.iconImage = obj[@"icon"]; + view.title = obj[@"title"]; + + [_menuScroll addSubview:view]; + x += W; + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedMenu:(UITapGestureRecognizer*)sender +{ + sender.view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + sender.view.alpha = 1; + } + ]; + + switch (sender.view.tag) { + case 0: + { + if (_fineRotationEnabled) { + _orientation = _rotateSlider.value < 0 ? _orientation : _orientation + 1; + } else { + _orientation = (int)floorf((_rotateSlider.value + 1) * 2) + 1; + } + + if(_orientation > 4){ _orientation -= 4; } + _rotateSlider.value = _fineRotationEnabled ? 0 : (_orientation / 2) - 1; + + _gridView.hidden = YES; + break; + } + case 1: + _flipState1 = (_flipState1==0) ? 1 : 0; + break; + case 2: + _flipState2 = (_flipState2==0) ? 1 : 0; + break; + default: + break; + } + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + [self rotateStateDidChange]; + } + completion:^(BOOL finished) { + self->_gridView.hidden = NO; + } + ]; +} + +- (UISlider*)sliderWithValue:(CGFloat)value minimumValue:(CGFloat)min maximumValue:(CGFloat)max +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(10, 0, 260, 30)]; + + UIView *container = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, slider.height)]; + container.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; + container.layer.cornerRadius = slider.height/2; + + slider.continuous = YES; + [slider addTarget:self action:@selector(sliderDidChange:) forControlEvents:UIControlEventValueChanged]; + + slider.maximumValue = max; + slider.minimumValue = min; + slider.value = value; + + [container addSubview:slider]; + [self.editor.view addSubview:container]; + + return slider; +} + +- (void)sliderDidChange:(UISlider*)slider +{ + [self rotateStateDidChange]; +} + +- (CATransform3D)rotateTransform:(CATransform3D)initialTransform clockwise:(BOOL)clockwise +{ + __block CGFloat rotateValue = 0; + safe_dispatch_sync_main(^{ + rotateValue = self->_rotateSlider.value; + }); + + CGFloat orientationOffset = _fineRotationEnabled ? _orientation * M_PI_2 : 0; + _rotationArg = orientationOffset + rotateValue*(_fineRotationEnabled ? M_PI_4 : M_PI); + if(!clockwise){ + _rotationArg *= -1; + } + + CATransform3D transform = initialTransform; + transform = CATransform3DRotate(transform, _rotationArg, 0, 0, 1); + transform = CATransform3DRotate(transform, _flipState1*M_PI, 0, 1, 0); + transform = CATransform3DRotate(transform, _flipState2*M_PI, 1, 0, 0); + + return transform; +} + +- (void)rotateStateDidChange +{ + CATransform3D transform = [self rotateTransform:CATransform3DIdentity clockwise:YES]; + CGFloat Wnew = fabs(_initialRect.size.width * cos(_rotationArg)) + fabs(_initialRect.size.height * sin(_rotationArg)); + CGFloat Hnew = fabs(_initialRect.size.width * sin(_rotationArg)) + fabs(_initialRect.size.height * cos(_rotationArg)); + + BOOL cropRotateEnabled = [self.toolInfo.optionalInfo[kCLRotateToolCropRotate] boolValue]; + CGFloat Rw = _gridView.width / Wnew; + CGFloat Rh = _gridView.height / Hnew; + CGFloat scale = MIN(Rw, Rh) * 0.95; + if (cropRotateEnabled) { + Rw = _initialRect.size.width / Wnew; + Rh = _initialRect.size.height / Hnew; + scale = 1 / MIN(Rw, Rh); + } + + + transform = CATransform3DScale(transform, scale, scale, 1); + _rotateImageView.layer.transform = transform; + + if (!cropRotateEnabled) { + _gridView.gridRect = _rotateImageView.frame; + } +} + +- (UIImage*)buildImage:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIAffineTransform" keysAndValues:kCIInputImageKey, ciImage, nil]; + + [filter setDefaults]; + CGAffineTransform transform = CATransform3DGetAffineTransform([self rotateTransform:CATransform3DIdentity clockwise:NO]); + [filter setValue:[NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)] forKey:@"inputTransform"]; + + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + BOOL cropRotateEnabled = [self.toolInfo.optionalInfo[kCLRotateToolCropRotate] boolValue]; + if (cropRotateEnabled) { + result = [self cropAdjustImage:result]; + } + + return result; +} + +- (UIImage *)cropAdjustImage:(UIImage *)image +{ + CGFloat Wnew = fabs(_initialRect.size.width * cos(_rotationArg)) + fabs(_initialRect.size.height * sin(_rotationArg)); + CGFloat Hnew = fabs(_initialRect.size.width * sin(_rotationArg)) + fabs(_initialRect.size.height * cos(_rotationArg)); + + CGFloat Rw = _initialRect.size.width / Wnew; + CGFloat Rh = _initialRect.size.height / Hnew; + CGFloat scale = MIN(Rw, Rh); + + CGSize originalFrame = self.editor.imageView.image.size; + CGFloat finalW = originalFrame.width * scale; + CGFloat finalH = originalFrame.height * scale; + + CGFloat deltaX = (image.size.width - finalW) / 2.0; + CGFloat deltaY = (image.size.height - finalH) / 2.0; + CGRect newFrame = CGRectMake(deltaX, deltaY, finalW, finalH); + UIImage *croppedImage = [image crop:newFrame]; + + return croppedImage; +} + +@end + + + + + + + +@implementation CLRotatePanel + +- (id)initWithSuperview:(UIView*)superview frame:(CGRect)frame +{ + self = [super initWithFrame:superview.bounds]; + if(self){ + self.gridRect = frame; + [superview addSubview:self]; + } + return self; +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.gridRect; + + CGContextSetStrokeColorWithColor(context, self.gridColor.CGColor); + CGContextStrokeRect(context, rct); +} + +- (void)setGridRect:(CGRect)gridRect +{ + _gridRect = gridRect; + [self setNeedsDisplay]; +} +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h new file mode 100644 index 0000000..9345717 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h @@ -0,0 +1,12 @@ +// +// CLToneCurveTool.h +// +// Created by sho yakushiji on 2013/10/24. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLToneCurveTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.m new file mode 100644 index 0000000..492dd34 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.m @@ -0,0 +1,470 @@ +// +// CLToneCurveTool.m +// +// Created by sho yakushiji on 2013/10/24. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLToneCurveTool.h" + +#import "CLSplineInterpolator.h" + +static NSString* const kCLToneCurveToolArrowIconName = @"arrowIconAssetsName"; +static NSString* const kCLToneCurveToolResetIconName = @"resetIconAssetsName"; + + +@protocol CLToneCurveGridDelegate; + +@interface CLToneCurveView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) UIColor *gridColor; +@property (nonatomic, strong) UIColor *pointColor; +@property (nonatomic, strong) UIColor *lineColor; +@property (nonatomic, assign) BOOL continuous; + +@property (nonatomic, readonly) CIVector *point0; +@property (nonatomic, readonly) CIVector *point1; +@property (nonatomic, readonly) CIVector *point2; +@property (nonatomic, readonly) CIVector *point3; +@property (nonatomic, readonly) CIVector *point4; + +- (id)initWithSuperview:(UIView*)superview frame:(CGRect)frame; +- (void)resetPoints; + +@end + +@protocol CLToneCurveGridDelegate +@required +- (void)toneCurveDidChange:(CLToneCurveView*)view; +@end + + +@interface CLToneCurveTool() + +@end + +@implementation CLToneCurveTool +{ + UIImage *_originalImage; + UIImage *_thumbnailImage; + + UIView *_menuContainer; + CLToneCurveView *_tonecurveView; + UIActivityIndicatorView *_indicatorView; +} + +#pragma mark- + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLToneCurveTool_DefaultTitle" withDefault:@"ToneCurve"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLToneCurveToolArrowIconName : @"", + kCLToneCurveToolResetIconName : @"", + }; +} + +#pragma mark- + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + _thumbnailImage = [_originalImage resize:self.editor.imageView.frame.size]; + + self.editor.imageView.image = _thumbnailImage; + + _menuContainer = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.editor.view.width, 280)]; + _menuContainer.backgroundColor = [UIColor colorWithWhite:1 alpha:0.6]; + [self.editor.view addSubview:_menuContainer]; + + // Adjust for iPhone X + if (@available(iOS 11.0, *)) { + UIEdgeInsets theInsets = [UIApplication sharedApplication].keyWindow.rootViewController.view.safeAreaInsets; + _menuContainer.height += theInsets.bottom; + } + _menuContainer.bottom = self.editor.view.height; + + _tonecurveView = [[CLToneCurveView alloc] initWithSuperview:_menuContainer frame:CGRectMake(10, 20, _menuContainer.width-80, 240)]; + _tonecurveView.delegate = self; + _tonecurveView.backgroundColor = [UIColor clearColor]; + _tonecurveView.gridColor = [UIColor colorWithWhite:0 alpha:0.2]; + _tonecurveView.pointColor = [UIColor colorWithWhite:0.5 alpha:1]; + _tonecurveView.lineColor = [UIColor colorWithWhite:0.5 alpha:1]; + _tonecurveView.continuous = NO; + + UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(_tonecurveView.right + 20, 15, 30, 30); + [btn addTarget:self action:@selector(pushedHideBtn:) forControlEvents:UIControlEventTouchUpInside]; + + [btn setImage:[self imageForKey:kCLToneCurveToolArrowIconName defaultImageName:@"btn_arrow.png"] forState:UIControlStateNormal]; + [_menuContainer addSubview:btn]; + + btn = [UIButton buttonWithType:UIButtonTypeCustom]; + btn.frame = CGRectMake(_tonecurveView.right + 20, _tonecurveView.bottom - 30, 30, 30); + [btn addTarget:self action:@selector(pushedResetBtn:) forControlEvents:UIControlEventTouchUpInside]; + + [btn setImage:[self imageForKey:kCLToneCurveToolResetIconName defaultImageName:@"btn_reset.png"] forState:UIControlStateNormal]; + [_menuContainer addSubview:btn]; + + _menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuContainer.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [_indicatorView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformTranslate(self->_menuContainer.transform, 0, self.editor.view.height-self->_menuContainer.top); + } + completion:^(BOOL finished) { + [self->_menuContainer removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void(^)(UIImage *image, NSError *error, NSDictionary *userInfo))completionBlock +{ + dispatch_async(dispatch_get_main_queue(), ^{ + self->_indicatorView = [CLImageEditorTheme indicatorView]; + self->_indicatorView.center = self.editor.view.center; + [self.editor.view addSubview:self->_indicatorView]; + [self->_indicatorView startAnimating]; + }); + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self filteredImage:self->_originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (void)toneCurveDidChange:(CLToneCurveView *)view +{ + static BOOL inProgress = NO; + + if(inProgress){ return; } + inProgress = YES; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self filteredImage:self->_thumbnailImage]; + [self.editor.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:NO]; + inProgress = NO; + }); +} + +- (UIImage*)filteredImage:(UIImage*)image +{ + CIImage *ciImage = [[CIImage alloc] initWithImage:image]; + CIFilter *filter = [CIFilter filterWithName:@"CIToneCurve" keysAndValues:kCIInputImageKey, ciImage, nil]; + + //NSLog(@"%@", [filter attributes]); + + [filter setDefaults]; + [filter setValue:_tonecurveView.point0 forKey:@"inputPoint0"]; + [filter setValue:_tonecurveView.point1 forKey:@"inputPoint1"]; + [filter setValue:_tonecurveView.point2 forKey:@"inputPoint2"]; + [filter setValue:_tonecurveView.point3 forKey:@"inputPoint3"]; + [filter setValue:_tonecurveView.point4 forKey:@"inputPoint4"]; + + CIContext *context = [CIContext contextWithOptions:@{kCIContextUseSoftwareRenderer : @(NO)}]; + CIImage *outputImage = [filter outputImage]; + CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]]; + + UIImage *result = [UIImage imageWithCGImage:cgImage]; + + CGImageRelease(cgImage); + + return result; +} + +- (void)pushedHideBtn:(UIButton*)sender +{ + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + if(CGAffineTransformIsIdentity(self->_menuContainer.transform)){ + self->_menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuContainer.top-self.editor.menuView.height); + sender.transform = CGAffineTransformMakeRotation(M_PI); + self->_tonecurveView.userInteractionEnabled = NO; + } + else{ + self->_menuContainer.transform = CGAffineTransformIdentity; + sender.transform = CGAffineTransformIdentity; + self->_tonecurveView.userInteractionEnabled = YES; + } + } + ]; +} + +- (void)pushedResetBtn:(UIButton*)sender +{ + [_tonecurveView resetPoints]; + + CABasicAnimation* rotation; + rotation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; + rotation.toValue = [NSNumber numberWithFloat:-M_PI*2.0]; + rotation.duration = kCLImageToolAnimationDuration; + rotation.cumulative = YES; + rotation.repeatCount = 1; + rotation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; + [sender.layer addAnimation:rotation forKey:@"rotationAnimation"]; +} + +@end + + + +#pragma mark- UI components + + +@interface CLControlPoint : UIView + +@property (nonatomic, strong) CIVector *controlPoint; +@property (nonatomic, strong) UIColor *bgColor; +@property (nonatomic, assign) CGRect layoutFrame; + +@end + +@implementation CLControlPoint + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x = rct.size.width/2-rct.size.width/6; + rct.origin.y = rct.size.height/2-rct.size.height/6; + rct.size.width /= 3; + rct.size.height /= 3; + + CGContextSetFillColorWithColor(context, self.bgColor.CGColor); + CGContextFillEllipseInRect(context, rct); +} + +- (void)setControlPoint:(CIVector *)controlPoint +{ + if(controlPoint != _controlPoint){ + _controlPoint = controlPoint; + self.center = CGPointMake(_controlPoint.X * self.layoutFrame.size.width + self.layoutFrame.origin.x, (1 - _controlPoint.Y) * self.layoutFrame.size.height + self.layoutFrame.origin.y); + } +} + +- (void)setBgColor:(UIColor *)bgColor +{ + _bgColor = bgColor; + [self setNeedsDisplay]; +} + +@end + + + +@implementation CLToneCurveView +{ + NSArray *_controlPoints; +} + +- (CLControlPoint*)controlPoint +{ + CLControlPoint *view = [[CLControlPoint alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; + view.backgroundColor = [UIColor clearColor]; + view.layoutFrame = self.frame; + + UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panControlPoint:)]; + pan.maximumNumberOfTouches = 1; + [view addGestureRecognizer:pan]; + + [self.superview addSubview:view]; + + return view; +} + +- (id)initWithSuperview:(UIView *)superview frame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + [superview addSubview:self]; + + NSMutableArray *tmp = [NSMutableArray array]; + for(NSInteger i=0; i<5; ++i){ + [tmp addObject:[self controlPoint]]; + } + _controlPoints = [tmp copy]; + + [self resetPoints]; + } + return self; +} + +- (void)resetPoints +{ + for(NSInteger i=0; i<_controlPoints.count; ++i){ + CGFloat x = i/(CGFloat)(_controlPoints.count-1); + CLControlPoint *point = _controlPoints[i]; + point.controlPoint = [CIVector vectorWithCGPoint:CGPointMake(x, x)]; + } + + [self setNeedsDisplay]; + [self.delegate toneCurveDidChange:self]; +} + +- (void)setPointColor:(UIColor *)pointColor +{ + for(CLControlPoint *view in _controlPoints){ + view.bgColor = pointColor; + } +} + +- (void)setUserInteractionEnabled:(BOOL)userInteractionEnabled +{ + [super setUserInteractionEnabled:userInteractionEnabled]; + for(CLControlPoint *view in _controlPoints){ + view.userInteractionEnabled = userInteractionEnabled; + } +} + +- (CIVector*)point0 +{ + return [_controlPoints[0] controlPoint]; +} + +- (CIVector*)point1 +{ + return [_controlPoints[1] controlPoint]; +} + +- (CIVector*)point2 +{ + return [_controlPoints[2] controlPoint]; +} + +- (CIVector*)point3 +{ + return [_controlPoints[3] controlPoint]; +} + +- (CIVector*)point4 +{ + return [_controlPoints[4] controlPoint]; +} + +- (void)setControlPoint:(CGPoint)point atIndex:(NSInteger)index +{ + if(index>=0 && index < _controlPoints.count){ + CLControlPoint *prev = (index==0) ? nil : _controlPoints[index-1]; + CLControlPoint *target = _controlPoints[index]; + CLControlPoint *next = (index+1<_controlPoints.count) ? _controlPoints[index+1] : nil; + + CGFloat left_limit = (prev==nil) ? 0 : prev.controlPoint.X + 0.05; + CGFloat right_limit = (next==nil) ? 1 : next.controlPoint.X - 0.05; + + point.x = MAX(left_limit, MIN(point.x, right_limit)); + point.y = MAX(0, MIN(1 - point.y, 1)); + + target.controlPoint = [CIVector vectorWithCGPoint:point]; + } +} + +- (CGPoint)convertControlPointToViewPoint:(CIVector*)controlPoint +{ + CGFloat X = MAX(0, MIN(controlPoint.X, 1)); + CGFloat Y = MAX(0, MIN(controlPoint.Y, 1)); + return CGPointMake(X * self.frame.size.width, (1 - Y) * self.frame.size.height); +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x += 1; + rct.origin.y += 1; + rct.size.width -= 2; + rct.size.height -= 2; + + // Draw grid + + CGContextSetStrokeColorWithColor(context, self.gridColor.CGColor); + CGContextSetLineWidth(context, 1); + + CGContextBeginPath(context); + CGFloat dW = 0; + for(int i=0;i<5;++i){ + CGContextMoveToPoint(context, rct.origin.x+dW, rct.origin.y); + CGContextAddLineToPoint(context, rct.origin.x+dW, rct.origin.y+rct.size.height); + dW += rct.size.width/4; + } + + dW = 0; + for(int i=0;i<5;++i){ + CGContextMoveToPoint(context, rct.origin.x, rct.origin.y+dW); + CGContextAddLineToPoint(context, rct.origin.x+rct.size.width, rct.origin.y+dW); + dW += rct.size.height/4; + } + CGContextStrokePath(context); + + // Draw spline curve: It would be different from the actual curve. + + NSMutableArray *points = [NSMutableArray array]; + for(CLControlPoint *view in _controlPoints){ [points addObject:view.controlPoint]; } + + CLSplineInterpolator *spline = [[CLSplineInterpolator alloc] initWithPoints:points]; + + UIBezierPath *curve = [UIBezierPath bezierPath]; + CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor); + [curve setLineWidth:1.0]; + + const NSInteger L = 100; + + [curve moveToPoint:[self convertControlPointToViewPoint:[CIVector vectorWithCGPoint:CGPointMake(0, self.point0.Y)]]]; + for(NSInteger i=0; i + +@interface CLCircleView : UIView + +@property (nonatomic, strong) UIColor *color; +@property (nonatomic, assign) CGFloat radius; + +@property (nonatomic, strong) UIColor *borderColor; +@property (nonatomic, assign) CGFloat borderWidth; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLCircleView.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLCircleView.m new file mode 100644 index 0000000..cfe6f18 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLCircleView.m @@ -0,0 +1,69 @@ +// +// CLCircleView.m +// +// Created by sho yakushiji on 2013/12/11. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLCircleView.h" + +@implementation CLCircleView + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.backgroundColor = [UIColor clearColor]; + + self.color = [UIColor blackColor]; + self.radius = 1; + + self.borderColor = [UIColor clearColor]; + self.borderWidth = 0; + } + return self; +} + +- (void)drawRect:(CGRect)rect +{ + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect rct = self.bounds; + rct.origin.x = 0.5 * (rct.size.width - self.radius * rct.size.width); + rct.origin.y = 0.5 * (rct.size.height - self.radius * rct.size.height); + rct.size.width = self.radius * rct.size.width; + rct.size.height = self.radius * rct.size.height; + + CGContextSetFillColorWithColor(context, self.color.CGColor); + CGContextFillEllipseInRect(context, rct); + + CGContextSetStrokeColorWithColor(context, self.borderColor.CGColor); + CGContextSetLineWidth(context, self.borderWidth); + CGContextStrokeEllipseInRect(context, rct); +} + +- (void)setColor:(UIColor *)color +{ + if(color != _color){ + _color = color; + [self setNeedsDisplay]; + } +} + +- (void)setBorderColor:(UIColor *)borderColor +{ + if(borderColor != _borderColor){ + _borderColor = borderColor; + [self setNeedsDisplay]; + } +} + +- (void)setBorderWidth:(CGFloat)borderWidth +{ + if(borderWidth != _borderWidth){ + _borderWidth = borderWidth; + [self setNeedsDisplay]; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h new file mode 100644 index 0000000..c9c9971 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h @@ -0,0 +1,33 @@ +// +// CLColorPickerView.h +// +// Created by sho yakushiji on 2013/12/13. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLColorPickerViewDelegate; + +@interface CLColorPickerView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) UIColor *color; + +@property (nonatomic, readonly) CGFloat hueComponent; +@property (nonatomic, readonly) CGFloat saturationComponent; +@property (nonatomic, readonly) CGFloat brightnessComponent; +@property (nonatomic, readonly) CGFloat alphaComponent; + +- (void)setColorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha; + +@end + + + + +@protocol CLColorPickerViewDelegate +@optional +- (void)colorPickerView:(CLColorPickerView*)picker colorDidChange:(UIColor*)color; + +@end \ No newline at end of file diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.m new file mode 100644 index 0000000..6e7c55e --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.m @@ -0,0 +1,471 @@ +// +// CLColorPickerView.m +// +// Created by sho yakushiji on 2013/12/13. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLColorPickerView.h" + +#import "CLCircleView.h" +#import "UIView+Frame.h" + + +#pragma mark- Hue circle + +@protocol _CLHueCircleViewDelegate; + +@interface _CLHueCircleView : UIView +@property (nonatomic, weak) id<_CLHueCircleViewDelegate> delegate; +- (CGFloat)hue; +- (CGFloat)brightness; +- (UIColor*)color; +- (void)setColor:(UIColor*)color; +- (void)setColorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha; +- (void)setColorSaturation:(CGFloat)saturation; +- (void)setColorAlpha:(CGFloat)alpha; +@end + +@protocol _CLHueCircleViewDelegate +@optional +- (void)hueCircleViewDidChange:(_CLHueCircleView*)view; + +@end + + + +#pragma mark- CLColorPickerView + +@interface CLColorPickerView() +<_CLHueCircleViewDelegate> +@end + +@implementation CLColorPickerView +{ + _CLHueCircleView *_hueCircle; + + UISlider *_saturationSlider; + UISlider *_alphaSlider; +} + +- (id)init +{ + self = [self initWithFrame:CGRectMake(0, 0, 0, 180)]; + if(self){ + } + return self; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self customeInit]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self customeInit]; +} + +- (UISlider*)defaultSliderWithWidth:(CGFloat)width +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, width, 34)]; + slider.value = 1; + + slider.maximumTrackTintColor = [UIColor clearColor]; + slider.minimumTrackTintColor = [UIColor clearColor]; + [slider setMaximumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setMinimumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setThumbTintColor:[UIColor whiteColor]]; + slider.transform = CGAffineTransformMakeRotation(-M_PI_2); + + return slider; +} + +- (void)customeInit +{ + self.backgroundColor = [UIColor clearColor]; + + CGFloat W = self.height; + + _hueCircle = [[_CLHueCircleView alloc] initWithFrame:CGRectMake(0, 0, W, W)]; + _hueCircle.delegate = self; + [self addSubview:_hueCircle]; + + _saturationSlider = [self defaultSliderWithWidth:0.9*W]; + _saturationSlider.center = CGPointMake(W + 20, W/2); + [_saturationSlider addTarget:self action:@selector(saturationSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + _saturationSlider.backgroundColor = [UIColor colorWithPatternImage:[self saturationSliderBackground]]; + [self addSubview:_saturationSlider]; + + + _alphaSlider = [self defaultSliderWithWidth:0.9*W]; + _alphaSlider.center = CGPointMake(_saturationSlider.center.x + 40, W/2); + [_alphaSlider addTarget:self action:@selector(alphaSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + _alphaSlider.backgroundColor = [UIColor colorWithPatternImage:[self alphaSliderBackground]]; + [self addSubview:_alphaSlider]; + + self.width = _alphaSlider.center.x + 30; +} + +- (void)setColor:(UIColor *)color +{ + CGFloat H, S, B, A; + + if([color getHue:&H saturation:&S brightness:&B alpha:&A]){ + _saturationSlider.value = (B==0) ? 1 :S; + _alphaSlider.value = A; + } + else if([color getWhite:&S alpha:&A]){ + _saturationSlider.value = (S==0) ? 1 : 0; + _alphaSlider.value = A; + } + + _hueCircle.color = color; +} + +- (void)setColorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha +{ + _saturationSlider.value = (brightness==0) ? 1 :saturation; + _alphaSlider.value = alpha; + + [_hueCircle setColorWithHue:hue saturation:saturation brightness:brightness alpha:alpha]; +} + +- (UIColor*)color +{ + return _hueCircle.color; +} + +- (CGFloat)hueComponent +{ + return _hueCircle.hue; +} + +- (CGFloat)saturationComponent +{ + return _saturationSlider.value; +} + +- (CGFloat)brightnessComponent +{ + return _hueCircle.brightness; +} + +- (CGFloat)alphaComponent +{ + return _alphaSlider.value; +} + +- (void)setSaturationSliderColor +{ + _saturationSlider.backgroundColor = [UIColor colorWithPatternImage:[self saturationSliderBackground]]; +} + +- (void)setAlphaSliderColor +{ + _alphaSlider.backgroundColor = [UIColor colorWithPatternImage:[self alphaSliderBackground]]; +} + +- (void)saturationSliderDidChange:(UISlider*)sender +{ + [_hueCircle setColorSaturation:sender.value]; +} + +- (void)alphaSliderDidChange:(UISlider*)sender +{ + [_hueCircle setColorAlpha:sender.value]; +} + +- (UIImage*)saturationSliderBackground +{ + CGAffineTransform transform = _saturationSlider.transform; + _saturationSlider.transform = CGAffineTransformIdentity; + + UIGraphicsBeginImageContextWithOptions(_saturationSlider.frame.size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect frame = CGRectMake(5, (_saturationSlider.frame.size.height-10)/2, _saturationSlider.frame.size.width-10, 10); + CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:5].CGPath; + CGContextAddPath(context, path); + CGContextClip(context); + + UIColor *color = [UIColor colorWithHue:_hueCircle.hue saturation:1 brightness:_hueCircle.brightness alpha:1]; + + CGFloat r=0, g=0, b=0 , a=0; + if(![color getRed:&r green:&g blue:&b alpha:&a]){ + if([color getWhite:&r alpha:&a]){ + b = g = r; + } + } + + CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); + CGFloat components[] = { + 1.0f, 1.0f, 1.0f, 1.0f, // R, G, B, A + r, g, b, 1.0f + }; + CGFloat locations[] = { 0.0f, 1.0f }; + + size_t count = sizeof(components)/ (sizeof(CGFloat)* 4); + + CGPoint startPoint = CGPointMake(5, 0); + CGPoint endPoint = CGPointMake(_saturationSlider.frame.size.width-10, 0); + + CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpaceRef, components, locations, count); + + CGContextDrawLinearGradient(context, gradientRef, startPoint, endPoint, kCGGradientDrawsAfterEndLocation); + + + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + CGGradientRelease(gradientRef); + CGColorSpaceRelease(colorSpaceRef); + + UIGraphicsEndImageContext(); + + _saturationSlider.transform = transform; + + return tmp; +} + +- (UIImage*)alphaSliderBackground +{ + CGAffineTransform transform = _alphaSlider.transform; + _alphaSlider.transform = CGAffineTransformIdentity; + + UIGraphicsBeginImageContextWithOptions(_alphaSlider.frame.size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGRect frame = CGRectMake(5, (_alphaSlider.frame.size.height-10)/2, _alphaSlider.frame.size.width-10, 10); + CGPathRef path = [UIBezierPath bezierPathWithRoundedRect:frame cornerRadius:5].CGPath; + CGContextAddPath(context, path); + CGContextClip(context); + + CGContextSetFillColorWithColor(context, [[UIColor colorWithWhite:0.9 alpha:1] CGColor]); + CGContextBeginPath(context); + for(int i=0; i<_alphaSlider.frame.size.width/5; ++i){ + CGFloat x = i*5; + CGFloat y = _alphaSlider.frame.size.height/2 - (i%2)*5; + path = [UIBezierPath bezierPathWithRect:CGRectMake(x, y, 5, 5)].CGPath; + CGContextAddPath(context, path); + } + CGContextFillPath(context); + + + CGFloat r=0, g=0, b=0, a=0; + if(![_hueCircle.color getRed:&r green:&g blue:&b alpha:&a]){ + if([_hueCircle.color getWhite:&r alpha:&a]){ + b = g = r; + } + } + + + CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); + CGFloat components[] = { + r, g, b, 0.0f, + r, g, b, 1.0f + }; + CGFloat locations[] = { 0.0f, 1.0f }; + + size_t count = sizeof(components)/ (sizeof(CGFloat)* 4); + + CGPoint startPoint = CGPointMake(5, 0); + CGPoint endPoint = CGPointMake(_alphaSlider.frame.size.width-10, 0); + + CGGradientRef gradientRef = CGGradientCreateWithColorComponents(colorSpaceRef, components, locations, count); + + CGContextDrawLinearGradient(context, gradientRef, startPoint, endPoint, kCGGradientDrawsAfterEndLocation); + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + CGGradientRelease(gradientRef); + CGColorSpaceRelease(colorSpaceRef); + + UIGraphicsEndImageContext(); + + _alphaSlider.transform = transform; + + return tmp; +} + +- (void)hueCircleViewDidChange:(_CLHueCircleView*)view +{ + [self setSaturationSliderColor]; + [self setAlphaSliderColor]; + + if([self.delegate respondsToSelector:@selector(colorPickerView:colorDidChange:)]){ + [self.delegate colorPickerView:self colorDidChange:view.color]; + } +} + +@end + + + + + +@implementation _CLHueCircleView +{ + CLCircleView *_circleView; + CGFloat _saturation; + CGFloat _alpha; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + self.backgroundColor = [UIColor clearColor]; + + _saturation = 1; + _alpha = 1; + + _circleView = [[CLCircleView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + _circleView.radius = 0.6; + _circleView.borderColor = [UIColor colorWithWhite:0.2 alpha:1]; + _circleView.borderWidth = 3; + _circleView.color = [UIColor blackColor]; + _circleView.center = CGPointMake(frame.size.width/2, frame.size.width/2); + [self addSubview:_circleView]; + + [_circleView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(circleViewDidPan:)]]; + [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTap:)]]; + } + return self; +} + +- (void)setFrame:(CGRect)frame +{ + [super setFrame:frame]; + [self setNeedsDisplay]; +} + +- (CGFloat)hue +{ + CGPoint point = _circleView.center; + + point.x -= self.center.x; + point.y -= self.center.y; + CGFloat theta = atan2f(point.y, point.x); + + return (theta>0)?theta/(2*M_PI):1+theta/(2*M_PI); +} + +- (CGFloat)brightness +{ + CGPoint point = _circleView.center; + CGFloat R = self.circleRadius; + + point.x -= self.center.x; + point.y -= self.center.y; + + return MIN(1, sqrtf(point.x*point.x+point.y*point.y)/R); +} + +- (UIColor*)color +{ + return _circleView.color; +} + +- (void)setColor:(UIColor *)color +{ + CGFloat H, S, B, A; + + if([color getHue:&H saturation:&S brightness:&B alpha:&A]){ + [self setColorWithHue:H saturation:S brightness:B alpha:A]; + } + else if([color getWhite:&S alpha:&A]){ + [self setColorWithHue:0 saturation:S brightness:S alpha:A]; + } + [self setNeedsDisplay]; +} + +- (void)setColorWithHue:(CGFloat)hue saturation:(CGFloat)saturation brightness:(CGFloat)brightness alpha:(CGFloat)alpha +{ + _saturation = (brightness==0) ? 1 : saturation; + _alpha = alpha; + + CGFloat theta = hue * 2 * M_PI; + CGFloat R = self.circleRadius * brightness; + + _circleView.center = CGPointMake(R*cosf(theta) + self.center.x, R*sinf(theta) + self.center.y); + + [self colorStateDidChange]; +} + +- (void)setColorSaturation:(CGFloat)saturation +{ + _saturation = saturation; + [self setNeedsDisplay]; + [self colorStateDidChange]; +} + +- (void)setColorAlpha:(CGFloat)alpha +{ + _alpha = alpha; + [self setNeedsDisplay]; + [self colorStateDidChange]; +} + +- (CGFloat)circleRadius +{ + return 0.80 * MIN(self.frame.size.width, self.frame.size.height)/2; +} + +- (void)drawRect:(CGRect)rect +{ + CGFloat R = self.circleRadius; + CGContextRef context = UIGraphicsGetCurrentContext(); + CGContextSetLineWidth(context, 0.1 * R); + + CGFloat div = 320.0; + for(int i=0;i +#import "../../CLImageEditorTheme.h" + +#import "CLToolbarMenuItem.h" + +@interface CLImageEditorTheme (Private) + ++ (NSString*)bundleName; ++ (NSBundle*)bundle; ++ (UIImage*)imageNamed:(Class)path image:(NSString*)image; ++ (NSString*)localizedString:(NSString*)key withDefault:defaultValue; + ++ (UIColor*)backgroundColor; ++ (UIColor*)toolbarColor; ++ (UIColor*)toolbarTextColor; ++ (UIColor*)toolbarSelectedButtonColor; + ++ (UIFont*)toolbarTextFont; + ++ (UIActivityIndicatorView*)indicatorView; ++ (CLToolbarMenuItem*)menuItemWithFrame:(CGRect)frame target:(id)target action:(SEL)action toolInfo:(CLImageToolInfo*)toolInfo; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.m new file mode 100644 index 0000000..900191e --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.m @@ -0,0 +1,109 @@ +// +// CLImageEditorTheme+Private.m +// +// Created by sho yakushiji on 2013/12/07. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageEditorTheme+Private.h" + +#import "CLImageEditor.h" +#import "UIImage+Utility.h" + +@implementation CLImageEditorTheme (Private) + +#pragma mark- instance methods + +- (NSBundle*)bundle +{ + NSString *path = [[NSBundle mainBundle] pathForResource:self.bundleName ofType:@"bundle"]; + if(path){ + return [NSBundle bundleWithPath:path]; + } + + path = [[NSBundle bundleForClass:self.class] pathForResource:self.bundleName ofType:@"bundle"]; + if(path){ + return [NSBundle bundleWithPath:path]; + } + return nil; +} + +#pragma mark- class methods + ++ (NSString*)bundleName +{ + return self.theme.bundleName; +} + ++ (NSBundle*)bundle +{ + return self.theme.bundle; +} + ++ (UIImage*)imageNamed:(Class)path image:(NSString*)image +{ + CLImageEditorTheme *theme = [CLImageEditorTheme theme]; + NSString *imagePath = [self.bundle.bundlePath stringByAppendingString:[NSString stringWithFormat:@"/%@/%@/%@", path, theme.toolIconColor, image]]; + + return [UIImage fastImageWithContentsOfFile:imagePath]; +} + ++ (NSString*)localizedString:(NSString*)key withDefault:defaultValue +{ + NSString *str = NSLocalizedString(key, @""); + if(![str isEqualToString:key]){ return str; } + return NSLocalizedStringWithDefaultValue(key, nil, [CLImageEditorTheme bundle], defaultValue, @""); +} + +#pragma mark color settings + ++ (UIColor*)backgroundColor +{ + return self.theme.backgroundColor; +} + ++ (UIColor*)toolbarColor +{ + return self.theme.toolbarColor; +} + ++ (UIColor*)toolbarTextColor +{ + return self.theme.toolbarTextColor; +} + ++ (UIColor*)toolbarSelectedButtonColor +{ + return self.theme.toolbarSelectedButtonColor; +} + +#pragma mark font settings + ++ (UIFont*)toolbarTextFont +{ + return self.theme.toolbarTextFont; +} + +#pragma mark UI components + ++ (UIActivityIndicatorView*)indicatorView +{ + if([self.theme.delegate respondsToSelector:@selector(imageEditorThemeActivityIndicatorView)]){ + return [self.theme.delegate imageEditorThemeActivityIndicatorView]; + } + + // default indicator view + UIActivityIndicatorView *indicatorView = [[UIActivityIndicatorView alloc] initWithFrame:CGRectMake(0, 0, 80, 80)]; + indicatorView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.6]; + indicatorView.layer.cornerRadius = 5; + indicatorView.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhiteLarge; + + return indicatorView; +} + ++ (CLToolbarMenuItem*)menuItemWithFrame:(CGRect)frame target:(id)target action:(SEL)action toolInfo:(CLImageToolInfo*)toolInfo; +{ + return [[CLToolbarMenuItem alloc] initWithFrame:frame target:target action:action toolInfo:toolInfo]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h new file mode 100644 index 0000000..ac04aaa --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h @@ -0,0 +1,17 @@ +// +// CLImageToolInfo+Private.h +// +// Created by sho yakushiji on 2013/12/07. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "../../CLImageToolInfo.h" + +@protocol CLImageToolProtocol; + +@interface CLImageToolInfo (Private) + ++ (CLImageToolInfo*)toolInfoForToolClass:(Class)toolClass; ++ (NSArray*)toolsWithToolClass:(Class)toolClass; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.m new file mode 100644 index 0000000..4e0ebfb --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.m @@ -0,0 +1,57 @@ +// +// CLImageToolInfo+Private.m +// +// Created by sho yakushiji on 2013/12/07. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolInfo+Private.h" + +#import "CLImageToolProtocol.h" +#import "CLClassList.h" + + +@interface CLImageToolInfo() +@property (nonatomic, strong) NSString *toolName; +@property (nonatomic, strong) NSArray *subtools; +@end + +@implementation CLImageToolInfo (Private) + ++ (CLImageToolInfo*)toolInfoForToolClass:(Class)toolClass; +{ + if([(Class)toolClass conformsToProtocol:@protocol(CLImageToolProtocol)] && [toolClass isAvailable]){ + CLImageToolInfo *info = [CLImageToolInfo new]; + info.toolName = NSStringFromClass(toolClass); + info.title = [toolClass defaultTitle]; + info.available = YES; + info.dockedNumber = [toolClass defaultDockedNumber]; + info.iconImagePath = [toolClass defaultIconImagePath]; + info.subtools = [toolClass subtools]; + info.optionalInfo = [[toolClass optionalInfo] mutableCopy]; + + return info; + } + return nil; +} + ++ (NSArray*)toolsWithToolClass:(Class)toolClass +{ + NSMutableArray *array = [NSMutableArray array]; + + CLImageToolInfo *info = [CLImageToolInfo toolInfoForToolClass:toolClass]; + if(info){ + [array addObject:info]; + } + + NSArray *list = [CLClassList subclassesOfClass:toolClass]; + for(Class subtool in list){ + info = [CLImageToolInfo toolInfoForToolClass:subtool]; + if(info){ + [array addObject:info]; + } + } + return [array copy]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h new file mode 100644 index 0000000..bd5c2a3 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h @@ -0,0 +1,20 @@ +// +// CLImageToolProtocol.h +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLImageToolProtocol + +@required ++ (NSString*)defaultIconImagePath; ++ (CGFloat)defaultDockedNumber; ++ (NSString*)defaultTitle; ++ (BOOL)isAvailable; ++ (NSArray*)subtools; ++ (NSDictionary*)optionalInfo; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h new file mode 100644 index 0000000..443cff7 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h @@ -0,0 +1,14 @@ +// +// CLImageToolSettings.h +// +// Created by sho yakushiji on 2013/12/07. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "../../Utils/UIDevice+SystemVersion.h" +#import "../../Utils/UIView+Frame.h" +#import "../../Utils/UIImage+Utility.h" + +#import "CLImageToolProtocol.h" +#import "CLImageEditorTheme+Private.h" +#import "CLImageToolInfo+Private.h" diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h new file mode 100644 index 0000000..7da4fa8 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h @@ -0,0 +1,26 @@ +// +// CLToolbarMenuItem.h +// +// Created by sho yakushiji on 2013/12/11. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "UIView+CLImageToolInfo.h" + +@interface CLToolbarMenuItem : UIView +{ + UIImageView *_iconView; + UILabel *_titleLabel; +} + +@property (nonatomic, assign) NSString *title; +@property (nonatomic, assign) UIImage *iconImage; +@property (nonatomic, assign) UIViewContentMode iconImageContentMode; +@property (nonatomic, assign) BOOL selected; +@property (nonatomic, readonly) UIImageView *iconView; + + - (id)initWithFrame:(CGRect)frame target:(id)target action:(SEL)action toolInfo:(CLImageToolInfo*)toolInfo; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.m new file mode 100644 index 0000000..e17c2e1 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.m @@ -0,0 +1,116 @@ +// +// CLToolbarMenuItem.m +// +// Created by sho yakushiji on 2013/12/11. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLToolbarMenuItem.h" + +#import "CLImageEditorTheme+Private.h" +#import "UIView+Frame.h" + +@implementation CLToolbarMenuItem +{ + +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.iconImageContentMode = UIViewContentModeScaleAspectFill; + CGFloat W = frame.size.width; + + _iconView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 5, W-20, W-20)]; + _iconView.clipsToBounds = YES; + _iconView.layer.cornerRadius = 5; + _iconView.contentMode = self.iconImageContentMode; + [self addSubview:_iconView]; + + _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, _iconView.bottom + 5, W, 15)]; + _titleLabel.backgroundColor = [UIColor clearColor]; + _titleLabel.textColor = [CLImageEditorTheme toolbarTextColor]; + _titleLabel.font = [CLImageEditorTheme toolbarTextFont]; + _titleLabel.textAlignment = NSTextAlignmentCenter; + [self addSubview:_titleLabel]; + } + return self; +} + +- (id)initWithFrame:(CGRect)frame target:(id)target action:(SEL)action toolInfo:(CLImageToolInfo*)toolInfo +{ + self = [self initWithFrame:frame]; + if(self){ + UITapGestureRecognizer *gesture = [[UITapGestureRecognizer alloc] initWithTarget:target action:action]; + [self addGestureRecognizer:gesture]; + + self.toolInfo = toolInfo; + } + return self; +} + +- (NSString*)title +{ + return _titleLabel.text; +} + +- (void)setTitle:(NSString *)title +{ + _titleLabel.text = title; +} + +- (UIImageView*)iconView +{ + return _iconView; +} + +- (UIImage*)iconImage +{ + return _iconView.image; +} + +- (void)setIconImage:(UIImage *)iconImage +{ + _iconView.image = iconImage; +} + +- (void)setIconImageContentMode:(UIViewContentMode)iconImageContentMode +{ + _iconView.contentMode = iconImageContentMode; +} + +- (void)setUserInteractionEnabled:(BOOL)userInteractionEnabled +{ + [super setUserInteractionEnabled:userInteractionEnabled]; + self.alpha = (userInteractionEnabled) ? 1 : 0.3; +} + +- (void)setToolInfo:(CLImageToolInfo *)toolInfo +{ + [super setToolInfo:toolInfo]; + + self.title = self.toolInfo.title; + if(self.toolInfo.iconImagePath){ + self.iconImage = self.toolInfo.iconImage; + } + else{ + self.iconImage = nil; + } +} + +- (void)setSelected:(BOOL)selected +{ + if(selected != _selected){ + _selected = selected; + if(selected){ + self.backgroundColor = [CLImageEditorTheme toolbarSelectedButtonColor]; + } + else{ + self.backgroundColor = [UIColor clearColor]; + } + } +} + +@end + diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h new file mode 100644 index 0000000..0cb0926 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h @@ -0,0 +1,17 @@ +// +// UIView+CLImageToolInfo.h +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +#import "../../CLImageToolInfo.h" + +@interface UIView (CLImageToolInfo) + +@property (nonatomic, strong) CLImageToolInfo *toolInfo; +@property (nonatomic, strong) NSDictionary *userInfo; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.m b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.m new file mode 100644 index 0000000..b35eb47 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.m @@ -0,0 +1,34 @@ +// +// UIView+CLImageToolInfo.m +// +// Created by sho yakushiji on 2013/11/26. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "UIView+CLImageToolInfo.h" + +#import + +@implementation UIView (CLImageToolInfo) + +- (CLImageToolInfo*)toolInfo +{ + return objc_getAssociatedObject(self, @"UIView+CLImageToolInfo_toolInfo"); +} + +- (void)setToolInfo:(CLImageToolInfo *)toolInfo +{ + objc_setAssociatedObject(self, @"UIView+CLImageToolInfo_toolInfo", toolInfo, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (NSDictionary*)userInfo +{ + return objc_getAssociatedObject(self, @"UIView+CLImageToolInfo_userInfo"); +} + +- (void)setUserInfo:(NSDictionary *)userInfo +{ + objc_setAssociatedObject(self, @"UIView+CLImageToolInfo_userInfo", userInfo, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.h b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.h new file mode 100644 index 0000000..67da0ee --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.h @@ -0,0 +1,15 @@ +// +// CLClassList.h +// +// Created by sho yakushiji on 2013/11/14. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// reference: http://www.cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html +// + +#import + +@interface CLClassList : NSObject + ++ (NSArray*)subclassesOfClass:(Class)parentClass; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.m b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.m new file mode 100644 index 0000000..ed3971c --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLClassList.m @@ -0,0 +1,40 @@ +// +// CLClassList.m +// +// Created by sho yakushiji on 2013/11/14. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// reference: http://www.cocoawithlove.com/2010/01/getting-subclasses-of-objective-c-class.html +// + +#import "CLClassList.h" + +#import + +@implementation CLClassList + ++ (NSArray*)subclassesOfClass:(Class)parentClass +{ + int numClasses = objc_getClassList(NULL, 0); + Class *classes = (Class*)malloc(sizeof(Class) * numClasses); + + numClasses = objc_getClassList(classes, numClasses); + + NSMutableArray *result = [NSMutableArray array]; + for(NSInteger i=0; i +#import +@interface CLSplineInterpolator : NSObject + +- (id)initWithPoints:(NSArray*)points; // points: array of CIVector +- (CIVector*)interpolatedPoint:(CGFloat)t; // {t | 0 ≤ t ≤ 1} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLSplineInterpolator.m b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLSplineInterpolator.m new file mode 100644 index 0000000..7f0e05f --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/CLSplineInterpolator.m @@ -0,0 +1,137 @@ +// +// CLSplineInterpolator.m +// +// Created by sho yakushiji on 2013/10/24. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// Reference: http://www5d.biglobe.ne.jp/%257estssk/maze/spline.html +// + +#import "CLSplineInterpolator.h" + + +@interface CLSplineCalculator : NSObject +- (id)initWithData:(double*)points dataNum:(NSInteger)dataNum; +- (CGFloat)getValue:(CGFloat)t; +@end + + +#pragma mark- CLSplineInterpolator + +@implementation CLSplineInterpolator +{ + NSInteger _pointNum; + + CLSplineCalculator *_splineX; + CLSplineCalculator *_splineY; +} + +- (id)initWithPoints:(NSArray *)points +{ + self = [super init]; + if(self){ + _pointNum = points.count; + + double *dataX = malloc(sizeof(double) * _pointNum); + double *dataY = malloc(sizeof(double) * _pointNum); + + for(NSInteger i=0; i<_pointNum; ++i){ + CIVector *point = points[i]; + dataX[i] = point.X; + dataY[i] = point.Y; + } + + _splineX = [[CLSplineCalculator alloc] initWithData:dataX dataNum:_pointNum]; + _splineY = [[CLSplineCalculator alloc] initWithData:dataY dataNum:_pointNum]; + + free(dataX); + free(dataY); + } + return self; +} + +- (CIVector*)interpolatedPoint:(CGFloat)t +{ + t = MAX(0, MIN(t, 1)); + t = t * (_pointNum - 1); + + return [CIVector vectorWithX:[_splineX getValue:t] Y:[_splineY getValue:t]]; +} + +@end + +#pragma mark- CLSplineCalculator + +@implementation CLSplineCalculator +{ + NSInteger _dataNum; + double *a, *b, *c, *d; +} + +- (id)initWithData:(double*)data dataNum:(NSInteger)dataNum +{ + self = [super init]; + if(self){ + _dataNum = dataNum; + + a = b = c = d = NULL; + + if(dataNum<=0){ + return nil; + } + + a = malloc(dataNum * sizeof(double)); + b = malloc(dataNum * sizeof(double)); + c = malloc(dataNum * sizeof(double)); + d = malloc(dataNum * sizeof(double)); + + for(NSInteger i=0; i0; --i){ + c[i] = c[i] - c[i+1] * w[i]; + } + + b[dataNum-1] = d[dataNum-1] =0.0; + for(NSInteger i=0; i= _dataNum-1){ j = _dataNum-2; } + + double dt = t - j; + return a[j] + ( b[j] + (c[j] + d[j] * dt) * dt ) * dt; +} + +@end \ No newline at end of file diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.h b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.h new file mode 100644 index 0000000..3d120f6 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.h @@ -0,0 +1,14 @@ +// +// UIDevice+SystemVersion.h +// +// Created by sho yakushiji on 2013/11/06. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@interface UIDevice (SystemVersion) + ++ (CGFloat)iosVersion; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.m b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.m new file mode 100644 index 0000000..34c8df9 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.m @@ -0,0 +1,17 @@ +// +// UIDevice+SystemVersion.m +// +// Created by sho yakushiji on 2013/11/06. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "UIDevice+SystemVersion.h" + +@implementation UIDevice (SystemVersion) + ++ (CGFloat)iosVersion +{ + return [[[UIDevice currentDevice] systemVersion] floatValue]; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.h b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.h new file mode 100644 index 0000000..a2c32c7 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.h @@ -0,0 +1,33 @@ +// +// UIImage+Utility.h +// +// Created by sho yakushiji on 2013/05/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@interface UIImage (Utility) + ++ (UIImage*)fastImageWithData:(NSData*)data; ++ (UIImage*)fastImageWithContentsOfFile:(NSString*)path; + +- (UIImage*)deepCopy; + +- (UIImage*)grayScaleImage; + +- (UIImage*)resize:(CGSize)size; +- (UIImage*)aspectFit:(CGSize)size; +- (UIImage*)aspectFill:(CGSize)size; +- (UIImage*)aspectFill:(CGSize)size offset:(CGFloat)offset; + +- (UIImage*)crop:(CGRect)rect; + +- (UIImage*)maskedImage:(UIImage*)maskImage; + +- (UIImage*)gaussBlur:(CGFloat)blurLevel; // {blurLevel | 0 ≤ t ≤ 1} + +@end + + +void safe_dispatch_sync_main(DISPATCH_NOESCAPE dispatch_block_t block); diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.m b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.m new file mode 100644 index 0000000..c1f3399 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIImage+Utility.m @@ -0,0 +1,311 @@ +// +// UIImage+Utility.m +// +// Created by sho yakushiji on 2013/05/17. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "UIImage+Utility.h" + +#import + +@implementation UIImage (Utility) + ++ (UIImage*)decode:(UIImage*)image +{ + if(image==nil){ return nil; } + + UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); + { + [image drawAtPoint:CGPointMake(0, 0)]; + image = UIGraphicsGetImageFromCurrentImageContext(); + } + UIGraphicsEndImageContext(); + + return image; +} + ++ (UIImage*)fastImageWithData:(NSData *)data +{ + UIImage *image = [UIImage imageWithData:data]; + return [self decode:image]; +} + ++ (UIImage*)fastImageWithContentsOfFile:(NSString*)path +{ + UIImage *image = [[UIImage alloc] initWithContentsOfFile:path]; + return [self decode:image]; +} + +#pragma mark- Copy + +- (UIImage*)deepCopy +{ + return [UIImage decode:self]; +} + +#pragma mark- GrayScale + +- (UIImage*)grayScaleImage +{ + CGRect imageRect = CGRectMake(0, 0, self.size.width, self.size.height); + + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray(); + CGContextRef context = CGBitmapContextCreate(nil, self.size.width, self.size.height, 8, 0, colorSpace, kCGBitmapByteOrderDefault); + + CGContextDrawImage(context, imageRect, [self CGImage]); + + CGImageRef imageRef = CGBitmapContextCreateImage(context); + UIImage *newImage = [UIImage imageWithCGImage:imageRef]; + + CGColorSpaceRelease(colorSpace); + CGContextRelease(context); + CFRelease(imageRef); + + return newImage; +} + +#pragma mark- Resizing + +- (UIImage*)resize:(CGSize)size +{ + int W = size.width; + int H = size.height; + + CGImageRef imageRef = self.CGImage; // If the image is CIImage backed, then imageRef would be nil + if (!imageRef) { + imageRef = [[CIContext context] createCGImage:self.CIImage fromRect:[self.CIImage extent]]; + } + CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); + + + CGContextRef bitmap = CGBitmapContextCreate(NULL, W, H, 8, 4*W, colorSpaceInfo, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little); + + if(self.imageOrientation == UIImageOrientationLeft || self.imageOrientation == UIImageOrientationRight){ + W = size.height; + H = size.width; + } + + if(self.imageOrientation == UIImageOrientationLeft || self.imageOrientation == UIImageOrientationLeftMirrored){ + CGContextRotateCTM (bitmap, M_PI/2); + CGContextTranslateCTM (bitmap, 0, -H); + } + else if (self.imageOrientation == UIImageOrientationRight || self.imageOrientation == UIImageOrientationRightMirrored){ + CGContextRotateCTM (bitmap, -M_PI/2); + CGContextTranslateCTM (bitmap, -W, 0); + } + else if (self.imageOrientation == UIImageOrientationUp || self.imageOrientation == UIImageOrientationUpMirrored){ + // Nothing + } + else if (self.imageOrientation == UIImageOrientationDown || self.imageOrientation == UIImageOrientationDownMirrored){ + CGContextTranslateCTM (bitmap, W, H); + CGContextRotateCTM (bitmap, -M_PI); + } + + CGContextDrawImage(bitmap, CGRectMake(0, 0, W, H), imageRef); + CGImageRef ref = CGBitmapContextCreateImage(bitmap); + UIImage* newImage = [UIImage imageWithCGImage:ref]; + + CGContextRelease(bitmap); + CGImageRelease(ref); + return newImage; +} + +- (UIImage*)aspectFit:(CGSize)size +{ + CGFloat ratio = MIN(size.width/self.size.width, size.height/self.size.height); + return [self resize:CGSizeMake(self.size.width*ratio, self.size.height*ratio)]; +} + +- (UIImage*)aspectFill:(CGSize)size +{ + return [self aspectFill:size offset:0]; +} + +- (UIImage*)aspectFill:(CGSize)size offset:(CGFloat)offset +{ + int W = size.width; + int H = size.height; + int W0 = self.size.width; + int H0 = self.size.height; + + CGImageRef imageRef = self.CGImage; // If the image is CIImage backed, then imageRef would be nil + if (!imageRef) { + imageRef = [[CIContext context] createCGImage:self.CIImage fromRect:[self.CIImage extent]]; + } + CGColorSpaceRef colorSpaceInfo = CGImageGetColorSpace(imageRef); + + CGContextRef bitmap = CGBitmapContextCreate(NULL, W, H, 8, 4*W, colorSpaceInfo, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little); + + if(self.imageOrientation == UIImageOrientationLeft || self.imageOrientation == UIImageOrientationRight){ + W = size.height; + H = size.width; + W0 = self.size.height; + H0 = self.size.width; + } + + double ratio = MAX(W/(double)W0, H/(double)H0); + W0 = ratio * W0; + H0 = ratio * H0; + + int dW = abs((W0-W)/2); + int dH = abs((H0-H)/2); + + if(dW==0){ dH += offset; } + if(dH==0){ dW += offset; } + + if(self.imageOrientation == UIImageOrientationLeft || self.imageOrientation == UIImageOrientationLeftMirrored){ + CGContextRotateCTM (bitmap, M_PI/2); + CGContextTranslateCTM (bitmap, 0, -H); + } + else if (self.imageOrientation == UIImageOrientationRight || self.imageOrientation == UIImageOrientationRightMirrored){ + CGContextRotateCTM (bitmap, -M_PI/2); + CGContextTranslateCTM (bitmap, -W, 0); + } + else if (self.imageOrientation == UIImageOrientationUp || self.imageOrientation == UIImageOrientationUpMirrored){ + // Nothing + } + else if (self.imageOrientation == UIImageOrientationDown || self.imageOrientation == UIImageOrientationDownMirrored){ + CGContextTranslateCTM (bitmap, W, H); + CGContextRotateCTM (bitmap, -M_PI); + } + + CGContextDrawImage(bitmap, CGRectMake(-dW, -dH, W0, H0), imageRef); + CGImageRef ref = CGBitmapContextCreateImage(bitmap); + UIImage* newImage = [UIImage imageWithCGImage:ref]; + + CGContextRelease(bitmap); + CGImageRelease(ref); + + return newImage; +} + +#pragma mark- Clipping + +- (UIImage*)crop:(CGRect)rect +{ + CGPoint origin = CGPointMake(-rect.origin.x, -rect.origin.y); + + UIImage *img = nil; + + UIGraphicsBeginImageContextWithOptions(rect.size, NO, self.scale); + [self drawAtPoint:origin]; + img = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return img; +} + +#pragma mark- Masking + +- (UIImage*)maskedImage:(UIImage*)maskImage +{ + CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskImage.CGImage), + CGImageGetHeight(maskImage.CGImage), + CGImageGetBitsPerComponent(maskImage.CGImage), + CGImageGetBitsPerPixel(maskImage.CGImage), + CGImageGetBytesPerRow(maskImage.CGImage), + CGImageGetDataProvider(maskImage.CGImage), NULL, false); + + CGImageRef masked = CGImageCreateWithMask(self.CGImage, mask); + + UIImage *result = [UIImage imageWithCGImage:masked]; + + CGImageRelease(mask); + CGImageRelease(masked); + + return result; +} + +#pragma mark- Blur + +- (UIImage*)gaussBlur:(CGFloat)blurLevel +{ + blurLevel = MIN(1.0, MAX(0.0, blurLevel)); + + int boxSize = (int)(blurLevel * 0.1 * MIN(self.size.width, self.size.height)); + boxSize = boxSize - (boxSize % 2) + 1; + + NSData *imageData = UIImageJPEGRepresentation([UIImage decode:self], 1); + UIImage *tmpImage = [UIImage imageWithData:imageData]; + + CGImageRef img = tmpImage.CGImage; + vImage_Buffer inBuffer, outBuffer; + vImage_Error error; + void *pixelBuffer; + + //create vImage_Buffer with data from CGImageRef + CGDataProviderRef inProvider = CGImageGetDataProvider(img); + CFDataRef inBitmapData = CGDataProviderCopyData(inProvider); + + inBuffer.width = CGImageGetWidth(img); + inBuffer.height = CGImageGetHeight(img); + inBuffer.rowBytes = CGImageGetBytesPerRow(img); + + inBuffer.data = (void*)CFDataGetBytePtr(inBitmapData); + + //create vImage_Buffer for output + pixelBuffer = malloc(CGImageGetBytesPerRow(img) * CGImageGetHeight(img)); + + outBuffer.data = pixelBuffer; + outBuffer.width = CGImageGetWidth(img); + outBuffer.height = CGImageGetHeight(img); + outBuffer.rowBytes = CGImageGetBytesPerRow(img); + + NSInteger windowR = boxSize/2; + CGFloat sig2 = windowR / 3.0; + if(windowR>0){ sig2 = -1/(2*sig2*sig2); } + + int16_t *kernel = (int16_t*)malloc(boxSize*sizeof(int16_t)); + int32_t sum = 0; + for(NSInteger i=0; i + +@interface UIView (Frame) + +@property (nonatomic) CGFloat top; +@property (nonatomic) CGFloat bottom; +@property (nonatomic) CGFloat right; +@property (nonatomic) CGFloat left; + +@property (nonatomic) CGFloat width; +@property (nonatomic) CGFloat height; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIView+Frame.m b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIView+Frame.m new file mode 100644 index 0000000..a37ce1f --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/Utils/UIView+Frame.m @@ -0,0 +1,84 @@ +// +// UIView+Frame.m +// +// Created by sho yakushiji on 2013/05/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "UIView+Frame.h" + +@implementation UIView (Frame) + +- (CGFloat)top +{ + return self.frame.origin.y; +} + +- (void)setTop:(CGFloat)y +{ + CGRect frame = self.frame; + frame.origin.y = y; + self.frame = frame; +} + +- (CGFloat)right +{ + return self.frame.origin.x + self.frame.size.width; +} + +- (void)setRight:(CGFloat)right +{ + CGRect frame = self.frame; + frame.origin.x = right - self.frame.size.width; + self.frame = frame; +} + +- (CGFloat)bottom +{ + return self.frame.origin.y + self.frame.size.height; +} + +- (void)setBottom:(CGFloat)bottom +{ + CGRect frame = self.frame; + frame.origin.y = bottom - self.frame.size.height; + self.frame = frame; +} + +- (CGFloat)left +{ + return self.frame.origin.x; +} + +- (void)setLeft:(CGFloat)x +{ + CGRect frame = self.frame; + frame.origin.x = x; + self.frame = frame; +} + +- (CGFloat)width +{ + return self.frame.size.width; +} + +- (void)setWidth:(CGFloat)width +{ + CGRect frame = self.frame; + frame.size.width = width; + self.frame = frame; +} + +- (CGFloat)height +{ + return self.frame.size.height; +} + +- (void)setHeight:(CGFloat)height +{ + CGRect frame = self.frame; + frame.size.height = height; + self.frame = frame; +} + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.h b/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.h new file mode 100644 index 0000000..98b3609 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.h @@ -0,0 +1,30 @@ +// +// _CLImageEditorViewController.h +// +// Created by sho yakushiji on 2013/11/05. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "../CLImageEditor.h" + +@interface _CLImageEditorViewController : CLImageEditor + +{ + IBOutlet __weak UINavigationBar *_navigationBar; + IBOutlet __weak UIScrollView *_scrollView; +} +@property (nonatomic, strong) UIImageView *imageView; +@property (nonatomic, weak) IBOutlet UIScrollView *menuView; +@property (nonatomic, readonly) UIScrollView *scrollView; + +- (IBAction)pushedCloseBtn:(id)sender; +- (IBAction)pushedFinishBtn:(id)sender; + + +- (id)initWithImage:(UIImage*)image; + + +- (void)fixZoomScaleWithAnimated:(BOOL)animated; +- (void)resetZoomScaleWithAnimated:(BOOL)animated; + +@end diff --git a/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.m b/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.m new file mode 100644 index 0000000..97871a3 --- /dev/null +++ b/Example/Pods/CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.m @@ -0,0 +1,845 @@ +// +// _CLImageEditorViewController.m +// +// Created by sho yakushiji on 2013/11/05. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "_CLImageEditorViewController.h" + +#import "CLImageToolBase.h" + + +#pragma mark- _CLImageEditorViewController + +static const CGFloat kNavBarHeight = 44.0f; +static const CGFloat kMenuBarHeight = 80.0f; + +@interface _CLImageEditorViewController() + +@property (nonatomic, strong) CLImageToolBase *currentTool; +@property (nonatomic, strong, readwrite) CLImageToolInfo *toolInfo; +@property (nonatomic, strong) UIImageView *targetImageView; +@end + + +@implementation _CLImageEditorViewController +{ + UIImage *_originalImage; + UIView *_bgView; +} +@synthesize toolInfo = _toolInfo; + +- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil +{ + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + self.toolInfo = [CLImageToolInfo toolInfoForToolClass:[self class]]; + } + return self; +} + +- (id)init +{ + self = [self initWithNibName:nil bundle:nil]; + if (self){ + + } + return self; +} + +- (id)initWithImage:(UIImage *)image +{ + return [self initWithImage:image delegate:nil]; +} + +- (id)initWithImage:(UIImage*)image delegate:(id)delegate +{ + self = [self init]; + if (self){ + _originalImage = [image deepCopy]; + self.delegate = delegate; + } + return self; +} + +- (id)initWithDelegate:(id)delegate +{ + self = [self init]; + if (self){ + self.delegate = delegate; + } + return self; +} + +- (void)dealloc +{ + [_navigationBar removeFromSuperview]; +} + +#pragma mark- Custom initialization + +- (UIBarButtonItem*)createDoneButton +{ + UIBarButtonItem *rightBarButtonItem = nil; + NSString *doneBtnTitle = [CLImageEditorTheme localizedString:@"CLImageEditor_DoneBtnTitle" withDefault:nil]; + + if(![doneBtnTitle isEqualToString:@"CLImageEditor_DoneBtnTitle"]){ + rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:doneBtnTitle style:UIBarButtonItemStyleDone target:self action:@selector(pushedFinishBtn:)]; + } + else{ + rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pushedFinishBtn:)]; + } + return rightBarButtonItem; +} + +- (void)initNavigationBar +{ + self.navigationItem.rightBarButtonItem = [self createDoneButton]; + [self.navigationController setNavigationBarHidden:NO animated:NO]; + + if(_navigationBar==nil){ + UINavigationItem *navigationItem = [[UINavigationItem alloc] init]; + navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(pushedCloseBtn:)]; + navigationItem.rightBarButtonItem = [self createDoneButton]; + + CGFloat dy = MIN([UIApplication sharedApplication].statusBarFrame.size.height, [UIApplication sharedApplication].statusBarFrame.size.width); + + UINavigationBar *navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, dy, self.view.width, kNavBarHeight)]; + [navigationBar pushNavigationItem:navigationItem animated:NO]; + navigationBar.delegate = self; + + if(self.navigationController){ + [self.navigationController.view addSubview:navigationBar]; + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:nil bottom:nil height:@(kNavBarHeight) width:nil parent:self.navigationController.view child:navigationBar peer:nil]; + } + else{ + [self.view addSubview:navigationBar]; + if (@available(iOS 11.0, *)) { + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:nil bottom:nil height:@(kNavBarHeight) width:nil parent:self.view child:navigationBar peer:nil]; + [_CLImageEditorViewController setConstraintsLeading:nil trailing:nil top:@0 bottom:nil height:nil width:nil parent:self.view child:navigationBar peer:self.view.safeAreaLayoutGuide]; + } else { + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:@(dy) bottom:nil height:@(kNavBarHeight) width:nil parent:self.view child:navigationBar peer:nil]; + } + } + _navigationBar = navigationBar; + } + + if(self.navigationController!=nil){ + _navigationBar.frame = self.navigationController.navigationBar.frame; + _navigationBar.hidden = YES; + [_navigationBar popNavigationItemAnimated:NO]; + } + else{ + _navigationBar.topItem.title = self.title; + } + + if([UIDevice iosVersion] < 7){ + _navigationBar.barStyle = UIBarStyleBlackTranslucent; + } +} + +- (void)initMenuScrollView +{ + if(self.menuView==nil){ + UIScrollView *menuScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.width, kMenuBarHeight)]; + + // Adjust for iPhone X + if (@available(iOS 11.0, *)) { + UIEdgeInsets theInsets = [UIApplication sharedApplication].keyWindow.rootViewController.view.safeAreaInsets; + menuScroll.height += theInsets.bottom; + } + + menuScroll.top = self.view.height - menuScroll.height; + menuScroll.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; + menuScroll.showsHorizontalScrollIndicator = NO; + menuScroll.showsVerticalScrollIndicator = NO; + + [self.view addSubview:menuScroll]; + self.menuView = menuScroll; + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:nil bottom:@0 height:@(menuScroll.height) width:nil parent:self.view child:menuScroll peer:nil]; + } + self.menuView.backgroundColor = [CLImageEditorTheme toolbarColor]; +} + +- (void)initImageScrollView +{ + if(_scrollView==nil){ + UIScrollView *imageScroll = [[UIScrollView alloc] initWithFrame:self.view.bounds]; + imageScroll.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + imageScroll.showsHorizontalScrollIndicator = NO; + imageScroll.showsVerticalScrollIndicator = NO; + imageScroll.delegate = self; + imageScroll.clipsToBounds = NO; + + CGFloat y = 0; + if(self.navigationController){ + if(self.navigationController.navigationBar.translucent){ + y = self.navigationController.navigationBar.bottom; + } + y = ([UIDevice iosVersion] < 7) ? y-[UIApplication sharedApplication].statusBarFrame.size.height : y; + } + else{ + y = _navigationBar.bottom; + } + + imageScroll.top = y; + imageScroll.height = self.view.height - imageScroll.top - _menuView.height; + + [self.view insertSubview:imageScroll atIndex:0]; + _scrollView = imageScroll; + + if (@available(iOS 11.0, *)) { + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:nil bottom:@(-_menuView.height) height:nil width:nil parent:self.view child:imageScroll peer:nil]; + [_CLImageEditorViewController setConstraintsLeading:nil trailing:nil top:@(y) bottom:nil height:nil width:nil parent:self.view child:imageScroll peer:self.view.safeAreaLayoutGuide]; + } + else{ + [_CLImageEditorViewController setConstraintsLeading:@0 trailing:@0 top:@(y) bottom:@(-_menuView.height) height:nil width:nil parent:self.view child:imageScroll peer:nil]; + } + + } +} + ++(NSArray *)setConstraintsLeading:(NSNumber *)leading + trailing:(NSNumber *)trailing + top:(NSNumber *)top + bottom:(NSNumber *)bottom + height:(NSNumber *)height + width:(NSNumber *)width + parent:(UIView *)parent + child:(UIView *)child + peer:(nullable id)peer +{ + NSMutableArray *constraints = [NSMutableArray new]; + //Trailing + if (trailing) { + NSLayoutConstraint *trailingConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeTrailing + relatedBy:NSLayoutRelationEqual + toItem:(peer ?: parent) + attribute:NSLayoutAttributeTrailing + multiplier:1.0f + constant:trailing.floatValue]; + [parent addConstraint:trailingConstraint]; + [constraints addObject:trailingConstraint]; + } + //Leading + if (leading) { + NSLayoutConstraint *leadingConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeLeading + relatedBy:NSLayoutRelationEqual + toItem:(peer ?: parent) + attribute:NSLayoutAttributeLeading + multiplier:1.0f + constant:leading.floatValue]; + [parent addConstraint:leadingConstraint]; + [constraints addObject:leadingConstraint]; + } + //Bottom + if (bottom) { + NSLayoutConstraint *bottomConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeBottom + relatedBy:NSLayoutRelationEqual + toItem:(peer ?: parent) + attribute:NSLayoutAttributeBottom + multiplier:1.0f + constant:bottom.floatValue]; + [parent addConstraint:bottomConstraint]; + [constraints addObject:bottomConstraint]; + } + //Top + if (top) { + NSLayoutConstraint *topConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeTop + relatedBy:NSLayoutRelationEqual + toItem:(peer ?: parent) + attribute:NSLayoutAttributeTop + multiplier:1.0f + constant:top.floatValue]; + [parent addConstraint:topConstraint]; + [constraints addObject:topConstraint]; + } + //Height + if (height) { + NSLayoutConstraint *heightConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeHeight + relatedBy:NSLayoutRelationEqual + toItem:nil + attribute:NSLayoutAttributeNotAnAttribute + multiplier:1.0f + constant:height.floatValue]; + [child addConstraint:heightConstraint]; + [constraints addObject:heightConstraint]; + } + //Width + if (width) { + NSLayoutConstraint *widthConstraint = [NSLayoutConstraint + constraintWithItem:child + attribute:NSLayoutAttributeWidth + relatedBy:NSLayoutRelationEqual + toItem:nil + attribute:NSLayoutAttributeNotAnAttribute + multiplier:1.0f + constant:width.floatValue]; + [child addConstraint:widthConstraint]; + [constraints addObject:widthConstraint]; + } + child.translatesAutoresizingMaskIntoConstraints = NO; + return constraints; +} + +#pragma mark- + +- (void)showInViewController:(UIViewController*)controller withImageView:(UIImageView*)imageView; +{ + _originalImage = imageView.image; + + self.targetImageView = imageView; + + [controller addChildViewController:self]; + [self didMoveToParentViewController:controller]; + + self.view.frame = controller.view.bounds; + [controller.view addSubview:self.view]; + [self refreshImageView]; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + + self.title = self.toolInfo.title; + self.view.clipsToBounds = YES; + self.view.backgroundColor = self.theme.backgroundColor; + self.navigationController.view.backgroundColor = self.view.backgroundColor; + + if([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]){ + self.automaticallyAdjustsScrollViewInsets = NO; + } + + if([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)]){ + self.navigationController.interactivePopGestureRecognizer.enabled = NO; + } + + [self initNavigationBar]; + [self initMenuScrollView]; + [self initImageScrollView]; + + [self refreshToolSettings]; + + if(_imageView==nil){ + _imageView = [UIImageView new]; + [_scrollView addSubview:_imageView]; + [self refreshImageView]; + } +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)viewWillAppear:(BOOL)animated +{ + [super viewWillAppear:animated]; + + if(self.targetImageView){ + [self expropriateImageView]; + } + else{ + [self refreshImageView]; + } +} + +#pragma mark- View transition + +- (void)copyImageViewInfo:(UIImageView*)fromView toView:(UIImageView*)toView +{ + CGAffineTransform transform = fromView.transform; + fromView.transform = CGAffineTransformIdentity; + + toView.transform = CGAffineTransformIdentity; + toView.frame = [toView.superview convertRect:fromView.frame fromView:fromView.superview]; + toView.transform = transform; + toView.image = fromView.image; + toView.contentMode = fromView.contentMode; + toView.clipsToBounds = fromView.clipsToBounds; + + fromView.transform = transform; +} + +- (void)expropriateImageView +{ + UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; + + UIImageView *animateView = [UIImageView new]; + [window addSubview:animateView]; + [self copyImageViewInfo:self.targetImageView toView:animateView]; + + _bgView = [[UIView alloc] initWithFrame:self.view.bounds]; + [self.view insertSubview:_bgView atIndex:0]; + + _bgView.backgroundColor = self.view.backgroundColor; + self.view.backgroundColor = [self.view.backgroundColor colorWithAlphaComponent:0]; + + self.targetImageView.hidden = YES; + _imageView.hidden = YES; + _bgView.alpha = 0; + _navigationBar.transform = CGAffineTransformMakeTranslation(0, -_navigationBar.height); + _menuView.transform = CGAffineTransformMakeTranslation(0, self.view.height-_menuView.top); + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + animateView.transform = CGAffineTransformIdentity; + + CGFloat dy = ([UIDevice iosVersion]<7) ? [UIApplication sharedApplication].statusBarFrame.size.height : 0; + + CGSize size = (self->_imageView.image) ? self->_imageView.image.size : self->_imageView.frame.size; + if(size.width>0 && size.height>0){ + CGFloat ratio = MIN(self->_scrollView.width / size.width, self->_scrollView.height / size.height); + CGFloat W = ratio * size.width; + CGFloat H = ratio * size.height; + animateView.frame = CGRectMake((self->_scrollView.width-W)/2 + self->_scrollView.left, (self->_scrollView.height-H)/2 + self->_scrollView.top + dy, W, H); + } + + self->_bgView.alpha = 1; + self->_navigationBar.transform = CGAffineTransformIdentity; + self->_menuView.transform = CGAffineTransformIdentity; + } + completion:^(BOOL finished) { + self.targetImageView.hidden = NO; + self->_imageView.hidden = NO; + [animateView removeFromSuperview]; + } + ]; +} + +- (void)restoreImageView:(BOOL)canceled +{ + if(!canceled){ + self.targetImageView.image = _imageView.image; + } + self.targetImageView.hidden = YES; + + id delegate = [self transitionDelegate]; + if([delegate respondsToSelector:@selector(imageEditor:willDismissWithImageView:canceled:)]){ + [delegate imageEditor:self willDismissWithImageView:self.targetImageView canceled:canceled]; + } + + UIWindow *window = [[[UIApplication sharedApplication] delegate] window]; + + UIImageView *animateView = [UIImageView new]; + [window addSubview:animateView]; + [self copyImageViewInfo:_imageView toView:animateView]; + + _menuView.frame = [window convertRect:_menuView.frame fromView:_menuView.superview]; + _navigationBar.frame = [window convertRect:_navigationBar.frame fromView:_navigationBar.superview]; + + [window addSubview:_menuView]; + [window addSubview:_navigationBar]; + + self.view.userInteractionEnabled = NO; + _menuView.userInteractionEnabled = NO; + _navigationBar.userInteractionEnabled = NO; + _imageView.hidden = YES; + + [UIView animateWithDuration:0.3 + animations:^{ + self->_bgView.alpha = 0; + self->_menuView.alpha = 0; + self->_navigationBar.alpha = 0; + + self->_menuView.transform = CGAffineTransformMakeTranslation(0, self.view.height-self->_menuView.top); + self->_navigationBar.transform = CGAffineTransformMakeTranslation(0, -self->_navigationBar.height); + + [self copyImageViewInfo:self.targetImageView toView:animateView]; + } + completion:^(BOOL finished) { + [animateView removeFromSuperview]; + [self->_menuView removeFromSuperview]; + [self->_navigationBar removeFromSuperview]; + + [self willMoveToParentViewController:nil]; + [self.view removeFromSuperview]; + [self removeFromParentViewController]; + + self->_imageView.hidden = NO; + self.targetImageView.hidden = NO; + + if([delegate respondsToSelector:@selector(imageEditor:didDismissWithImageView:canceled:)]){ + [delegate imageEditor:self didDismissWithImageView:self.targetImageView canceled:canceled]; + } + } + ]; +} + +#pragma mark- Properties + +- (id)transitionDelegate +{ + if([self.delegate conformsToProtocol:@protocol(CLImageEditorTransitionDelegate)]){ + return (id)self.delegate; + } + return nil; +} + +- (void)setTitle:(NSString *)title +{ + [super setTitle:title]; + self.toolInfo.title = title; +} + +- (UIScrollView*)scrollView +{ + return _scrollView; +} + +#pragma mark- ImageTool setting + ++ (NSString*)defaultIconImagePath +{ + return nil; +} + ++ (CGFloat)defaultDockedNumber +{ + return 0; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLImageEditor_DefaultTitle" withDefault:@"Edit"]; +} + ++ (BOOL)isAvailable +{ + return YES; +} + ++ (NSArray*)subtools +{ + return [CLImageToolInfo toolsWithToolClass:[CLImageToolBase class]]; +} + ++ (NSDictionary*)optionalInfo +{ + return nil; +} + +#pragma mark- + +- (void)refreshToolSettings +{ + for(UIView *sub in _menuView.subviews){ [sub removeFromSuperview]; } + + CGFloat x = 0; + CGFloat W = 70; + CGFloat H = _menuView.height; + + int toolCount = 0; + CGFloat padding = 0; + for(CLImageToolInfo *info in self.toolInfo.sortedSubtools){ + if(info.available){ + toolCount++; + } + } + + CGFloat diff = _menuView.frame.size.width - toolCount * W; + if (00 && size.height>0){ + CGFloat ratio = MIN(_scrollView.frame.size.width / size.width, _scrollView.frame.size.height / size.height); + CGFloat W = ratio * size.width * _scrollView.zoomScale; + CGFloat H = ratio * size.height * _scrollView.zoomScale; + + _imageView.frame = CGRectMake(MAX(0, (_scrollView.width-W)/2), MAX(0, (_scrollView.height-H)/2), W, H); + } +} + +- (void)fixZoomScaleWithAnimated:(BOOL)animated +{ + CGFloat minZoomScale = _scrollView.minimumZoomScale; + _scrollView.maximumZoomScale = 0.95*minZoomScale; + _scrollView.minimumZoomScale = 0.95*minZoomScale; + [_scrollView setZoomScale:_scrollView.minimumZoomScale animated:animated]; +} + +- (void)resetZoomScaleWithAnimated:(BOOL)animated +{ + CGFloat Rw = _scrollView.frame.size.width / _imageView.frame.size.width; + CGFloat Rh = _scrollView.frame.size.height / _imageView.frame.size.height; + + //CGFloat scale = [[UIScreen mainScreen] scale]; + CGFloat scale = 1; + Rw = MAX(Rw, _imageView.image.size.width / (scale * _scrollView.frame.size.width)); + Rh = MAX(Rh, _imageView.image.size.height / (scale * _scrollView.frame.size.height)); + + _scrollView.contentSize = _imageView.frame.size; + _scrollView.minimumZoomScale = 1; + _scrollView.maximumZoomScale = MAX(MAX(Rw, Rh), 1); + + [_scrollView setZoomScale:_scrollView.minimumZoomScale animated:animated]; +} + +- (void)refreshImageView +{ + _imageView.image = _originalImage; + + [self resetImageViewFrame]; + [self resetZoomScaleWithAnimated:NO]; +} + +- (UIBarPosition)positionForBar:(id )bar +{ + return UIBarPositionTopAttached; +} + +- (BOOL)shouldAutorotate +{ + return (_currentTool == nil); +} + +#if __IPHONE_OS_VERSION_MAX_ALLOWED < 90000 +- (NSUInteger)supportedInterfaceOrientations +#else +- (UIInterfaceOrientationMask)supportedInterfaceOrientations +#endif +{ + return UIInterfaceOrientationMaskAll; +} + +-(void)viewDidLayoutSubviews +{ + [super viewDidLayoutSubviews]; + [self resetImageViewFrame]; + [self refreshToolSettings]; + [self scrollViewDidZoom:_scrollView]; +} + +- (BOOL)prefersStatusBarHidden +{ + return [[CLImageEditorTheme theme] statusBarHidden]; +} + +- (UIStatusBarStyle)preferredStatusBarStyle +{ + return [[CLImageEditorTheme theme] statusBarStyle]; +} + +#pragma mark- Tool actions + +- (void)setCurrentTool:(CLImageToolBase *)currentTool +{ + if(currentTool != _currentTool){ + [_currentTool cleanup]; + _currentTool = currentTool; + [_currentTool setup]; + + [self swapToolBarWithEditing:(_currentTool!=nil)]; + } +} + +#pragma mark- Menu actions + +- (void)swapMenuViewWithEditing:(BOOL)editing +{ + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + if(editing){ + self->_menuView.transform = CGAffineTransformMakeTranslation(0, self.view.height-self->_menuView.top); + } + else{ + self->_menuView.transform = CGAffineTransformIdentity; + } + } + ]; +} + +- (void)swapNavigationBarWithEditing:(BOOL)editing +{ + if(self.navigationController==nil){ + return; + } + + if(editing){ + _navigationBar.hidden = NO; + _navigationBar.transform = CGAffineTransformMakeTranslation(0, -_navigationBar.height); + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self.navigationController.navigationBar.transform = CGAffineTransformMakeTranslation(0, -self.navigationController.navigationBar.height-20); + self->_navigationBar.transform = CGAffineTransformIdentity; + } + ]; + } + else{ + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self.navigationController.navigationBar.transform = CGAffineTransformIdentity; + self->_navigationBar.transform = CGAffineTransformMakeTranslation(0, -self->_navigationBar.height); + } + completion:^(BOOL finished) { + self->_navigationBar.hidden = YES; + self->_navigationBar.transform = CGAffineTransformIdentity; + } + ]; + } +} + +- (void)swapToolBarWithEditing:(BOOL)editing +{ + [self swapMenuViewWithEditing:editing]; + [self swapNavigationBarWithEditing:editing]; + + if(self.currentTool){ + UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:self.currentTool.toolInfo.title]; + item.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:[CLImageEditorTheme localizedString:@"CLImageEditor_OKBtnTitle" withDefault:@"OK"] style:UIBarButtonItemStyleDone target:self action:@selector(pushedDoneBtn:)]; + item.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:[CLImageEditorTheme localizedString:@"CLImageEditor_BackBtnTitle" withDefault:@"Back"] style:UIBarButtonItemStylePlain target:self action:@selector(pushedCancelBtn:)]; + + [_navigationBar pushNavigationItem:item animated:(self.navigationController==nil)]; + } + else{ + [_navigationBar popNavigationItemAnimated:(self.navigationController==nil)]; + } +} + +- (void)setupToolWithToolInfo:(CLImageToolInfo*)info +{ + if(self.currentTool){ return; } + + Class toolClass = NSClassFromString(info.toolName); + + if(toolClass){ + id instance = [toolClass alloc]; + if(instance!=nil && [instance isKindOfClass:[CLImageToolBase class]]){ + instance = [instance initWithImageEditor:self withToolInfo:info]; + self.currentTool = instance; + } + } +} + +- (void)tappedMenuView:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; + + [self setupToolWithToolInfo:view.toolInfo]; +} + +- (IBAction)pushedCancelBtn:(id)sender +{ + _imageView.image = _originalImage; + [self resetImageViewFrame]; + + self.currentTool = nil; +} + +- (IBAction)pushedDoneBtn:(id)sender +{ + self.view.userInteractionEnabled = NO; + + [self.currentTool executeWithCompletionBlock:^(UIImage *image, NSError *error, NSDictionary *userInfo) { + if(error){ + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Error" message:error.localizedDescription preferredStyle:UIAlertControllerStyleAlert]; + [alert addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]]; + [self presentViewController:alert animated:YES completion:nil]; + } + else if(image){ + self->_originalImage = image; + self->_imageView.image = image; + + [self resetImageViewFrame]; + self.currentTool = nil; + } + self.view.userInteractionEnabled = YES; + }]; +} + +- (void)pushedCloseBtn:(id)sender +{ + if(self.targetImageView==nil){ + if([self.delegate respondsToSelector:@selector(imageEditorDidCancel:)]){ + [self.delegate imageEditorDidCancel:self]; + } + else{ + [self dismissViewControllerAnimated:YES completion:nil]; + } + } + else{ + _imageView.image = self.targetImageView.image; + [self restoreImageView:YES]; + } +} + +- (void)pushedFinishBtn:(id)sender +{ + if(self.targetImageView==nil){ + if([self.delegate respondsToSelector:@selector(imageEditor:didFinishEditingWithImage:)]){ + [self.delegate imageEditor:self didFinishEditingWithImage:_originalImage]; + } + else if([self.delegate respondsToSelector:@selector(imageEditor:didFinishEdittingWithImage:)]){ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [self.delegate imageEditor:self didFinishEdittingWithImage:_originalImage]; +#pragma clang diagnostic pop + } + else{ + [self dismissViewControllerAnimated:YES completion:nil]; + } + } + else{ + _imageView.image = _originalImage; + [self restoreImageView:NO]; + } +} + +#pragma mark- ScrollView delegate + +- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView +{ + return _imageView; +} + +- (void)scrollViewDidZoom:(UIScrollView *)scrollView +{ + CGFloat Ws = _scrollView.frame.size.width - _scrollView.contentInset.left - _scrollView.contentInset.right; + CGFloat Hs = _scrollView.frame.size.height - _scrollView.contentInset.top - _scrollView.contentInset.bottom; + CGFloat W = _imageView.frame.size.width; + CGFloat H = _imageView.frame.size.height; + + CGRect rct = _imageView.frame; + rct.origin.x = MAX((Ws-W)/2, 0); + rct.origin.y = MAX((Hs-H)/2, 0); + _imageView.frame = rct; +} + +@end diff --git a/Example/Pods/CLImageEditor/LICENSE b/Example/Pods/CLImageEditor/LICENSE new file mode 100644 index 0000000..0980547 --- /dev/null +++ b/Example/Pods/CLImageEditor/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Sho Yakushiji, CALACULU Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.h new file mode 100644 index 0000000..77b352f --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.h @@ -0,0 +1,13 @@ +// +// CLEmoticonTool.h +// +// Created by Mokhlas Hussein on 01/02/14. +// Copyright (c) 2014 iMokhles. All rights reserved. +// CLImageEditor Author sho yakushiji. +// + +#import "CLImageToolBase.h" + +@interface CLEmoticonTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.m new file mode 100644 index 0000000..73b6369 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.m @@ -0,0 +1,387 @@ +// +// CLEmoticonTool.m +// +// Created by Mokhlas Hussein on 01/02/14. +// Copyright (c) 2014 iMokhles. All rights reserved. +// CLImageEditor Author sho yakushiji. +// + +#import "CLEmoticonTool.h" + +#import "CLCircleView.h" + +static NSString* const kCLEmoticonToolEmoticonPathKey = @"EmoticonPath"; +static NSString* const kCLEmoticonToolDeleteIconName = @"deleteIconAssetsName"; + +@interface _CLEmoticonView : UIView ++ (void)setActiveEmoticonView:(_CLEmoticonView*)view; +- (UIImageView*)imageView; +- (id)initWithImage:(UIImage *)image tool:(CLEmoticonTool*)tool; +- (void)setScale:(CGFloat)scale; +@end + + + +@implementation CLEmoticonTool +{ + UIImage *_originalImage; + + UIView *_workingView; + + UIScrollView *_menuScroll; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLEmoticonTool_DefaultTitle" withDefault:@"Emoticons"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + ++ (CGFloat)defaultDockedNumber +{ + return 7; +} + +#pragma mark- optional info + ++ (NSString*)defaultEmoticonPath +{ + return [[[CLImageEditorTheme bundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@/Emoticons", NSStringFromClass(self)]]; +} + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLEmoticonToolEmoticonPathKey:[self defaultEmoticonPath], + kCLEmoticonToolDeleteIconName:@"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + + _workingView = [[UIView alloc] initWithFrame:[self.editor.view convertRect:self.editor.imageView.frame fromView:self.editor.imageView.superview]]; + _workingView.clipsToBounds = YES; + [self.editor.view addSubview:_workingView]; + + [self setEmoticonMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + + [_workingView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + [_CLEmoticonView setActiveEmoticonView:nil]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImage:self->_originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (void)setEmoticonMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSString *EmoticonPath = self.toolInfo.optionalInfo[kCLEmoticonToolEmoticonPathKey]; + if(EmoticonPath==nil){ EmoticonPath = [[self class] defaultEmoticonPath]; } + + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSError *error = nil; + NSArray *list = [fileManager contentsOfDirectoryAtPath:EmoticonPath error:&error]; + + for(NSString *path in list){ + NSString *filePath = [NSString stringWithFormat:@"%@/%@", EmoticonPath, path]; + UIImage *image = [UIImage imageWithContentsOfFile:filePath]; + if(image){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedEmoticonPanel:) toolInfo:nil]; + view.iconImage = [image aspectFit:CGSizeMake(50, 50)]; + view.userInfo = @{@"filePath" : filePath}; + + [_menuScroll addSubview:view]; + x += W; + } + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedEmoticonPanel:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + NSString *filePath = view.userInfo[@"filePath"]; + if(filePath){ + _CLEmoticonView *view = [[_CLEmoticonView alloc] initWithImage:[UIImage imageWithContentsOfFile:filePath] tool:self]; + CGFloat ratio = MIN( (0.5 * _workingView.width) / view.width, (0.5 * _workingView.height) / view.height); + [view setScale:ratio]; + view.center = CGPointMake(_workingView.width/2, _workingView.height/2); + + [_workingView addSubview:view]; + [_CLEmoticonView setActiveEmoticonView:view]; + } + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; +} + +- (UIImage*)buildImage:(UIImage*)image +{ + __block CALayer *layer = nil; + __block CGFloat scale = 1; + + safe_dispatch_sync_main(^{ + scale = image.size.width / self->_workingView.width; + layer = self->_workingView.layer; + }); + + UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); + + [image drawAtPoint:CGPointZero]; + + CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale); + [layer renderInContext:UIGraphicsGetCurrentContext()]; + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +@end + + +@implementation _CLEmoticonView +{ + UIImageView *_imageView; + UIButton *_deleteButton; + CLCircleView *_circleView; + + CGFloat _scale; + CGFloat _arg; + + CGPoint _initialPoint; + CGFloat _initialArg; + CGFloat _initialScale; +} + ++ (void)setActiveEmoticonView:(_CLEmoticonView*)view +{ + static _CLEmoticonView *activeView = nil; + if(view != activeView){ + [activeView setAvtive:NO]; + activeView = view; + [activeView setAvtive:YES]; + + [activeView.superview bringSubviewToFront:activeView]; + } +} + +- (id)initWithImage:(UIImage *)image tool:(CLEmoticonTool*)tool +{ + self = [super initWithFrame:CGRectMake(0, 0, image.size.width+32, image.size.height+32)]; + if(self){ + _imageView = [[UIImageView alloc] initWithImage:image]; + _imageView.layer.borderColor = [[UIColor blackColor] CGColor]; + _imageView.layer.cornerRadius = 3; + _imageView.center = self.center; + [self addSubview:_imageView]; + + _deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; + + [_deleteButton setImage:[tool imageForKey:kCLEmoticonToolDeleteIconName defaultImageName:@"btn_delete.png"] forState:UIControlStateNormal]; + _deleteButton.frame = CGRectMake(0, 0, 32, 32); + _deleteButton.center = _imageView.frame.origin; + [_deleteButton addTarget:self action:@selector(pushedDeleteBtn:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:_deleteButton]; + + _circleView = [[CLCircleView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + _circleView.center = CGPointMake(_imageView.width + _imageView.frame.origin.x, _imageView.height + _imageView.frame.origin.y); + _circleView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + _circleView.radius = 0.7; + _circleView.color = [UIColor whiteColor]; + _circleView.borderColor = [UIColor blackColor]; + _circleView.borderWidth = 5; + [self addSubview:_circleView]; + + _scale = 1; + _arg = 0; + + [self initGestures]; + } + return self; +} + +- (void)initGestures +{ + _imageView.userInteractionEnabled = YES; + [_imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTap:)]]; + [_imageView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidPan:)]]; + [_circleView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(circleViewDidPan:)]]; +} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event +{ + UIView* view= [super hitTest:point withEvent:event]; + if(view==self){ + return nil; + } + return view; +} + +- (UIImageView*)imageView +{ + return _imageView; +} + +- (void)pushedDeleteBtn:(id)sender +{ + _CLEmoticonView *nextTarget = nil; + + const NSInteger index = [self.superview.subviews indexOfObject:self]; + + for(NSInteger i=index+1; i=0; --i){ + UIView *view = [self.superview.subviews objectAtIndex:i]; + if([view isKindOfClass:[_CLEmoticonView class]]){ + nextTarget = (_CLEmoticonView*)view; + break; + } + } + } + + [[self class] setActiveEmoticonView:nextTarget]; + [self removeFromSuperview]; +} + +- (void)setAvtive:(BOOL)active +{ + _deleteButton.hidden = !active; + _circleView.hidden = !active; + _imageView.layer.borderWidth = (active) ? 1/_scale : 0; +} + +- (void)setScale:(CGFloat)scale +{ + _scale = scale; + + self.transform = CGAffineTransformIdentity; + + _imageView.transform = CGAffineTransformMakeScale(_scale, _scale); + + CGRect rct = self.frame; + rct.origin.x += (rct.size.width - (_imageView.width + 32)) / 2; + rct.origin.y += (rct.size.height - (_imageView.height + 32)) / 2; + rct.size.width = _imageView.width + 32; + rct.size.height = _imageView.height + 32; + self.frame = rct; + + _imageView.center = CGPointMake(rct.size.width/2, rct.size.height/2); + + self.transform = CGAffineTransformMakeRotation(_arg); + + _imageView.layer.borderWidth = 1/_scale; + _imageView.layer.cornerRadius = 3/_scale; +} + +- (void)viewDidTap:(UITapGestureRecognizer*)sender +{ + [[self class] setActiveEmoticonView:self]; +} + +- (void)viewDidPan:(UIPanGestureRecognizer*)sender +{ + [[self class] setActiveEmoticonView:self]; + + CGPoint p = [sender translationInView:self.superview]; + + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = self.center; + } + self.center = CGPointMake(_initialPoint.x + p.x, _initialPoint.y + p.y); +} + +- (void)circleViewDidPan:(UIPanGestureRecognizer*)sender +{ + CGPoint p = [sender translationInView:self.superview]; + + static CGFloat tmpR = 1; + static CGFloat tmpA = 0; + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = [self.superview convertPoint:_circleView.center fromView:_circleView.superview]; + + CGPoint p = CGPointMake(_initialPoint.x - self.center.x, _initialPoint.y - self.center.y); + tmpR = sqrt(p.x*p.x + p.y*p.y); + tmpA = atan2(p.y, p.x); + + _initialArg = _arg; + _initialScale = _scale; + } + + p = CGPointMake(_initialPoint.x + p.x - self.center.x, _initialPoint.y + p.y - self.center.y); + CGFloat R = sqrt(p.x*p.x + p.y*p.y); + CGFloat arg = atan2(p.y, p.x); + + _arg = _initialArg + arg - tmpA; + [self setScale:MAX(_initialScale * R / tmpR, 0.2)]; +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.h new file mode 100644 index 0000000..405a1dc --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.h @@ -0,0 +1,12 @@ +// +// CLResizeTool.h +// +// Created by sho yakushiji on 2013/12/12. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLResizeTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.m new file mode 100644 index 0000000..2db9931 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.m @@ -0,0 +1,526 @@ +// +// CLResizeTool.m +// +// Created by sho yakushiji on 2013/12/12. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLResizeTool.h" + +static NSString* const kCLResizeToolPresetSizes = @"presetSizes"; +static NSString* const kCLResizeToolLimitSize = @"limitSize"; +static NSString* const kCLResizeToolHorizontalIconName = @"horizontalIconAssetsName"; +static NSString* const kCLResizeToolVerticalIconName = @"verticalIconAssetsName"; +static NSString* const kCLResizeToolChainOnIconName = @"chainOnIconAssetsName"; +static NSString* const kCLResizeToolChainOffIconName = @"chainOffIconAssetsName"; + +@interface _CLResizePanel : UIView + +- (id)initWithFrame:(CGRect)frame originalSize:(CGSize)size tool:(CLResizeTool*)tool; +- (void)setImageWidth:(CGFloat)width; +- (void)setImageHeight:(CGFloat)height; +- (void)setLimitSize:(CGFloat)limit; +- (CGSize)imageSize; +@end + + +@implementation CLResizeTool +{ + UIImage *_originalImage; + + UIView *_menuContainer; + CLToolbarMenuItem *_switchBtn; + UIScrollView *_menuScroll; + _CLResizePanel *_resizePanel; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLResizeTool_DefaultTitle" withDefault:@"Resize"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + ++ (CGFloat)defaultDockedNumber +{ + return 5.5; +} + +#pragma mark- optional info + ++ (NSArray*)defaultPresetSizes +{ + return @[@240, @320, @480, @640, @800, @960, @1024, @2048]; +} + ++ (NSNumber*)defaultLimitSize +{ + return @3200; +} + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLResizeToolPresetSizes:[self defaultPresetSizes], + kCLResizeToolLimitSize:[self defaultLimitSize], + kCLResizeToolHorizontalIconName:@"", + kCLResizeToolVerticalIconName:@"", + kCLResizeToolChainOnIconName:@"", + kCLResizeToolChainOffIconName:@"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _menuContainer = [[UIView alloc] initWithFrame:self.editor.menuView.frame]; + _menuContainer.backgroundColor = self.editor.menuView.backgroundColor; + [self.editor.view addSubview:_menuContainer]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, _menuContainer.width - 70, _menuContainer.height)]; + _menuScroll.backgroundColor = [UIColor clearColor]; + _menuScroll.showsHorizontalScrollIndicator = NO; + _menuScroll.clipsToBounds = NO; + [_menuContainer addSubview:_menuScroll]; + + UIView *btnPanel = [[UIView alloc] initWithFrame:CGRectMake(_menuScroll.right, 0, 70, _menuContainer.height)]; + btnPanel.backgroundColor = [_menuContainer.backgroundColor colorWithAlphaComponent:0.97]; + [_menuContainer addSubview:btnPanel]; + + _switchBtn = [CLImageEditorTheme menuItemWithFrame:CGRectMake(0, 0, 70, btnPanel.height) target:self action:@selector(pushedSwitchBtn:) toolInfo:nil]; + _switchBtn.tag = 0; + + _switchBtn.iconImage = [self imageForKey:kCLResizeToolHorizontalIconName defaultImageName:@"btn_width.png"]; + [btnPanel addSubview:_switchBtn]; + + NSNumber *limit = self.toolInfo.optionalInfo[kCLResizeToolLimitSize]; + if(limit==nil){ limit = [self.class defaultLimitSize]; } + + _resizePanel = [[_CLResizePanel alloc] initWithFrame:self.editor.imageView.superview.frame originalSize:_originalImage.size tool:self]; + _resizePanel.backgroundColor = [[CLImageEditorTheme toolbarColor] colorWithAlphaComponent:0.4]; + [_resizePanel setLimitSize:limit.floatValue]; + [self.editor.view addSubview:_resizePanel]; + + [self setResizeMenu]; + + _menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + + [_resizePanel endEditing:YES]; + [_resizePanel removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuContainer.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuContainer removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + CGSize size = _resizePanel.imageSize; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + + if(size.width>0 && size.height>0){ + UIImage *image = [self->_originalImage resize:size]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + } + else{ + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(nil, nil, nil); + }); + } + }); +} + +#pragma mark- + +- (UIImage*)imageWithString:(NSString*)str +{ + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 100)]; + label.textAlignment = NSTextAlignmentCenter; + label.text = str; + label.font = [UIFont boldSystemFontOfSize:30]; + label.minimumScaleFactor = 0.5; + + label.backgroundColor = [[CLImageEditorTheme theme] toolbarTextColor]; + label.textColor = [[CLImageEditorTheme theme] toolbarColor]; + + UIGraphicsBeginImageContextWithOptions(label.frame.size, NO, 0.0); + [label.layer renderInContext:UIGraphicsGetCurrentContext()]; + UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); + UIGraphicsEndImageContext(); + + return image; +} + +- (void)setResizeMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSArray *sizes = self.toolInfo.optionalInfo[kCLResizeToolPresetSizes]; + if(sizes==nil || ![sizes isKindOfClass:[NSArray class]] || sizes.count==0){ + sizes = [[self class] defaultPresetSizes]; + } + + for(NSNumber *size in sizes){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedResizePanel:) toolInfo:nil]; + view.userInfo = @{@"size":size}; + view.iconImage = [self imageWithString:[NSString stringWithFormat:@"%@", size]]; + + [_menuScroll addSubview:view]; + x += W; + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)pushedSwitchBtn:(UITapGestureRecognizer*)sender +{ + if(_switchBtn.tag==0){ + _switchBtn.tag = 1; + _switchBtn.iconImage = [self imageForKey:kCLResizeToolVerticalIconName defaultImageName:@"btn_height.png"]; + } + else{ + _switchBtn.tag = 0; + _switchBtn.iconImage = [self imageForKey:kCLResizeToolHorizontalIconName defaultImageName:@"btn_width.png"]; + } + + _switchBtn.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_switchBtn.alpha = 1; + } + ]; +} + +- (void)tappedResizePanel:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + NSNumber *size = view.userInfo[@"size"]; + if(size){ + if(_switchBtn.tag==0){ + [_resizePanel setImageWidth:size.floatValue]; + } + else{ + [_resizePanel setImageHeight:size.floatValue]; + } + } + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; +} + +@end + + + + + +@implementation _CLResizePanel +{ + UIView *_infoPanel; + CGSize _originalSize; + + CGFloat _limitSize; + UITextField *_fieldW; + UITextField *_fieldH; + + UIButton *_chainBtn; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if(self){ + _infoPanel = [[UIView alloc] initWithFrame:CGRectMake(0, 0, frame.size.width*0.85, 180)]; + _infoPanel.backgroundColor = [[CLImageEditorTheme toolbarColor] colorWithAlphaComponent:0.9]; + _infoPanel.layer.cornerRadius = 5; + _infoPanel.center = CGPointMake(self.width/2, self.height/2); + _infoPanel.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleTopMargin; + [self addSubview:_infoPanel]; + + [self addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTap:)]]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillChange:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillChange:) name:UIKeyboardWillHideNotification object:nil]; + } + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (id)initWithFrame:(CGRect)frame originalSize:(CGSize)size tool:(CLResizeTool *)tool +{ + self = [self initWithFrame:frame]; + if(self){ + _originalSize = size; + [self initInfoPanelWithTool:tool]; + } + return self; +} + +- (void)initInfoPanelWithTool:(CLResizeTool*)tool +{ + UIFont *font = [CLImageEditorTheme toolbarTextFont]; + + CGFloat y = 0; + UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, _infoPanel.width-20, 30)]; + [label setTextColor:[CLImageEditorTheme toolbarTextColor]]; + label.backgroundColor = [UIColor clearColor]; + label.font = [font fontWithSize:17]; + + label.text = [CLImageEditorTheme localizedString:@"CLResizeTool_InfoPanelTextOriginalSize" withDefault:@"Original Image Size:"]; + [_infoPanel addSubview:label]; + y = label.bottom; + + label = [[UILabel alloc] initWithFrame:CGRectMake(10, y, _infoPanel.width-20, 50)]; + [label setTextColor:[CLImageEditorTheme toolbarTextColor]]; + label.backgroundColor = [UIColor clearColor]; + label.font = [font fontWithSize:30]; + label.text = [NSString stringWithFormat:@"%ld x %ld", (long)_originalSize.width, (long)_originalSize.height]; + label.textAlignment = NSTextAlignmentCenter; + [_infoPanel addSubview:label]; + //y = label.bottom; + + label = [[UILabel alloc] initWithFrame:CGRectMake(10, _infoPanel.height/2, _infoPanel.width-20, 30)]; + [label setTextColor:[CLImageEditorTheme toolbarTextColor]]; + label.backgroundColor = [UIColor clearColor]; + label.font = [font fontWithSize:17]; + label.text = [CLImageEditorTheme localizedString:@"CLResizeTool_InfoPanelTextNewSize" withDefault:@"New Image Size:"]; + [_infoPanel addSubview:label]; + y = label.bottom; + /* + label = [[UILabel alloc] initWithFrame:CGRectMake(10, y, _infoPanel.width-20, 50)]; + label.backgroundColor = [UIColor clearColor]; + label.font = [font fontWithSize:30]; + label.text = @"x"; + label.textAlignment = NSTextAlignmentCenter; + [_infoPanel addSubview:label]; + */ + _chainBtn = [UIButton buttonWithType:UIButtonTypeCustom]; + _chainBtn.frame = CGRectMake(0, 0, 35, 35); + _chainBtn.center = CGPointMake(label.center.x, y + 25); + + [_chainBtn setImage:[tool imageForKey:kCLResizeToolChainOffIconName defaultImageName:@"btn_chain_off.png"] forState:UIControlStateNormal]; + [_chainBtn setImage:[tool imageForKey:kCLResizeToolChainOnIconName defaultImageName:@"btn_chain_on.png"] forState:UIControlStateSelected]; + [_chainBtn addTarget:self action:@selector(chainBtnDidPush:) forControlEvents:UIControlEventTouchUpInside]; + _chainBtn.selected = YES; + [_infoPanel addSubview:_chainBtn]; + + _fieldW = [[UITextField alloc] initWithFrame:CGRectMake(_chainBtn.left - 110, y+5, 100, 40)]; + [_fieldW setTextColor:[CLImageEditorTheme toolbarTextColor]]; + _fieldW.font = [font fontWithSize:30]; + _fieldW.textAlignment = NSTextAlignmentCenter; + _fieldW.keyboardType = UIKeyboardTypeNumberPad; + _fieldW.layer.borderWidth = 1; + _fieldW.layer.borderColor = [[[CLImageEditorTheme theme] toolbarTextColor] CGColor]; + _fieldW.text = [NSString stringWithFormat:@"%ld", (long)_originalSize.width]; + _fieldW.delegate = self; + [_fieldW addTarget:self action:@selector(textFieldDidChanged:) forControlEvents:UIControlEventEditingChanged]; + [_infoPanel addSubview:_fieldW]; + + _fieldH = [[UITextField alloc] initWithFrame:CGRectMake(_chainBtn.right + 10, y+5, 100, 40)]; + [_fieldH setTextColor:[CLImageEditorTheme toolbarTextColor]]; + _fieldH.font = [font fontWithSize:30]; + _fieldH.textAlignment = NSTextAlignmentCenter; + _fieldH.keyboardType = UIKeyboardTypeNumberPad; + _fieldH.layer.borderWidth = 1; + _fieldH.layer.borderColor = _fieldW.layer.borderColor; + _fieldH.text = [NSString stringWithFormat:@"%ld", (long)_originalSize.height]; + _fieldH.delegate = self; + [_fieldH addTarget:self action:@selector(textFieldDidChanged:) forControlEvents:UIControlEventEditingChanged]; + [_infoPanel addSubview:_fieldH]; +} + +#pragma mark - gesture events + +- (void)viewDidTap:(UITapGestureRecognizer*)sender +{ + [self endEditing:YES]; +} + +- (void)chainBtnDidPush:(UIButton*)sender +{ + sender.selected = !sender.selected; + + CGFloat W = _fieldW.text.floatValue; + CGFloat H = _fieldH.text.floatValue; + if(W>H){ + [self setImageWidth:W]; + } + else{ + [self setImageHeight:H]; + } +} + +#pragma mark - keyboard events + +- (void)keyBoardWillChange:(NSNotification *)notificatioin +{ + CGRect keyboardFrame = [[notificatioin.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + keyboardFrame = [self.superview convertRect:keyboardFrame fromView:self.window]; + + UIViewAnimationCurve animationCurve = [[notificatioin.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]; + double duration = [[notificatioin.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + [UIView animateWithDuration:duration + delay:0 + options:UIViewAnimationOptionBeginFromCurrentState | (animationCurve<<16) + animations:^{ + CGFloat H = MIN(self.height, keyboardFrame.origin.y - self.top); + self->_infoPanel.center = CGPointMake(self->_infoPanel.center.x, H/2); + } completion:^(BOOL finished) { + + } + ]; +} + +#pragma mark- Size settings + +- (void)setLimitSize:(CGFloat)limit +{ + _limitSize = limit; + [self setImageWidth:_fieldW.text.floatValue]; +} + +- (void)setImageWidth:(CGFloat)width +{ + width = MIN(width, _limitSize); + + if(_chainBtn.selected){ + if(width>0){ + CGFloat height = MAX(1, width * _originalSize.height / _originalSize.width); + + if(height>_limitSize){ + [self setImageHeight:_limitSize]; + } + else{ + _fieldW.text = [NSString stringWithFormat:@"%ld", (long)width]; + _fieldH.text = [NSString stringWithFormat:@"%ld", (long)height]; + } + } + else{ + _fieldH.text = @""; + } + } + else if(width>0){ + _fieldW.text = [NSString stringWithFormat:@"%ld", (long)width]; + } +} + +- (void)setImageHeight:(CGFloat)height +{ + height = MIN(height, _limitSize); + + if(_chainBtn.selected){ + if(height>0){ + CGFloat width = MAX(1, height * _originalSize.width / _originalSize.height); + + if(width>_limitSize){ + [self setImageWidth:_limitSize]; + } + else{ + _fieldW.text = [NSString stringWithFormat:@"%ld", (long)width]; + _fieldH.text = [NSString stringWithFormat:@"%ld", (long)height]; + } + } + else{ + _fieldW.text = @""; + } + } + else if(height>0){ + _fieldH.text = [NSString stringWithFormat:@"%ld", (long)height]; + } +} + +- (void)textFieldDidChanged:(id)sender +{ + if(sender==_fieldW){ + [self setImageWidth:_fieldW.text.floatValue]; + } + else if(sender==_fieldH){ + [self setImageHeight:_fieldH.text.floatValue]; + } +} + +- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string +{ + if(textField==_fieldW || textField==_fieldH){ + if((string != nil) && (![@"" isEqualToString:string])){ + const char *c = [string cStringUsingEncoding:NSASCIIStringEncoding]; + if(c[0]==0){ return YES; } + else if([textField.text length]>=4){ return NO; } + else {return [self isNumber:string]; } + } + } + return YES; +} + +- (BOOL)isNumber:(NSString *)value +{ + if(value == nil || [@"" isEqualToString:value]){ return NO; } + + BOOL isNum = NO; + + for(int i=0; i<[value length]; i++){ + NSString *str = [[value substringFromIndex:i] substringToIndex:1]; + + const char *c = [str cStringUsingEncoding:NSASCIIStringEncoding]; + isNum = ((c!=NULL)&&(c[0]>=0x30)&&(c[0]<=0x39)); + + if(_fieldW.text.length==0 && i==0 && (c!=NULL&&c[0]==0x30)){ isNum = NO; } + + if(!isNum){ break; } + } + + return isNum; +} + +- (CGSize)imageSize +{ + __block CGSize size = CGSizeZero; + + safe_dispatch_sync_main(^{ + size = CGSizeMake(self->_fieldW.text.floatValue, self->_fieldH.text.floatValue); + }); + return size; +} + +@end + diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.h new file mode 100644 index 0000000..a167a94 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.h @@ -0,0 +1,12 @@ +// +// CLSplashTool.h +// +// Created by sho yakushiji on 2014/06/21. +// Copyright (c) 2014年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLSplashTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.m new file mode 100644 index 0000000..43c5f09 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.m @@ -0,0 +1,291 @@ +// +// CLSplashTool.m +// +// Created by sho yakushiji on 2014/06/21. +// Copyright (c) 2014年 CALACULU. All rights reserved. +// + +#import "CLSplashTool.h" + +static NSString* const kCLSplashToolEraserIconName = @"eraserIconAssetsName"; + +@implementation CLSplashTool +{ + UIImageView *_drawingView; + UIImage *_maskImage; + UIImage *_grayImage; + CGSize _originalImageSize; + + CGPoint _prevDraggingPosition; + UIView *_menuView; + UISlider *_widthSlider; + UIView *_strokePreview; + UIView *_strokePreviewBackground; + UIImageView *_eraserIcon; + + CLToolbarMenuItem *_colorBtn; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLSplashTool_DefaultTitle" withDefault:@"Splash"]; +} + ++ (BOOL)isAvailable +{ + return YES; +} + ++ (CGFloat)defaultDockedNumber +{ + return 4.6; +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLSplashToolEraserIconName : @"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImageSize = self.editor.imageView.image.size; + + _drawingView = [[UIImageView alloc] initWithFrame:self.editor.imageView.bounds]; + _drawingView.contentMode = UIViewContentModeScaleAspectFit; + + _grayImage = [[self.editor.imageView.image aspectFit:CGSizeMake(_drawingView.width*2, _drawingView.height*2)] grayScaleImage]; + _drawingView.image = _grayImage; + + UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(drawingViewDidPan:)]; + panGesture.maximumNumberOfTouches = 1; + + _drawingView.userInteractionEnabled = YES; + [_drawingView addGestureRecognizer:panGesture]; + + [self.editor.imageView addSubview:_drawingView]; + self.editor.imageView.userInteractionEnabled = YES; + self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2; + self.editor.scrollView.panGestureRecognizer.delaysTouchesBegan = NO; + self.editor.scrollView.pinchGestureRecognizer.delaysTouchesBegan = NO; + + _menuView = [[UIView alloc] initWithFrame:self.editor.menuView.frame]; + _menuView.backgroundColor = self.editor.menuView.backgroundColor; + [self.editor.view addSubview:_menuView]; + + [self setMenu]; + + _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuView.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [_drawingView removeFromSuperview]; + self.editor.imageView.userInteractionEnabled = NO; + self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 1; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuView.top); + } + completion:^(BOOL finished) { + [self->_menuView removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + UIImage *backgroundImage = self.editor.imageView.image; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImageWithBackgroundImage:backgroundImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (UISlider*)defaultSliderWithWidth:(CGFloat)width +{ + UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, width, 34)]; + + [slider setMaximumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setMinimumTrackImage:[UIImage new] forState:UIControlStateNormal]; + [slider setThumbImage:[UIImage new] forState:UIControlStateNormal]; + slider.thumbTintColor = [UIColor whiteColor]; + + return slider; +} + +- (UIImage*)widthSliderBackground +{ + CGSize size = _widthSlider.frame.size; + + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + UIColor *color = [[[CLImageEditorTheme theme] toolbarTextColor] colorWithAlphaComponent:0.5]; + + CGFloat strRadius = 1; + CGFloat endRadius = size.height/2 * 0.6; + + CGPoint strPoint = CGPointMake(strRadius + 5, size.height/2 - 2); + CGPoint endPoint = CGPointMake(size.width-endRadius - 1, strPoint.y); + + CGMutablePathRef path = CGPathCreateMutable(); + CGPathAddArc(path, NULL, strPoint.x, strPoint.y, strRadius, -M_PI/2, M_PI-M_PI/2, YES); + CGPathAddLineToPoint(path, NULL, endPoint.x, endPoint.y + endRadius); + CGPathAddArc(path, NULL, endPoint.x, endPoint.y, endRadius, M_PI/2, M_PI+M_PI/2, YES); + CGPathAddLineToPoint(path, NULL, strPoint.x, strPoint.y - strRadius); + + CGPathCloseSubpath(path); + + CGContextAddPath(context, path); + CGContextSetFillColorWithColor(context, color.CGColor); + CGContextFillPath(context); + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + CGPathRelease(path); + + UIGraphicsEndImageContext(); + + return tmp; +} + +- (void)setMenu +{ + CGFloat W = 70; + + _widthSlider = [self defaultSliderWithWidth:_menuView.width - W - 20]; + _widthSlider.left = 10; + _widthSlider.top = _menuView.height/2 - _widthSlider.height/2; + [_widthSlider addTarget:self action:@selector(widthSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + _widthSlider.value = 0.1; + _widthSlider.backgroundColor = [UIColor colorWithPatternImage:[self widthSliderBackground]]; + [_menuView addSubview:_widthSlider]; + + _strokePreview = [[UIView alloc] initWithFrame:CGRectMake(0, 0, W - 5, W - 5)]; + _strokePreview.layer.cornerRadius = _strokePreview.height/2; + _strokePreview.layer.borderWidth = 1; + _strokePreview.layer.borderColor = [[[CLImageEditorTheme theme] toolbarTextColor] CGColor]; + _strokePreview.center = CGPointMake(_menuView.width-W/2, _menuView.height/2); + [_menuView addSubview:_strokePreview]; + + _strokePreviewBackground = [[UIView alloc] initWithFrame:_strokePreview.frame]; + _strokePreviewBackground.layer.cornerRadius = _strokePreviewBackground.height/2; + _strokePreviewBackground.alpha = 0.3; + [_strokePreviewBackground addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(strokePreviewDidTap:)]]; + [_menuView insertSubview:_strokePreviewBackground aboveSubview:_strokePreview]; + + _strokePreview.backgroundColor = [[CLImageEditorTheme theme] toolbarTextColor]; + _strokePreviewBackground.backgroundColor = _strokePreview.backgroundColor; + + _eraserIcon = [[UIImageView alloc] initWithFrame:_strokePreview.frame]; + _eraserIcon.image = [self imageForKey:kCLSplashToolEraserIconName defaultImageName:@"btn_eraser.png"]; + _eraserIcon.hidden = YES; + [_menuView addSubview:_eraserIcon]; + + [self widthSliderDidChange:_widthSlider]; + + _menuView.clipsToBounds = NO; +} + +- (void)widthSliderDidChange:(UISlider*)sender +{ + CGFloat scale = MAX(0.05, _widthSlider.value); + _strokePreview.transform = CGAffineTransformMakeScale(scale, scale); + _strokePreview.layer.borderWidth = 2/scale; +} + +- (void)strokePreviewDidTap:(UITapGestureRecognizer*)sender +{ + _eraserIcon.hidden = !_eraserIcon.hidden; +} + +- (void)drawingViewDidPan:(UIPanGestureRecognizer*)sender +{ + CGPoint currentDraggingPosition = [sender locationInView:_drawingView]; + + if(sender.state == UIGestureRecognizerStateBegan){ + _prevDraggingPosition = currentDraggingPosition; + } + + if(sender.state != UIGestureRecognizerStateEnded){ + [self drawLine:_prevDraggingPosition to:currentDraggingPosition]; + _drawingView.image = [_grayImage maskedImage:_maskImage]; + } + _prevDraggingPosition = currentDraggingPosition; +} + +-(void)drawLine:(CGPoint)from to:(CGPoint)to +{ + CGSize size = _drawingView.frame.size; + UIGraphicsBeginImageContextWithOptions(size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGFloat strokeWidth = MAX(1, _widthSlider.value * 65); + + if(_maskImage==nil){ + CGContextSetFillColorWithColor(context, [[UIColor blackColor] CGColor]); + CGContextFillRect(context, CGRectMake(0, 0, size.width, size.height)); + } + else{ + [_maskImage drawAtPoint:CGPointZero]; + } + + CGContextSetLineWidth(context, strokeWidth); + CGContextSetLineCap(context, kCGLineCapRound); + + if(!_eraserIcon.hidden){ + CGContextSetStrokeColorWithColor(context, [[UIColor blackColor] CGColor]); + } + else{ + CGContextSetStrokeColorWithColor(context, [[UIColor whiteColor] CGColor]); + } + + CGContextMoveToPoint(context, from.x, from.y); + CGContextAddLineToPoint(context, to.x, to.y); + CGContextStrokePath(context); + + _maskImage = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); +} + +- (UIImage*)buildImageWithBackgroundImage:(UIImage*)backgroundImage +{ + _grayImage = [backgroundImage grayScaleImage]; + + UIGraphicsBeginImageContextWithOptions(_originalImageSize, NO, backgroundImage.scale); + + [backgroundImage drawAtPoint:CGPointZero]; + [[_grayImage maskedImage:_maskImage] drawInRect:CGRectMake(0, 0, _originalImageSize.width, _originalImageSize.height)]; + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.h new file mode 100644 index 0000000..5bf1c98 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.h @@ -0,0 +1,12 @@ +// +// CLStickerTool.h +// +// Created by sho yakushiji on 2013/12/11. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLStickerTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.m new file mode 100644 index 0000000..49d1924 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.m @@ -0,0 +1,389 @@ +// +// CLStickerTool.m +// +// Created by sho yakushiji on 2013/12/11. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLStickerTool.h" + +#import "CLCircleView.h" + +static NSString* const kCLStickerToolStickerPathKey = @"stickerPath"; +static NSString* const kCLStickerToolDeleteIconName = @"deleteIconAssetsName"; + +@interface _CLStickerView : UIView ++ (void)setActiveStickerView:(_CLStickerView*)view; +- (UIImageView*)imageView; +- (id)initWithImage:(UIImage *)image tool:(CLStickerTool*)tool; +- (void)setScale:(CGFloat)scale; +@end + + + +@implementation CLStickerTool +{ + UIImage *_originalImage; + + UIView *_workingView; + + UIScrollView *_menuScroll; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLStickerTool_DefaultTitle" withDefault:@"Sticker"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + ++ (CGFloat)defaultDockedNumber +{ + return 7; +} + +#pragma mark- optional info + ++ (NSString*)defaultStickerPath +{ + return [[[CLImageEditorTheme bundle] bundlePath] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@/stickers", NSStringFromClass(self)]]; +} + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLStickerToolStickerPathKey:[self defaultStickerPath], + kCLStickerToolDeleteIconName:@"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + + [self.editor fixZoomScaleWithAnimated:YES]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + + _workingView = [[UIView alloc] initWithFrame:[self.editor.view convertRect:self.editor.imageView.frame fromView:self.editor.imageView.superview]]; + _workingView.clipsToBounds = YES; + [self.editor.view addSubview:_workingView]; + + [self setStickerMenu]; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + + [_workingView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + [_CLStickerView setActiveStickerView:nil]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImage:self->_originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (void)setStickerMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSString *stickerPath = self.toolInfo.optionalInfo[kCLStickerToolStickerPathKey]; + if(stickerPath==nil){ stickerPath = [[self class] defaultStickerPath]; } + + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSError *error = nil; + NSArray *list = [fileManager contentsOfDirectoryAtPath:stickerPath error:&error]; + + NSArray *sortedList = [list sortedArrayUsingSelector:@selector(compare:)]; //sort stickers alphabetically + + for(NSString *path in sortedList){ + NSString *filePath = [NSString stringWithFormat:@"%@/%@", stickerPath, path]; + UIImage *image = [UIImage imageWithContentsOfFile:filePath]; + if(image){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedStickerPanel:) toolInfo:nil]; + view.iconImage = [image aspectFit:CGSizeMake(50, 50)]; + view.userInfo = @{@"filePath" : filePath}; + view.iconImageContentMode = UIViewContentModeScaleAspectFit; + + [_menuScroll addSubview:view]; + x += W; + } + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedStickerPanel:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + NSString *filePath = view.userInfo[@"filePath"]; + if(filePath){ + _CLStickerView *view = [[_CLStickerView alloc] initWithImage:[UIImage imageWithContentsOfFile:filePath] tool:self]; + CGFloat ratio = MIN( (0.5 * _workingView.width) / view.width, (0.5 * _workingView.height) / view.height); + [view setScale:ratio]; + view.center = CGPointMake(_workingView.width/2, _workingView.height/2); + + [_workingView addSubview:view]; + [_CLStickerView setActiveStickerView:view]; + } + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; +} + +- (UIImage*)buildImage:(UIImage*)image +{ + __block CALayer *layer = nil; + __block CGFloat scale = 1; + + safe_dispatch_sync_main(^{ + scale = image.size.width / self->_workingView.width; + layer = self->_workingView.layer; + }); + + UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); + + [image drawAtPoint:CGPointZero]; + + CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale); + [layer renderInContext:UIGraphicsGetCurrentContext()]; + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +@end + + +@implementation _CLStickerView +{ + UIImageView *_imageView; + UIButton *_deleteButton; + CLCircleView *_circleView; + + CGFloat _scale; + CGFloat _arg; + + CGPoint _initialPoint; + CGFloat _initialArg; + CGFloat _initialScale; +} + ++ (void)setActiveStickerView:(_CLStickerView*)view +{ + static _CLStickerView *activeView = nil; + if(view != activeView){ + [activeView setAvtive:NO]; + activeView = view; + [activeView setAvtive:YES]; + + [activeView.superview bringSubviewToFront:activeView]; + } +} + +- (id)initWithImage:(UIImage *)image tool:(CLStickerTool*)tool +{ + self = [super initWithFrame:CGRectMake(0, 0, image.size.width+32, image.size.height+32)]; + if(self){ + _imageView = [[UIImageView alloc] initWithImage:image]; + _imageView.layer.borderColor = [[UIColor blackColor] CGColor]; + _imageView.layer.cornerRadius = 3; + _imageView.center = self.center; + [self addSubview:_imageView]; + + _deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; + + [_deleteButton setImage:[tool imageForKey:kCLStickerToolDeleteIconName defaultImageName:@"btn_delete.png"] forState:UIControlStateNormal]; + _deleteButton.frame = CGRectMake(0, 0, 32, 32); + _deleteButton.center = _imageView.frame.origin; + [_deleteButton addTarget:self action:@selector(pushedDeleteBtn:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:_deleteButton]; + + _circleView = [[CLCircleView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + _circleView.center = CGPointMake(_imageView.width + _imageView.frame.origin.x, _imageView.height + _imageView.frame.origin.y); + _circleView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + _circleView.radius = 0.7; + _circleView.color = [UIColor whiteColor]; + _circleView.borderColor = [UIColor blackColor]; + _circleView.borderWidth = 5; + [self addSubview:_circleView]; + + _scale = 1; + _arg = 0; + + [self initGestures]; + } + return self; +} + +- (void)initGestures +{ + _imageView.userInteractionEnabled = YES; + [_imageView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTap:)]]; + [_imageView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidPan:)]]; + [_circleView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(circleViewDidPan:)]]; +} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event +{ + UIView* view= [super hitTest:point withEvent:event]; + if(view==self){ + return nil; + } + return view; +} + +- (UIImageView*)imageView +{ + return _imageView; +} + +- (void)pushedDeleteBtn:(id)sender +{ + _CLStickerView *nextTarget = nil; + + const NSInteger index = [self.superview.subviews indexOfObject:self]; + + for(NSInteger i=index+1; i=0; --i){ + UIView *view = [self.superview.subviews objectAtIndex:i]; + if([view isKindOfClass:[_CLStickerView class]]){ + nextTarget = (_CLStickerView*)view; + break; + } + } + } + + [[self class] setActiveStickerView:nextTarget]; + [self removeFromSuperview]; +} + +- (void)setAvtive:(BOOL)active +{ + _deleteButton.hidden = !active; + _circleView.hidden = !active; + _imageView.layer.borderWidth = (active) ? 1/_scale : 0; +} + +- (void)setScale:(CGFloat)scale +{ + _scale = scale; + + self.transform = CGAffineTransformIdentity; + + _imageView.transform = CGAffineTransformMakeScale(_scale, _scale); + + CGRect rct = self.frame; + rct.origin.x += (rct.size.width - (_imageView.width + 32)) / 2; + rct.origin.y += (rct.size.height - (_imageView.height + 32)) / 2; + rct.size.width = _imageView.width + 32; + rct.size.height = _imageView.height + 32; + self.frame = rct; + + _imageView.center = CGPointMake(rct.size.width/2, rct.size.height/2); + + self.transform = CGAffineTransformMakeRotation(_arg); + + _imageView.layer.borderWidth = 1/_scale; + _imageView.layer.cornerRadius = 3/_scale; +} + +- (void)viewDidTap:(UITapGestureRecognizer*)sender +{ + [[self class] setActiveStickerView:self]; +} + +- (void)viewDidPan:(UIPanGestureRecognizer*)sender +{ + [[self class] setActiveStickerView:self]; + + CGPoint p = [sender translationInView:self.superview]; + + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = self.center; + } + self.center = CGPointMake(_initialPoint.x + p.x, _initialPoint.y + p.y); +} + +- (void)circleViewDidPan:(UIPanGestureRecognizer*)sender +{ + CGPoint p = [sender translationInView:self.superview]; + + static CGFloat tmpR = 1; + static CGFloat tmpA = 0; + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = [self.superview convertPoint:_circleView.center fromView:_circleView.superview]; + + CGPoint p = CGPointMake(_initialPoint.x - self.center.x, _initialPoint.y - self.center.y); + tmpR = sqrt(p.x*p.x + p.y*p.y); + tmpA = atan2(p.y, p.x); + + _initialArg = _arg; + _initialScale = _scale; + } + + p = CGPointMake(_initialPoint.x + p.x - self.center.x, _initialPoint.y + p.y - self.center.y); + CGFloat R = sqrt(p.x*p.x + p.y*p.y); + CGFloat arg = atan2(p.y, p.x); + + _arg = _initialArg + arg - tmpA; + [self setScale:MAX(_initialScale * R / tmpR, 0.2)]; +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.h new file mode 100644 index 0000000..fff2853 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.h @@ -0,0 +1,30 @@ +// +// CLFontPickerView.h +// +// Created by sho yakushiji on 2013/12/14. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLFontPickerViewDelegate; + +@interface CLFontPickerView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) NSArray *fontList; +@property (nonatomic, strong) NSArray *fontSizes; +@property (nonatomic, strong) UIFont *font; +@property (nonatomic, strong) NSString *text; +@property (nonatomic, assign) BOOL sizeComponentHidden; +@property (nonatomic, strong) UIColor *foregroundColor; +@property (nonatomic, strong) UIColor *textColor; + +@end + + +@protocol CLFontPickerViewDelegate +@optional +- (void)fontPickerView:(CLFontPickerView*)pickerView didSelectFont:(UIFont*)font; + +@end \ No newline at end of file diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.m new file mode 100644 index 0000000..7b44d56 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.m @@ -0,0 +1,211 @@ +// +// CLFontPickerView.m +// +// Created by sho yakushiji on 2013/12/14. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLFontPickerView.h" + +#import "UIView+Frame.h" +#import "CLPickerView.h" + +const CGFloat kCLFontPickerViewConstantFontSize = 14; + +@interface CLFontPickerView() + +@end + +@implementation CLFontPickerView +{ + CLPickerView *_pickerView; +} + ++ (NSArray*)allFontList +{ + NSMutableArray *list = [NSMutableArray array]; + + for(NSString *familyName in [UIFont familyNames]){ + for(NSString *fontName in [UIFont fontNamesForFamilyName:familyName]){ + [list addObject:[UIFont fontWithName:fontName size:kCLFontPickerViewConstantFontSize]]; + } + } + + return [list sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"fontName" ascending:YES]]]; +} + ++ (NSArray*)defaultSizes +{ + return @[@8, @10, @12, @14, @16, @18, @20, @24, @28, @32, @38, @44, @50]; +} + ++ (UIFont*)defaultFont +{ + return [UIFont fontWithName:@"HiraKakuProN-W3"size:kCLFontPickerViewConstantFontSize]; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + self.clipsToBounds = YES; + + _pickerView = [[CLPickerView alloc] initWithFrame:self.bounds]; + _pickerView.center = CGPointMake(self.width/2, self.height/2); + _pickerView.backgroundColor = [UIColor clearColor]; + _pickerView.dataSource = self; + _pickerView.delegate = self; + [self addSubview:_pickerView]; + + self.fontList = [self.class allFontList]; + self.fontSizes = [self.class defaultSizes]; + self.font = [self.class defaultFont]; + self.foregroundColor = [UIColor colorWithWhite:1 alpha:0.8]; + self.textColor = [UIColor blackColor]; + } + return self; +} + +- (void)setForegroundColor:(UIColor *)foregroundColor +{ + _pickerView.foregroundColor = foregroundColor; +} + +- (UIColor*)foregroundColor +{ + return _pickerView.foregroundColor; +} + +- (void)setFontList:(NSArray *)fontList +{ + if(fontList != _fontList){ + _fontList = fontList; + [_pickerView reloadComponent:0]; + } +} + +- (void)setFontSizes:(NSArray *)fontSizes +{ + if(fontSizes != _fontSizes){ + _fontSizes = fontSizes; + [_pickerView reloadComponent:1]; + } +} + +- (void)setFont:(UIFont *)font +{ + UIFont *tmp = [font fontWithSize:kCLFontPickerViewConstantFontSize]; + + NSInteger fontIndex = [self.fontList indexOfObject:tmp]; + if(fontIndex==NSNotFound){ fontIndex = 0; } + + NSInteger sizeIndex = 0; + for(sizeIndex=0; sizeIndex0){ + lbl.text = self.text; + } + else{ + lbl.text = [NSString stringWithFormat:@"%@", lbl.font.fontName]; + } + break; + case 1: + lbl.font = [UIFont systemFontOfSize:kCLFontPickerViewConstantFontSize]; + lbl.text = [NSString stringWithFormat:@"%@", self.fontSizes[row]]; + break; + default: + break; + } + + return lbl; +} + +- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component +{ + if([self.delegate respondsToSelector:@selector(fontPickerView:didSelectFont:)]){ + [self.delegate fontPickerView:self didSelectFont:self.font]; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.h new file mode 100644 index 0000000..165c20d --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.h @@ -0,0 +1,43 @@ +// +// CLPickerDrum.h +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLPickerDrumDataSource; +@protocol CLPickerDrumDelegate; + + +@interface CLPickerDrum : UIView + +@property (nonatomic, weak) id dataSource; +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) UIColor *foregroundColor; + +- (void)reload; +- (void)selectRow:(NSInteger)row animated:(BOOL)animated; +- (NSInteger)selectedRow; + +@end + + + + +@protocol CLPickerDrumDataSource +@required +- (NSInteger)numberOfRowsInPickerDrum:(CLPickerDrum *)pickerDrum; + +@end + + +@protocol CLPickerDrumDelegate +@optional +- (CGFloat)rowHeightInPickerDrum:(CLPickerDrum *)pickerDrum; +- (UIView*)pickerDrum:(CLPickerDrum *)pickerDrum viewForRow:(NSInteger)row reusingView:(UIView *)view; +- (NSString *)pickerDrum:(CLPickerDrum *)pickerDrum titleForRow:(NSInteger)row; +- (void)pickerDrum:(CLPickerDrum *)pickerDrum didSelectRow:(NSInteger)row; + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.m new file mode 100644 index 0000000..83ec00b --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.m @@ -0,0 +1,336 @@ +// +// CLPickerDrum.m +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLPickerDrum.h" + +#import "UIView+Frame.h" + + +#define MAX_SCROLLABLE_VIEWS 10000 + + +@interface CLPickerDrum() + +@property (nonatomic, assign) NSInteger centerContentIndex; +@end + + +@implementation CLPickerDrum +{ + CGFloat _VIEW_WIDTH; + CGFloat _VIEW_HEIGHT; + + NSInteger _VIEW_NUM; + NSInteger _ROW_NUM; + + NSInteger _topContentIndex; + NSInteger _topViewIndex; + NSInteger _bottomViewIndex; + NSInteger _centerViewIndex; + + UIImageView *_imageView; + UIScrollView *_scrollView; + + BOOL _didLoad; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self customInit]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self customInit]; +} + +- (void)customInit +{ + _didLoad = NO; + _centerContentIndex = 0; + + self.foregroundColor = [UIColor colorWithWhite:1 alpha:0.5]; + + _imageView = [[UIImageView alloc] initWithFrame:self.bounds]; + _imageView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + [self addSubview:_imageView]; + + _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds]; + _scrollView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; + _scrollView.showsHorizontalScrollIndicator = NO; + _scrollView.showsVerticalScrollIndicator = NO; + _scrollView.pagingEnabled = NO; + _scrollView.delegate = self; + [self insertSubview:_scrollView atIndex:0]; +} + +- (void)setDataSource:(id)dataSource +{ + if(dataSource != _dataSource){ + _dataSource = dataSource; + _didLoad = NO; + } +} + +- (void)setDelegate:(id)delegate +{ + if(delegate != _delegate){ + _delegate = delegate; + _didLoad = NO; + } +} + +#pragma mark- Build foreground image + +- (UIImage*)foregroundImage +{ + UIGraphicsBeginImageContextWithOptions(self.frame.size, NO, 0.0); + + CGContextRef context = UIGraphicsGetCurrentContext(); + + CGContextSetFillColorWithColor(context, self.foregroundColor.CGColor); + CGContextFillRect(context, self.bounds); + + CGRect rct = CGRectMake(0, (self.height - _VIEW_HEIGHT)/2, self.width, _VIEW_HEIGHT); + CGContextClearRect(context, rct); + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +#pragma mark- Instance method + +- (void)reload +{ + _didLoad = NO; + [self layoutSubviews]; +} + +- (void)selectRow:(NSInteger)row animated:(BOOL)animated +{ + _centerContentIndex = row; + + if(_didLoad){ + _didLoad = NO; + [self refreshViews]; + } + else{ + [self layoutSubviews]; + } +} + +- (NSInteger)selectedRow +{ + return self.centerContentIndex; +} + +#pragma mark- Info from delegate + +- (CGFloat)rowHeight +{ + if([self.delegate respondsToSelector:@selector(rowHeightInPickerDrum:)]){ + return [self.delegate rowHeightInPickerDrum:self]; + } + return ceil(self.height/3.0); +} + +- (NSInteger)rowNumberFromIndex:(NSInteger)index +{ + NSInteger N = _ROW_NUM; + if(N!=0){ index = (index+N)%N; } + return index; +} + +- (UIView*)viewForIndex:(NSInteger)index reusingView:(UIView*)view +{ + NSInteger row = [self rowNumberFromIndex:index]; + + if(row >=0 && row<_ROW_NUM && [self.delegate respondsToSelector:@selector(pickerDrum:viewForRow:reusingView:)]){ + return [self.delegate pickerDrum:self viewForRow:row reusingView:view]; + } + return nil; +} + +- (NSString*)titleForIndex:(NSInteger)index +{ + NSInteger row = [self rowNumberFromIndex:index]; + + if(row >=0 && row<_ROW_NUM && [self.delegate respondsToSelector:@selector(pickerDrum:titleForRow:)]){ + return [self.delegate pickerDrum:self titleForRow:row]; + } + return @""; +} + +#pragma mark- View layout + +- (void)layoutSubviews +{ + _scrollView.bounds = self.bounds; + + _VIEW_NUM = 0; + _VIEW_WIDTH = self.width; + _VIEW_HEIGHT = self.rowHeight; + _ROW_NUM = [self.dataSource numberOfRowsInPickerDrum:self]; + + _imageView.image = [self foregroundImage]; + + [self refreshViews]; +} + +- (void)refreshViews +{ + for(UIView *view in _scrollView.subviews){ [view removeFromSuperview]; } + + self.centerContentIndex = _centerContentIndex; + + NSInteger marginNum = ceil((self.height-_VIEW_HEIGHT)/(2*_VIEW_HEIGHT)); + _VIEW_NUM = 2*marginNum + 3; + NSInteger centerIndex = _VIEW_NUM/2; + + _scrollView.contentOffset = CGPointMake(0, _VIEW_HEIGHT*MAX_SCROLLABLE_VIEWS/2); + _scrollView.contentSize = CGSizeMake(0, _VIEW_HEIGHT*MAX_SCROLLABLE_VIEWS); + + CGRect viewFrame = CGRectMake(0, _scrollView.contentOffset.y+(_scrollView.height-_VIEW_HEIGHT)/2-centerIndex*_VIEW_HEIGHT, _VIEW_WIDTH, _VIEW_HEIGHT); + for(NSInteger i=0; i<_VIEW_NUM; ++i){ + UIView *view = [self viewForIndex:i-centerIndex+self.centerContentIndex reusingView:nil]; + + if(view==nil){ + UILabel *label = [UILabel new]; + label.textAlignment = NSTextAlignmentCenter; + label.text = [self titleForIndex:i-centerIndex+self.centerContentIndex]; + view = label; + } + view.frame = viewFrame; + + [_scrollView addSubview:view]; + viewFrame.origin.y += _VIEW_HEIGHT; + } + + _topContentIndex = MAX_SCROLLABLE_VIEWS/2; + _topViewIndex = 0; + _bottomViewIndex = _VIEW_NUM-1; + + _didLoad = YES; +} + +#pragma mark- Scrolling + +- (void)setCenterContentIndex:(NSInteger)centerContentIndex +{ + if(_ROW_NUM>0){ + centerContentIndex = (centerContentIndex + _ROW_NUM)%_ROW_NUM; + } + else{ + centerContentIndex = 0; + } + + if(centerContentIndex != _centerContentIndex){ + _centerContentIndex = centerContentIndex; + + if([self.delegate respondsToSelector:@selector(pickerDrum:didSelectRow:)]){ + [self.delegate pickerDrum:self didSelectRow:_centerContentIndex]; + } + } +} + +- (NSInteger)calcViewIndex:(NSInteger)index incremental:(NSInteger)incremental +{ + return (index + incremental + _VIEW_NUM) % _VIEW_NUM; +} + +- (void)scrollWithDirection:(BOOL)upperDirection +{ + NSInteger incremental = 0; + NSInteger viewIndex = 0; + NSInteger contentIndex = 0; + if(upperDirection){ + incremental = -1; + viewIndex = _bottomViewIndex; + } + else{ + incremental = 1; + viewIndex = _topViewIndex; + } + + if(viewIndex<_scrollView.subviews.count){ + _topContentIndex = _topContentIndex + incremental; + self.centerContentIndex = self.centerContentIndex + incremental; + + if(upperDirection){ + contentIndex = self.centerContentIndex - _VIEW_NUM/2; + } + else{ + contentIndex = self.centerContentIndex - _VIEW_NUM/2 + _VIEW_NUM - 1; + } + + UIView *reuse = [_scrollView.subviews objectAtIndex:viewIndex]; + UIView *view = [self viewForIndex:contentIndex reusingView:reuse]; + + if(view==nil){ + if([reuse isKindOfClass:[UILabel class]]){ + UILabel *label = (UILabel*)reuse; + label.text = [self titleForIndex:contentIndex]; + } + } + else if(view!=reuse){ + view.frame = reuse.frame; + [reuse removeFromSuperview]; + [_scrollView addSubview:view]; + reuse = view; + } + + reuse.top = reuse.top + _VIEW_HEIGHT * _VIEW_NUM * incremental; + + _topViewIndex = [self calcViewIndex:_topViewIndex incremental:incremental]; + _bottomViewIndex = [self calcViewIndex:_bottomViewIndex incremental:incremental]; + } +} + +#pragma UIScrollViewDelegate + +- (void)scrollViewDidScroll:(UIScrollView *)sender +{ + CGFloat position = sender.contentOffset.y / _VIEW_HEIGHT; + CGFloat delta = position - (CGFloat)_topContentIndex; + NSInteger count = (NSInteger)MAX(fabs(delta-0.5), fabs(delta+0.5)); + + for(NSInteger i=0; i_scrollView.contentOffset = CGPointMake(0, self->_VIEW_HEIGHT*self->_topContentIndex); + } + completion:^(BOOL finished) { } + ]; +} + +- (void)scrollViewDidEndDecelerating:(UIScrollView *)sender +{ + [self adjustContentOffset]; +} + +- (void)scrollViewDidEndDragging:(UIScrollView *)sender willDecelerate:(BOOL)decelerate +{ + [self adjustContentOffset]; +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.h new file mode 100644 index 0000000..e821ca1 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.h @@ -0,0 +1,47 @@ +// +// CLPickerView.h +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLPickerViewDataSource; +@protocol CLPickerViewDelegate; + + +@interface CLPickerView : UIView + +@property (nonatomic, weak) id dataSource; +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) UIColor *foregroundColor; + +- (void)reloadComponent:(NSInteger)component; +- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated; +- (NSInteger)selectedRowInComponent:(NSInteger)component; + +@end + + + + + +@protocol CLPickerViewDataSource +@required +- (NSInteger)numberOfComponentsInPickerView:(CLPickerView *)pickerView; +- (NSInteger)pickerView:(CLPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; + +@end + + +@protocol CLPickerViewDelegate +@optional +- (CGFloat)pickerView:(CLPickerView *)pickerView widthForComponent:(NSInteger)component; +- (NSString *)pickerView:(CLPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; +- (UIView *)pickerView:(CLPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view; +- (CGFloat)pickerView:(CLPickerView *)pickerView rowHeightForComponent:(NSInteger)component; + +- (void)pickerView:(CLPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component; + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.m new file mode 100644 index 0000000..97be128 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.m @@ -0,0 +1,182 @@ +// +// CLPickerView.m +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLPickerView.h" + +#import "UIView+Frame.h" +#import "CLPickerDrum.h" + +@interface CLPickerView() + +@end + + +@implementation CLPickerView +{ + NSMutableArray *_drums; + BOOL _didLoad; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self customInit]; + } + return self; +} + +- (void)awakeFromNib +{ + [super awakeFromNib]; + [self customInit]; +} + +- (void)customInit +{ + _didLoad = NO; + _drums = [NSMutableArray array]; +} + +- (void)setDataSource:(id)dataSource +{ + if(dataSource != _dataSource){ + _dataSource = dataSource; + _didLoad = NO; + } +} + +- (void)setDelegate:(id)delegate +{ + if(delegate != _delegate){ + _delegate = delegate; + _didLoad = NO; + } +} + +#pragma mark- picker info + +- (void)reloadComponent:(NSInteger)component +{ + if(!_didLoad){ [self layoutSubviews]; } + + if(component>=0 && component<_drums.count){ + CLPickerDrum *drum = _drums[component]; + [drum reload]; + } +} + +- (void)selectRow:(NSInteger)row inComponent:(NSInteger)component animated:(BOOL)animated +{ + if(!_didLoad){ [self layoutSubviews]; } + + if(component>=0 && component<_drums.count){ + CLPickerDrum *drum = _drums[component]; + [drum selectRow:row animated:animated]; + } +} + +- (NSInteger)selectedRowInComponent:(NSInteger)component +{ + if(component>=0 && component<_drums.count){ + CLPickerDrum *drum = _drums[component]; + return [drum selectedRow]; + } + return 0; +} + +#pragma mark- Info from delegate + +- (CGFloat)widthForComponent:(NSInteger)component +{ + if([self.delegate respondsToSelector:@selector(pickerView:widthForComponent:)]){ + return [self.delegate pickerView:self widthForComponent:component]; + } + return 0; +} + +#pragma mark- View layout + +- (void)layoutSubviews +{ + NSInteger N = [self.dataSource numberOfComponentsInPickerView:self]; + CGFloat x = 0; + + for(NSInteger i=0; i=N; --i){ + CLPickerDrum *drum = [_drums objectAtIndex:i]; + [drum removeFromSuperview]; + [_drums removeObject:drum]; + } + + _didLoad = YES; +} + +#pragma mark- CLPickerDrum data source + +- (NSInteger)numberOfRowsInPickerDrum:(CLPickerDrum *)pickerDrum +{ + return [self.dataSource pickerView:self numberOfRowsInComponent:pickerDrum.tag]; +} + +#pragma mark- CLPickerDrum delegate + +- (CGFloat)rowHeightInPickerDrum:(CLPickerDrum *)pickerDrum +{ + if([self.delegate respondsToSelector:@selector(pickerView:rowHeightForComponent:)]){ + return [self.delegate pickerView:self rowHeightForComponent:pickerDrum.tag]; + } + return ceil(self.height / 3); +} + +- (UIView*)pickerDrum:(CLPickerDrum *)pickerDrum viewForRow:(NSInteger)row reusingView:(UIView *)view +{ + if([self.delegate respondsToSelector:@selector(pickerView:viewForRow:forComponent:reusingView:)]){ + return [self.delegate pickerView:self viewForRow:row forComponent:pickerDrum.tag reusingView:view]; + } + return nil; +} + +- (NSString *)pickerDrum:(CLPickerDrum *)pickerDrum titleForRow:(NSInteger)row +{ + if([self.delegate respondsToSelector:@selector(pickerView:titleForRow:forComponent:)]){ + return [self.delegate pickerView:self titleForRow:row forComponent:pickerDrum.tag]; + } + return [NSString stringWithFormat:@"%ld - %ld", (long)pickerDrum.tag, (long)row]; +} + +- (void)pickerDrum:(CLPickerDrum *)pickerDrum didSelectRow:(NSInteger)row +{ + if([self.delegate respondsToSelector:@selector(pickerView:didSelectRow:inComponent:)]){ + [self.delegate pickerView:self didSelectRow:row inComponent:pickerDrum.tag]; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.h new file mode 100644 index 0000000..42c09a4 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.h @@ -0,0 +1,15 @@ +// +// CLTextLabel.h +// +// Created by sho yakushiji on 2013/12/16. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@interface CLTextLabel : UILabel + +@property (nonatomic, strong) UIColor *outlineColor; +@property (nonatomic, assign) CGFloat outlineWidth; + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.m new file mode 100644 index 0000000..3095c1d --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.m @@ -0,0 +1,59 @@ +// +// CLTextLabel.m +// +// Created by sho yakushiji on 2013/12/16. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLTextLabel.h" + +@implementation CLTextLabel + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + // Initialization code + } + return self; +} + +- (void)setOutlineColor:(UIColor *)outlineColor +{ + if(outlineColor != _outlineColor){ + _outlineColor = outlineColor; + [self setNeedsDisplay]; + } +} + +- (void)setOutlineWidth:(CGFloat)outlineWidth +{ + if(outlineWidth != _outlineWidth){ + _outlineWidth = outlineWidth; + [self setNeedsDisplay]; + } +} + +- (void)drawTextInRect:(CGRect)rect +{ + CGSize shadowOffset = self.shadowOffset; + UIColor *txtColor = self.textColor; + + CGFloat outlineSize = self.outlineWidth * self.font.pointSize * 0.3; + + CGContextRef contextRef = UIGraphicsGetCurrentContext(); + CGContextSetLineWidth(contextRef, outlineSize); + CGContextSetLineJoin(contextRef, kCGLineJoinRound); + + CGContextSetTextDrawingMode(contextRef, kCGTextStroke); + self.textColor = self.outlineColor; + [super drawTextInRect:CGRectInset(rect, outlineSize/4, outlineSize/4)]; + + CGContextSetTextDrawingMode(contextRef, kCGTextFill); + self.textColor = txtColor; + [super drawTextInRect:CGRectInset(rect, outlineSize/4, outlineSize/4)]; + + self.shadowOffset = shadowOffset; +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.h new file mode 100644 index 0000000..da02f9c --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.h @@ -0,0 +1,39 @@ +// +// CLTextSettingView.h +// +// Created by sho yakushiji on 2013/12/18. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import + +@protocol CLTextSettingViewDelegate; + +@interface CLTextSettingView : UIView + +@property (nonatomic, weak) id delegate; +@property (nonatomic, strong) NSString *selectedText; +@property (nonatomic, strong) UIColor *selectedFillColor; +@property (nonatomic, strong) UIColor *selectedBorderColor; +@property (nonatomic, assign) CGFloat selectedBorderWidth; +@property (nonatomic, strong) UIFont *selectedFont; + + +- (void)setTextColor:(UIColor*)textColor; +- (void)setFontPickerForegroundColor:(UIColor*)foregroundColor; + +- (void)showSettingMenuWithIndex:(NSInteger)index animated:(BOOL)animated; + +@end + + + +@protocol CLTextSettingViewDelegate +@optional +- (void)textSettingView:(CLTextSettingView*)settingView didChangeText:(NSString*)text; +- (void)textSettingView:(CLTextSettingView*)settingView didChangeFillColor:(UIColor*)fillColor; +- (void)textSettingView:(CLTextSettingView*)settingView didChangeBorderColor:(UIColor*)borderColor; +- (void)textSettingView:(CLTextSettingView*)settingView didChangeBorderWidth:(CGFloat)borderWidth; +- (void)textSettingView:(CLTextSettingView*)settingView didChangeFont:(UIFont*)font; + +@end \ No newline at end of file diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.m new file mode 100644 index 0000000..ffcba82 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.m @@ -0,0 +1,317 @@ +// +// CLTextSettingView.m +// +// Created by sho yakushiji on 2013/12/18. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLTextSettingView.h" + +#import "UIView+Frame.h" +#import "CLImageEditorTheme.h" +#import "CLColorPickerView.h" +#import "CLFontPickerView.h" +#import "CLCircleView.h" + +@interface CLTextSettingView() + +@property (nonatomic, strong) UIView *selectedMode; +@end + + +@implementation CLTextSettingView +{ + UIScrollView *_scrollView; + + UITextView *_textView; + CLColorPickerView *_colorPickerView; + CLFontPickerView *_fontPickerView; + + UIView *_colorPanel; + CLCircleView *_fillCircle; + CLCircleView *_pathCircle; + UISlider *_pathSlider; +} + +- (id)initWithFrame:(CGRect)frame +{ + self = [super initWithFrame:frame]; + if (self) { + [self customInit]; + } + return self; +} + +- (void)setColorPanel +{ + _colorPickerView = [[CLColorPickerView alloc] initWithFrame:CGRectMake(0, 0, 0, 160)]; + _colorPickerView.delegate = self; + _colorPickerView.center = CGPointMake(_colorPanel.width/2 - 10, _colorPickerView.height/2 - 5); + [_colorPanel addSubview:_colorPickerView]; + + _pathSlider = [[UISlider alloc] initWithFrame:CGRectMake(0, 0, _colorPickerView.width*0.8, 34)]; + _pathSlider.center = CGPointMake(_colorPickerView.center.x, _colorPickerView.bottom + 5); + _pathSlider.minimumValue = 0; + _pathSlider.maximumValue = 1; + _pathSlider.value = 0; + [_pathSlider addTarget:self action:@selector(pathSliderDidChange:) forControlEvents:UIControlEventValueChanged]; + [_colorPanel addSubview:_pathSlider]; + + _pathCircle = [[CLCircleView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)]; + _pathCircle.right = _colorPanel.width - 10; + _pathCircle.bottom = _pathSlider.center.y; + _pathCircle.radius = 0.6; + _pathCircle.borderWidth = 2; + _pathCircle.borderColor = [UIColor blackColor]; + _pathCircle.color = [UIColor clearColor]; + [_colorPanel addSubview:_pathCircle]; + + _fillCircle = [[CLCircleView alloc] initWithFrame:_pathCircle.frame]; + _fillCircle.bottom = _pathCircle.top; + _fillCircle.radius = 0.6; + [_colorPanel addSubview:_fillCircle]; + + [_pathCircle addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(modeViewTapped:)]]; + [_fillCircle addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(modeViewTapped:)]]; + + _fillCircle.tag = 0; + _pathCircle.tag = 1; + self.selectedMode = _fillCircle; +} + +- (void)customInit +{ + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillShow:) name:UIKeyboardWillShowNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardWillHide:) name:UIKeyboardWillHideNotification object:nil]; + + _scrollView = [[UIScrollView alloc] initWithFrame:self.bounds]; + _scrollView.pagingEnabled = YES; + _scrollView.showsHorizontalScrollIndicator = NO; + _scrollView.showsVerticalScrollIndicator = NO; + _scrollView.scrollEnabled = NO; + [self addSubview:_scrollView]; + + _textView = [[UITextView alloc] initWithFrame:CGRectMake(10, 0, self.width-42, 80)]; + _textView.delegate = self; + _textView.backgroundColor = [UIColor clearColor]; + [_scrollView addSubview:_textView]; + + _colorPanel = [[UIView alloc] initWithFrame:CGRectMake(self.width, 0, self.width, self.height)]; + _colorPanel.backgroundColor = [UIColor clearColor]; + [_scrollView addSubview:_colorPanel]; + [self setColorPanel]; + + _fontPickerView = [[CLFontPickerView alloc] initWithFrame:CGRectMake(self.width * 2, 0, self.width, self.height)]; + _fontPickerView.delegate = self; + _fontPickerView.sizeComponentHidden = YES; + [_scrollView addSubview:_fontPickerView]; + + _scrollView.contentSize = CGSizeMake(self.width * 3, self.height); +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + +- (void)setTextColor:(UIColor*)textColor +{ + _fontPickerView.textColor = textColor; + _textView.textColor = textColor; +} + +- (BOOL)isFirstResponder +{ + return _textView.isFirstResponder; +} + +- (BOOL)becomeFirstResponder +{ + return [_textView becomeFirstResponder]; +} + +- (BOOL)resignFirstResponder +{ + return [_textView resignFirstResponder]; +} + +- (void)modeViewTapped:(UITapGestureRecognizer*)sender +{ + self.selectedMode = sender.view; +} + +#pragma mark - Properties + +- (void)setSelectedMode:(UIView *)selectedMode +{ + if(selectedMode != _selectedMode){ + _selectedMode.backgroundColor = [UIColor clearColor]; + _selectedMode = selectedMode; + _selectedMode.backgroundColor = [[CLImageEditorTheme theme] toolbarSelectedButtonColor]; + + if(_selectedMode==_fillCircle){ + _colorPickerView.color = _fillCircle.color; + } + else{ + _colorPickerView.color = _pathCircle.borderColor; + } + } +} + +- (void)setSelectedText:(NSString *)selectedText +{ + _textView.text = selectedText; +} + +- (NSString*)selectedText +{ + return _textView.text; +} + +- (void)setSelectedFillColor:(UIColor *)selectedFillColor +{ + _fillCircle.color = selectedFillColor; + + if(self.selectedMode==_fillCircle){ + _colorPickerView.color = _fillCircle.color; + } +} + +- (UIColor*)selectedFillColor +{ + return _fillCircle.color; +} + +- (void)setSelectedBorderColor:(UIColor *)selectedBorderColor +{ + _pathCircle.borderColor = selectedBorderColor; + + if(self.selectedMode==_pathCircle){ + _colorPickerView.color = _pathCircle.borderColor; + } +} + +- (UIColor*)selectedBorderColor +{ + return _pathCircle.borderColor; +} + +- (void)setSelectedBorderWidth:(CGFloat)selectedBorderWidth +{ + _pathSlider.value = selectedBorderWidth; +} + +- (CGFloat)selectedBorderWidth +{ + return _pathSlider.value; +} + +- (void)setSelectedFont:(UIFont *)selectedFont +{ + _fontPickerView.font = selectedFont; +} + +- (UIFont*)selectedFont +{ + return _fontPickerView.font; +} + +- (void)setFontPickerForegroundColor:(UIColor*)foregroundColor +{ + _fontPickerView.foregroundColor = foregroundColor; +} + +- (void)showSettingMenuWithIndex:(NSInteger)index animated:(BOOL)animated +{ + [_scrollView setContentOffset:CGPointMake(index * self.width, 0) animated:animated]; +} + +#pragma mark - keyboard events + +- (void)keyBoardWillShow:(NSNotification *)notificatioin +{ + [self keyBoardWillChange:notificatioin withTextViewHeight:80]; + [_textView scrollRangeToVisible:_textView.selectedRange]; +} + +- (void)keyBoardWillHide:(NSNotification *)notificatioin +{ + [self keyBoardWillChange:notificatioin withTextViewHeight:self.height - 20]; +} + +- (void)keyBoardWillChange:(NSNotification *)notificatioin withTextViewHeight:(CGFloat)height +{ + CGRect keyboardFrame = [[notificatioin.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; + keyboardFrame = [self.superview convertRect:keyboardFrame fromView:self.window]; + + UIViewAnimationCurve animationCurve = [[notificatioin.userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] integerValue]; + double duration = [[notificatioin.userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] doubleValue]; + + [UIView animateWithDuration:duration + delay:0 + options:UIViewAnimationOptionBeginFromCurrentState | (animationCurve<<16) + animations:^{ + self->_textView.height = height; + CGFloat dy = MIN(0, (keyboardFrame.origin.y - self->_textView.height) - self.top); + self.transform = CGAffineTransformMakeTranslation(0, dy); + } completion:^(BOOL finished) { + + } + ]; +} + +#pragma mark- Color picker delegate + +- (void)colorPickerView:(CLColorPickerView *)picker colorDidChange:(UIColor *)color +{ + if(self.selectedMode==_fillCircle){ + _fillCircle.color = color; + if([self.delegate respondsToSelector:@selector(textSettingView:didChangeFillColor:)]){ + [self.delegate textSettingView:self didChangeFillColor:color]; + } + } + else{ + _pathCircle.borderColor = color; + if([self.delegate respondsToSelector:@selector(textSettingView:didChangeBorderColor:)]){ + [self.delegate textSettingView:self didChangeBorderColor:color]; + } + } +} + +#pragma mark- PathSlider event + +- (void)pathSliderDidChange:(UISlider*)sender +{ + if([self.delegate respondsToSelector:@selector(textSettingView:didChangeBorderWidth:)]){ + [self.delegate textSettingView:self didChangeBorderWidth:_pathSlider.value]; + } +} + +#pragma mark- Font picker delegate + +- (void)fontPickerView:(CLFontPickerView *)pickerView didSelectFont:(UIFont *)font +{ + if([self.delegate respondsToSelector:@selector(textSettingView:didChangeFont:)]){ + [self.delegate textSettingView:self didChangeFont:font]; + } +} + +#pragma mark- UITextView delegate + +- (void)textViewDidChange:(UITextView*)textView +{ + NSRange selection = textView.selectedRange; + if(selection.location+selection.length == textView.text.length && [textView.text characterAtIndex:textView.text.length-1] == '\n') { + [textView layoutSubviews]; + [textView scrollRectToVisible:CGRectMake(0, textView.contentSize.height - 1, 1, 1) animated:YES]; + } + else { + [textView scrollRangeToVisible:textView.selectedRange]; + } + + if([self.delegate respondsToSelector:@selector(textSettingView:didChangeText:)]){ + [self.delegate textSettingView:self didChangeText:textView.text]; + } +} + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.h b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.h new file mode 100644 index 0000000..a2c324f --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.h @@ -0,0 +1,12 @@ +// +// CLTextTool.h +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLImageToolBase.h" + +@interface CLTextTool : CLImageToolBase + +@end diff --git a/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.m b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.m new file mode 100644 index 0000000..b406303 --- /dev/null +++ b/Example/Pods/CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.m @@ -0,0 +1,735 @@ +// +// CLTextTool.m +// +// Created by sho yakushiji on 2013/12/15. +// Copyright (c) 2013年 CALACULU. All rights reserved. +// + +#import "CLTextTool.h" + +#import "CLCircleView.h" +#import "CLColorPickerView.h" +#import "CLFontPickerView.h" +#import "CLTextLabel.h" + +#import "CLTextSettingView.h" + +static NSString* const CLTextViewActiveViewDidChangeNotification = @"CLTextViewActiveViewDidChangeNotificationString"; +static NSString* const CLTextViewActiveViewDidTapNotification = @"CLTextViewActiveViewDidTapNotificationString"; + +static NSString* const kCLTextToolDeleteIconName = @"deleteIconAssetsName"; +static NSString* const kCLTextToolCloseIconName = @"closeIconAssetsName"; +static NSString* const kCLTextToolNewTextIconName = @"newTextIconAssetsName"; +static NSString* const kCLTextToolEditTextIconName = @"editTextIconAssetsName"; +static NSString* const kCLTextToolFontIconName = @"fontIconAssetsName"; +static NSString* const kCLTextToolAlignLeftIconName = @"alignLeftIconAssetsName"; +static NSString* const kCLTextToolAlignCenterIconName = @"alignCenterIconAssetsName"; +static NSString* const kCLTextToolAlignRightIconName = @"alignRightIconAssetsName"; + + +@interface _CLTextView : UIView +@property (nonatomic, strong) NSString *text; +@property (nonatomic, strong) UIFont *font; +@property (nonatomic, strong) UIColor *fillColor; +@property (nonatomic, strong) UIColor *borderColor; +@property (nonatomic, assign) CGFloat borderWidth; +@property (nonatomic, assign) NSTextAlignment textAlignment; + ++ (void)setActiveTextView:(_CLTextView*)view; +- (id)initWithTool:(CLTextTool*)tool; +- (void)setScale:(CGFloat)scale; +- (void)sizeToFitWithMaxWidth:(CGFloat)width lineHeight:(CGFloat)lineHeight; + +@end + + + +@interface CLTextTool() + +@property (nonatomic, strong) _CLTextView *selectedTextView; +@end + +@implementation CLTextTool +{ + UIImage *_originalImage; + + UIView *_workingView; + + CLTextSettingView *_settingView; + + CLToolbarMenuItem *_textBtn; + CLToolbarMenuItem *_colorBtn; + CLToolbarMenuItem *_fontBtn; + + CLToolbarMenuItem *_alignLeftBtn; + CLToolbarMenuItem *_alignCenterBtn; + CLToolbarMenuItem *_alignRightBtn; + + UIScrollView *_menuScroll; +} + ++ (NSArray*)subtools +{ + return nil; +} + ++ (NSString*)defaultTitle +{ + return [CLImageEditorTheme localizedString:@"CLTextTool_DefaultTitle" withDefault:@"Text"]; +} + ++ (BOOL)isAvailable +{ + return ([UIDevice iosVersion] >= 5.0); +} + ++ (CGFloat)defaultDockedNumber +{ + return 8; +} + +#pragma mark- optional info + ++ (NSDictionary*)optionalInfo +{ + return @{ + kCLTextToolDeleteIconName:@"", + kCLTextToolCloseIconName:@"", + kCLTextToolNewTextIconName:@"", + kCLTextToolEditTextIconName:@"", + kCLTextToolFontIconName:@"", + kCLTextToolAlignLeftIconName:@"", + kCLTextToolAlignCenterIconName:@"", + kCLTextToolAlignRightIconName:@"", + }; +} + +#pragma mark- implementation + +- (void)setup +{ + _originalImage = self.editor.imageView.image; + + [self.editor fixZoomScaleWithAnimated:YES]; + + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activeTextViewDidChange:) name:CLTextViewActiveViewDidChangeNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(activeTextViewDidTap:) name:CLTextViewActiveViewDidTapNotification object:nil]; + + _menuScroll = [[UIScrollView alloc] initWithFrame:self.editor.menuView.frame]; + _menuScroll.backgroundColor = self.editor.menuView.backgroundColor; + _menuScroll.showsHorizontalScrollIndicator = NO; + [self.editor.view addSubview:_menuScroll]; + + _workingView = [[UIView alloc] initWithFrame:[self.editor.view convertRect:self.editor.imageView.frame fromView:self.editor.imageView.superview]]; + _workingView.clipsToBounds = YES; + [self.editor.view addSubview:_workingView]; + + _settingView = [[CLTextSettingView alloc] initWithFrame:CGRectMake(0, 0, self.editor.view.width, 180)]; + _settingView.top = _menuScroll.top - _settingView.height; + _settingView.backgroundColor = [CLImageEditorTheme toolbarColor]; + _settingView.textColor = [CLImageEditorTheme toolbarTextColor]; + _settingView.fontPickerForegroundColor = _settingView.backgroundColor; + _settingView.delegate = self; + [self.editor.view addSubview:_settingView]; + + UIButton *okButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [okButton setImage:[self imageForKey:kCLTextToolCloseIconName defaultImageName:@"btn_delete.png"] forState:UIControlStateNormal]; + okButton.frame = CGRectMake(_settingView.width-32, 0, 32, 32); + [okButton addTarget:self action:@selector(pushedButton:) forControlEvents:UIControlEventTouchUpInside]; + [_settingView addSubview:okButton]; + + [self setMenu]; + + self.selectedTextView = nil; + + _menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuScroll.top); + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformIdentity; + }]; +} + +- (void)cleanup +{ + [self.editor resetZoomScaleWithAnimated:YES]; + + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [_settingView endEditing:YES]; + [_settingView removeFromSuperview]; + [_workingView removeFromSuperview]; + + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + self->_menuScroll.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-self->_menuScroll.top); + } + completion:^(BOOL finished) { + [self->_menuScroll removeFromSuperview]; + }]; +} + +- (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock +{ + [_CLTextView setActiveTextView:nil]; + + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + UIImage *image = [self buildImage:self->_originalImage]; + + dispatch_async(dispatch_get_main_queue(), ^{ + completionBlock(image, nil, nil); + }); + }); +} + +#pragma mark- + +- (UIImage*)buildImage:(UIImage*)image +{ + __block CALayer *layer = nil; + __block CGFloat scale = 1; + + safe_dispatch_sync_main(^{ + scale = image.size.width / self->_workingView.width; + layer = self->_workingView.layer; + }); + + UIGraphicsBeginImageContextWithOptions(image.size, NO, image.scale); + + [image drawAtPoint:CGPointZero]; + + CGContextScaleCTM(UIGraphicsGetCurrentContext(), scale, scale); + [layer renderInContext:UIGraphicsGetCurrentContext()]; + + UIImage *tmp = UIGraphicsGetImageFromCurrentImageContext(); + + UIGraphicsEndImageContext(); + + return tmp; +} + +- (void)setMenuBtnEnabled:(BOOL)enabled +{ + _textBtn.userInteractionEnabled = + _colorBtn.userInteractionEnabled = + _fontBtn.userInteractionEnabled = + _alignLeftBtn.userInteractionEnabled = + _alignCenterBtn.userInteractionEnabled = + _alignRightBtn.userInteractionEnabled = enabled; +} + +- (void)setSelectedTextView:(_CLTextView *)selectedTextView +{ + if(selectedTextView != _selectedTextView){ + _selectedTextView = selectedTextView; + } + + [self setMenuBtnEnabled:(_selectedTextView!=nil)]; + + if(_selectedTextView==nil){ + [self hideSettingView]; + + _colorBtn.iconView.backgroundColor = _settingView.selectedFillColor; + _alignLeftBtn.selected = _alignCenterBtn.selected = _alignRightBtn.selected = NO; + } + else{ + _colorBtn.iconView.backgroundColor = selectedTextView.fillColor; + _colorBtn.iconView.layer.borderColor = selectedTextView.borderColor.CGColor; + _colorBtn.iconView.layer.borderWidth = MAX(2, 10*selectedTextView.borderWidth); + + _settingView.selectedText = selectedTextView.text; + _settingView.selectedFillColor = selectedTextView.fillColor; + _settingView.selectedBorderColor = selectedTextView.borderColor; + _settingView.selectedBorderWidth = selectedTextView.borderWidth; + _settingView.selectedFont = selectedTextView.font; + [self setTextAlignment:selectedTextView.textAlignment]; + } +} + +- (void)activeTextViewDidChange:(NSNotification*)notification +{ + self.selectedTextView = notification.object; +} + +- (void)activeTextViewDidTap:(NSNotification*)notification +{ + [self beginTextEditing]; +} + +- (void)setMenu +{ + CGFloat W = 70; + CGFloat H = _menuScroll.height; + CGFloat x = 0; + + NSArray *_menu = @[ + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemNew" withDefault:@"New"], @"icon":[self imageForKey:kCLTextToolNewTextIconName defaultImageName:@"btn_add.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemText" withDefault:@"Text"], @"icon":[self imageForKey:kCLTextToolEditTextIconName defaultImageName:@"icon.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemColor" withDefault:@"Color"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemFont" withDefault:@"Font"], @"icon":[self imageForKey:kCLTextToolFontIconName defaultImageName:@"btn_font.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemAlignLeft" withDefault:@" "], @"icon":[self imageForKey:kCLTextToolAlignLeftIconName defaultImageName:@"btn_align_left.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemAlignCenter" withDefault:@" "], @"icon":[self imageForKey:kCLTextToolAlignCenterIconName defaultImageName:@"btn_align_center.png"]}, + @{@"title":[CLImageEditorTheme localizedString:@"CLTextTool_MenuItemAlignRight" withDefault:@" "], @"icon":[self imageForKey:kCLTextToolAlignRightIconName defaultImageName:@"btn_align_right.png"]}, + ]; + + NSInteger tag = 0; + for(NSDictionary *obj in _menu){ + CLToolbarMenuItem *view = [CLImageEditorTheme menuItemWithFrame:CGRectMake(x, 0, W, H) target:self action:@selector(tappedMenuPanel:) toolInfo:nil]; + view.tag = tag++; + view.title = obj[@"title"]; + view.iconImage = obj[@"icon"]; + + switch (view.tag) { + case 1: + _textBtn = view; + break; + case 2: + _colorBtn = view; + _colorBtn.iconView.layer.borderWidth = 2; + _colorBtn.iconView.layer.borderColor = [[UIColor blackColor] CGColor]; + break; + case 3: + _fontBtn = view; + break; + case 4: + _alignLeftBtn = view; + break; + case 5: + _alignCenterBtn = view; + break; + case 6: + _alignRightBtn = view; + break; + } + + [_menuScroll addSubview:view]; + x += W; + } + _menuScroll.contentSize = CGSizeMake(MAX(x, _menuScroll.frame.size.width+1), 0); +} + +- (void)tappedMenuPanel:(UITapGestureRecognizer*)sender +{ + UIView *view = sender.view; + + switch (view.tag) { + case 0: + [self addNewText]; + break; + case 1: + case 2: + case 3: + [self showSettingViewWithMenuIndex:view.tag-1]; + break; + case 4: + [self setTextAlignment:NSTextAlignmentLeft]; + break; + case 5: + [self setTextAlignment:NSTextAlignmentCenter]; + break; + case 6: + [self setTextAlignment:NSTextAlignmentRight]; + break; + } + + view.alpha = 0.2; + [UIView animateWithDuration:kCLImageToolAnimationDuration + animations:^{ + view.alpha = 1; + } + ]; +} + +- (void)addNewText +{ + _CLTextView *view = [[_CLTextView alloc] initWithTool:self]; + view.fillColor = _settingView.selectedFillColor; + view.borderColor = _settingView.selectedBorderColor; + view.borderWidth = _settingView.selectedBorderWidth; + view.font = _settingView.selectedFont; + + CGFloat ratio = MIN( (0.8 * _workingView.width) / view.width, (0.2 * _workingView.height) / view.height); + [view setScale:ratio]; + view.center = CGPointMake(_workingView.width/2, view.height/2 + 10); + + [_workingView addSubview:view]; + [_CLTextView setActiveTextView:view]; + + [self beginTextEditing]; +} + +- (void)hideSettingView +{ + [_settingView endEditing:YES]; + _settingView.hidden = YES; +} + +- (void)showSettingViewWithMenuIndex:(NSInteger)index +{ + if(_settingView.hidden){ + _settingView.hidden = NO; + [_settingView showSettingMenuWithIndex:index animated:NO]; + } + else{ + [_settingView showSettingMenuWithIndex:index animated:YES]; + } +} + +- (void)beginTextEditing +{ + [self showSettingViewWithMenuIndex:0]; + [_settingView becomeFirstResponder]; +} + +- (void)setTextAlignment:(NSTextAlignment)alignment +{ + self.selectedTextView.textAlignment = alignment; + + _alignLeftBtn.selected = _alignCenterBtn.selected = _alignRightBtn.selected = NO; + switch (alignment) { + case NSTextAlignmentLeft: + _alignLeftBtn.selected = YES; + break; + case NSTextAlignmentCenter: + _alignCenterBtn.selected = YES; + break; + case NSTextAlignmentRight: + _alignRightBtn.selected = YES; + break; + default: + break; + } +} + +- (void)pushedButton:(UIButton*)button +{ + if(_settingView.isFirstResponder){ + [_settingView resignFirstResponder]; + } + else{ + [self hideSettingView]; + } +} + +#pragma mark- Setting view delegate + +- (void)textSettingView:(CLTextSettingView *)settingView didChangeText:(NSString *)text +{ + // set text + self.selectedTextView.text = text; + [self.selectedTextView sizeToFitWithMaxWidth:0.8*_workingView.width lineHeight:0.2*_workingView.height]; +} + +- (void)textSettingView:(CLTextSettingView*)settingView didChangeFillColor:(UIColor*)fillColor +{ + _colorBtn.iconView.backgroundColor = fillColor; + self.selectedTextView.fillColor = fillColor; +} + +- (void)textSettingView:(CLTextSettingView*)settingView didChangeBorderColor:(UIColor*)borderColor +{ + _colorBtn.iconView.layer.borderColor = borderColor.CGColor; + self.selectedTextView.borderColor = borderColor; +} + +- (void)textSettingView:(CLTextSettingView*)settingView didChangeBorderWidth:(CGFloat)borderWidth +{ + _colorBtn.iconView.layer.borderWidth = MAX(2, 10*borderWidth); + self.selectedTextView.borderWidth = borderWidth; +} + +- (void)textSettingView:(CLTextSettingView *)settingView didChangeFont:(UIFont *)font +{ + self.selectedTextView.font = font; + [self.selectedTextView sizeToFitWithMaxWidth:0.8*_workingView.width lineHeight:0.2*_workingView.height]; +} + +@end + + + +const CGFloat MAX_FONT_SIZE = 50.0; + + +#pragma mark- _CLTextView + +@implementation _CLTextView +{ + CLTextLabel *_label; + UIButton *_deleteButton; + CLCircleView *_circleView; + + CGFloat _scale; + CGFloat _arg; + + CGPoint _initialPoint; + CGFloat _initialArg; + CGFloat _initialScale; +} + ++ (void)setActiveTextView:(_CLTextView*)view +{ + static _CLTextView *activeView = nil; + if(view != activeView){ + [activeView setAvtive:NO]; + activeView = view; + [activeView setAvtive:YES]; + + [activeView.superview bringSubviewToFront:activeView]; + + NSNotification *n = [NSNotification notificationWithName:CLTextViewActiveViewDidChangeNotification object:view userInfo:nil]; + [[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:n waitUntilDone:NO]; + } +} + +- (id)initWithTool:(CLTextTool*)tool +{ + self = [super initWithFrame:CGRectMake(0, 0, 132, 132)]; + if(self){ + _label = [[CLTextLabel alloc] init]; + [_label setTextColor:[CLImageEditorTheme toolbarTextColor]]; + _label.numberOfLines = 0; + _label.backgroundColor = [UIColor clearColor]; + _label.layer.borderColor = [[UIColor blackColor] CGColor]; + _label.layer.cornerRadius = 3; + _label.font = [UIFont systemFontOfSize:MAX_FONT_SIZE]; + _label.minimumScaleFactor = 1/MAX_FONT_SIZE; + _label.adjustsFontSizeToFitWidth = YES; + _label.textAlignment = NSTextAlignmentCenter; + self.text = @""; + [self addSubview:_label]; + + CGSize size = [_label sizeThatFits:CGSizeMake(FLT_MAX, FLT_MAX)]; + _label.frame = CGRectMake(16, 16, size.width, size.height); + self.frame = CGRectMake(0, 0, size.width + 32, size.height + 32); + + _deleteButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_deleteButton setImage:[tool imageForKey:kCLTextToolDeleteIconName defaultImageName:@"btn_delete.png"] forState:UIControlStateNormal]; + _deleteButton.frame = CGRectMake(0, 0, 32, 32); + _deleteButton.center = _label.frame.origin; + [_deleteButton addTarget:self action:@selector(pushedDeleteBtn:) forControlEvents:UIControlEventTouchUpInside]; + [self addSubview:_deleteButton]; + + _circleView = [[CLCircleView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)]; + _circleView.center = CGPointMake(_label.width + _label.left, _label.height + _label.top); + _circleView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin; + _circleView.radius = 0.7; + _circleView.color = [UIColor whiteColor]; + _circleView.borderColor = [UIColor blackColor]; + _circleView.borderWidth = 5; + [self addSubview:_circleView]; + + _arg = 0; + [self setScale:1]; + + [self initGestures]; + } + return self; +} + +- (void)initGestures +{ + _label.userInteractionEnabled = YES; + [_label addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidTap:)]]; + [_label addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(viewDidPan:)]]; + [_circleView addGestureRecognizer:[[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(circleViewDidPan:)]]; +} + +- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event +{ + UIView* view= [super hitTest:point withEvent:event]; + if(view==self){ + return nil; + } + return view; +} + +#pragma mark- Properties + +- (void)setAvtive:(BOOL)active +{ + _deleteButton.hidden = !active; + _circleView.hidden = !active; + _label.layer.borderWidth = (active) ? 1/_scale : 0; +} + +- (BOOL)active +{ + return !_deleteButton.hidden; +} + +- (void)sizeToFitWithMaxWidth:(CGFloat)width lineHeight:(CGFloat)lineHeight +{ + self.transform = CGAffineTransformIdentity; + _label.transform = CGAffineTransformIdentity; + + CGSize size = [_label sizeThatFits:CGSizeMake(width / (15/MAX_FONT_SIZE), FLT_MAX)]; + _label.frame = CGRectMake(16, 16, size.width, size.height); + + CGFloat viewW = (_label.width + 32); + CGFloat viewH = _label.font.lineHeight; + + CGFloat ratio = MIN(width / viewW, lineHeight / viewH); + [self setScale:ratio]; +} + +- (void)setScale:(CGFloat)scale +{ + _scale = scale; + + self.transform = CGAffineTransformIdentity; + + _label.transform = CGAffineTransformMakeScale(_scale, _scale); + + CGRect rct = self.frame; + rct.origin.x += (rct.size.width - (_label.width + 32)) / 2; + rct.origin.y += (rct.size.height - (_label.height + 32)) / 2; + rct.size.width = _label.width + 32; + rct.size.height = _label.height + 32; + self.frame = rct; + + _label.center = CGPointMake(rct.size.width/2, rct.size.height/2); + + self.transform = CGAffineTransformMakeRotation(_arg); + + _label.layer.borderWidth = 1/_scale; + _label.layer.cornerRadius = 3/_scale; +} + +- (void)setFillColor:(UIColor *)fillColor +{ + _label.textColor = fillColor; +} + +- (UIColor*)fillColor +{ + return _label.textColor; +} + +- (void)setBorderColor:(UIColor *)borderColor +{ + _label.outlineColor = borderColor; +} + +- (UIColor*)borderColor +{ + return _label.outlineColor; +} + +- (void)setBorderWidth:(CGFloat)borderWidth +{ + _label.outlineWidth = borderWidth; +} + +- (CGFloat)borderWidth +{ + return _label.outlineWidth; +} + +- (void)setFont:(UIFont *)font +{ + _label.font = [font fontWithSize:MAX_FONT_SIZE]; +} + +- (UIFont*)font +{ + return _label.font; +} + +- (void)setTextAlignment:(NSTextAlignment)textAlignment +{ + _label.textAlignment = textAlignment; +} + +- (NSTextAlignment)textAlignment +{ + return _label.textAlignment; +} + +- (void)setText:(NSString *)text +{ + if(![text isEqualToString:_text]){ + _text = text; + _label.text = (_text.length>0) ? _text : [CLImageEditorTheme localizedString:@"CLTextTool_EmptyText" withDefault:@"Text"]; + } +} + +#pragma mark- gesture events + +- (void)pushedDeleteBtn:(id)sender +{ + _CLTextView *nextTarget = nil; + + const NSInteger index = [self.superview.subviews indexOfObject:self]; + + for(NSInteger i=index+1; i=0; --i){ + UIView *view = [self.superview.subviews objectAtIndex:i]; + if([view isKindOfClass:[_CLTextView class]]){ + nextTarget = (_CLTextView*)view; + break; + } + } + } + + [[self class] setActiveTextView:nextTarget]; + [self removeFromSuperview]; +} + +- (void)viewDidTap:(UITapGestureRecognizer*)sender +{ + if(self.active){ + NSNotification *n = [NSNotification notificationWithName:CLTextViewActiveViewDidTapNotification object:self userInfo:nil]; + [[NSNotificationCenter defaultCenter] performSelectorOnMainThread:@selector(postNotification:) withObject:n waitUntilDone:NO]; + } + [[self class] setActiveTextView:self]; +} + +- (void)viewDidPan:(UIPanGestureRecognizer*)sender +{ + [[self class] setActiveTextView:self]; + + CGPoint p = [sender translationInView:self.superview]; + + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = self.center; + } + self.center = CGPointMake(_initialPoint.x + p.x, _initialPoint.y + p.y); +} + +- (void)circleViewDidPan:(UIPanGestureRecognizer*)sender +{ + CGPoint p = [sender translationInView:self.superview]; + + static CGFloat tmpR = 1; + static CGFloat tmpA = 0; + if(sender.state == UIGestureRecognizerStateBegan){ + _initialPoint = [self.superview convertPoint:_circleView.center fromView:_circleView.superview]; + + CGPoint p = CGPointMake(_initialPoint.x - self.center.x, _initialPoint.y - self.center.y); + tmpR = sqrt(p.x*p.x + p.y*p.y); + tmpA = atan2(p.y, p.x); + + _initialArg = _arg; + _initialScale = _scale; + } + + p = CGPointMake(_initialPoint.x + p.x - self.center.x, _initialPoint.y + p.y - self.center.y); + CGFloat R = sqrt(p.x*p.x + p.y*p.y); + CGFloat arg = atan2(p.y, p.x); + + _arg = _initialArg + arg - tmpA; + [self setScale:MAX(_initialScale * R / tmpR, 15/MAX_FONT_SIZE)]; +} + +@end + + diff --git a/Example/Pods/CLImageEditor/README.md b/Example/Pods/CLImageEditor/README.md new file mode 100644 index 0000000..ca51769 --- /dev/null +++ b/Example/Pods/CLImageEditor/README.md @@ -0,0 +1,231 @@ +CLImageEditor +=== + +CLImageEditor provides basic image editing features to iPhone apps. This ViewController is simple to use, and is also possible to incorporate as part of the UIImagePickerController easily. + + +![sample](Demo/CLImageEditorDemo/CLImageEditorDemo/sample.jpg) + + +Installing +--- + +The easiest way to use CLImageEditor is to copy all the files in the CLImageEditor group (or directory) into your app. Add the following frameworks to your project (Build Phases > Link Binary With Libraries): Accelerate, CoreGraphics, CoreImage. + +And optional tools are in OptionalImageTools. You might want to add as needed. + +##### Or git submodule + +Alternatively, you should be able to setup a [git submodule](http://git-scm.com/docs/git-submodule) and reference the files in your Xcode project. + +`git submodule add https://github.com/yackle/CLImageEditor.git` + +##### Or CocoaPods + +[CocoaPods](http://cocoapods.org/) is a dependency manager for Objective-C projects. + +`pod 'CLImageEditor'` + +or + +`pod 'CLImageEditor/AllTools'` + +By specifying AllTools subspec, all image tools including optional tools are installed. + +#### Optional Image Tools + +There are the following optional tools. + +`pod 'CLImageEditor/ResizeTool'` + +`pod 'CLImageEditor/StickerTool'` + +`pod 'CLImageEditor/TextTool'` + +`pod 'CLImageEditor/SplashTool'` + + + +Usage +--- +Getting started with CLImageEditor is dead simple. Just initialize it with an UIimage and set a delegate. Then you can use it as a usual ViewController. + + +``` objc + +#import "CLImageEditor.h" + +@interface ViewController() + +@end + +- (void)presentImageEditorWithImage:(UIImage*)image +{ + CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image]; + editor.delegate = self; + + [self presentViewController:editor animated:YES completion:nil]; +} + +``` + +When used with UIImagePickerController, CLImageEditor can be made to function as a part of the picker by to call the picker's `pushViewController:animated:`. + +``` objc + +#pragma mark- UIImageController delegate + +- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info +{ + UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; + + CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:image]; + editor.delegate = self; + + [picker pushViewController:editor animated:YES]; +} + +``` + +After a image has been edited, the editor will call delegate's `imageEditor:didFinishEdittingWithImage:` method. The delegate's method is required to receive edited image. + +``` objc + + +#pragma mark- CLImageEditor delegate + +- (void)imageEditor:(CLImageEditor *)editor didFinishEdittingWithImage:(UIImage *)image +{ + _imageView.image = image; + [editor dismissViewControllerAnimated:YES completion:nil]; +} + +``` + +Additionally, the optional delegate's `imageEditorDidCancel:` method is provided for when you want to catch the cancel callback. + +For more detail, please see `CLImageEditorDemo`. + + +Customizing +--- +Icon images are included in `CLImageEditor.bundle`. You can change the appearance by rewriting the icon images. + +Other features for theme settings not yet implemented. + + +##### Menu customization + +Image tools can customize using `CLImageToolInfo`. CLImageEditor's `toolInfo` property has functions to access each tool's info. For example, `subToolInfoWithToolName:recursive:` method is used to get the tool info of a particular name. + +``` objc +CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:_imageView.image]; +editor.delegate = self; + +CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO]; +``` + +After getting a tool info, by changing its properties, you can customize the image tool on menu view. + +``` objc +CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLToneCurveTool" recursive:NO]; +tool.title = @"TestTitle"; +tool.available = NO; // if available is set to NO, it is removed from the menu view. +tool.dockedNumber = -1; // Bring to top +//tool.iconImagePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"png"]; +``` + +* `dockedNumber` determines the menu item order. Note that it is simply used as a key for sorting. + +The list of tool names can be confirmed with the following code. + +``` objc +NSLog(@"%@", editor.toolInfo); +NSLog(@"%@", editor.toolInfo.toolTreeDescription); +``` + +Currently, here are the tools for iOS 7: +``` +CLFilterTool + CLDefaultEmptyFilter + CLDefaultLinearFilter + CLDefaultVignetteFilter + CLDefaultInstantFilter + CLDefaultProcessFilter + CLDefaultTransferFilter + CLDefaultSepiaFilter + CLDefaultChromeFilter + CLDefaultFadeFilter + CLDefaultCurveFilter + CLDefaultTonalFilter + CLDefaultNoirFilter + CLDefaultMonoFilter + CLDefaultInvertFilter +CLAdjustmentTool +CLEffectTool + CLEffectBase + CLSpotEffect + CLHueEffect + CLHighlightShadowEffect + CLBloomEffect + CLGloomEffect + CLPosterizeEffect + CLPixellateEffect +CLBlurTool +CLRotateTool +CLClippingTool +CLResizeTool +CLToneCurveTool +CLStickerTool +CLTextTool +``` + + +Some tools have `optionalInfo` property and it makes it possible to customize more detail. + +###### Clipping tool + +Clipping tool allows you to set preset ratios and portrait/landscape button visibility. + +``` objc +NSArray *ratios = @[ + @{@"value1":@0, @"value2":@0, @"titleFormat":@"Custom"}, // if either value is zero, free form is set. + @{@"value1":@1, @"value2":@1, @"titleFormat":@"%.1f : %.1f"}, + @{@"value1":@1, @"value2":@1.618, @"titleFormat":@"%g : %g"}, + @{@"value1":@2, @"value2":@3}, + @{@"value1":@3, @"value2":@2}, + ]; + +CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLClippingTool" recursive:NO]; +tool.optionalInfo[@"ratios"] = ratios; +tool.optionalInfo[@"swapButtonHidden"] = @YES; +``` + +###### Resize tool + +You can set preset sizes and maximum size. + +``` objc +CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLResizeTool" recursive:NO]; +tool.optionalInfo[@"presetSizes"] = @[@240, @320, @480, @640, @800, @960, @1024, @2048]; +tool.optionalInfo[@"limitSize"] = @3200; +``` + +###### Sticker tool + +You can set a path to a directory of another bundle where there are sticker images. + +``` objc +CLImageToolInfo *tool = [editor.toolInfo subToolInfoWithToolName:@"CLStickerTool" recursive:NO]; +tool.optionalInfo[@"stickerPath"] = @"yourStickerPath"; +``` + +License +--- +CLImageEditor is released under the MIT License, see [LICENSE](LICENSE). + + +Acknowledgments +--- +Icons made by [Freepik](http://www.freepik.com "Freepik") from [www.flaticon.com](http://www.flaticon.com "Flaticon") is licensed by [CC 3.0 BY](http://creativecommons.org/licenses/by/3.0/ "Creative Commons BY 3.0") + diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLEmoticonTool.h b/Example/Pods/Headers/Private/CLImageEditor/CLEmoticonTool.h new file mode 120000 index 0000000..11cdc64 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLEmoticonTool.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLEmoticonTool/CLEmoticonTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLFontPickerView.h b/Example/Pods/Headers/Private/CLImageEditor/CLFontPickerView.h new file mode 120000 index 0000000..a37e72a --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLFontPickerView.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLFontPickerView.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLImageEditor.h b/Example/Pods/Headers/Private/CLImageEditor/CLImageEditor.h new file mode 120000 index 0000000..b0d7af9 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLImageEditor.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageEditor.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLImageEditorTheme.h b/Example/Pods/Headers/Private/CLImageEditor/CLImageEditorTheme.h new file mode 120000 index 0000000..a6048e8 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLImageEditorTheme.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageEditorTheme.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLImageToolInfo.h b/Example/Pods/Headers/Private/CLImageEditor/CLImageToolInfo.h new file mode 120000 index 0000000..fb51740 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLImageToolInfo.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageToolInfo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLPickerDrum.h b/Example/Pods/Headers/Private/CLImageEditor/CLPickerDrum.h new file mode 120000 index 0000000..4608d86 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLPickerDrum.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLPickerDrum.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLPickerView.h b/Example/Pods/Headers/Private/CLImageEditor/CLPickerView.h new file mode 120000 index 0000000..27df583 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLPickerView.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLPickerView.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLResizeTool.h b/Example/Pods/Headers/Private/CLImageEditor/CLResizeTool.h new file mode 120000 index 0000000..61bd597 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLResizeTool.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLResizeTool/CLResizeTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLSplashTool.h b/Example/Pods/Headers/Private/CLImageEditor/CLSplashTool.h new file mode 120000 index 0000000..345bea1 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLSplashTool.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLSplashTool/CLSplashTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLStickerTool.h b/Example/Pods/Headers/Private/CLImageEditor/CLStickerTool.h new file mode 120000 index 0000000..f684d39 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLStickerTool.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLStickerTool/CLStickerTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLTextLabel.h b/Example/Pods/Headers/Private/CLImageEditor/CLTextLabel.h new file mode 120000 index 0000000..a107c79 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLTextLabel.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLTextLabel.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLTextSettingView.h b/Example/Pods/Headers/Private/CLImageEditor/CLTextSettingView.h new file mode 120000 index 0000000..016e94f --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLTextSettingView.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLTextSettingView.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/CLTextTool.h b/Example/Pods/Headers/Private/CLImageEditor/CLTextTool.h new file mode 120000 index 0000000..8c665b7 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/CLTextTool.h @@ -0,0 +1 @@ +../../../CLImageEditor/OptionalImageTools/CLTextTool/CLTextTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h new file mode 120000 index 0000000..9f09467 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h new file mode 120000 index 0000000..6ed3423 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h new file mode 120000 index 0000000..a948368 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h new file mode 120000 index 0000000..ca8997a --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h new file mode 120000 index 0000000..95d8846 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h new file mode 120000 index 0000000..e9e3749 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h new file mode 120000 index 0000000..0d1f247 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h new file mode 120000 index 0000000..82e3e81 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h new file mode 120000 index 0000000..c9fef07 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h new file mode 120000 index 0000000..c5045d0 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h new file mode 120000 index 0000000..18e54ee --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h @@ -0,0 +1 @@ +../../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h new file mode 120000 index 0000000..39b2c7b --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h new file mode 120000 index 0000000..659c7c2 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h new file mode 120000 index 0000000..73bb687 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h new file mode 120000 index 0000000..d7dfc57 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLImageToolBase.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLImageToolBase.h new file mode 120000 index 0000000..f3d4968 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLImageToolBase.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/ImageTools/CLImageToolBase.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h new file mode 120000 index 0000000..3b239ba --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h new file mode 120000 index 0000000..cb0bd7c --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLCircleView.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLCircleView.h new file mode 120000 index 0000000..48cbf76 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLCircleView.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLCircleView.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h new file mode 120000 index 0000000..5faa2ae --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.h new file mode 120000 index 0000000..32f8786 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h new file mode 120000 index 0000000..609b480 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h new file mode 120000 index 0000000..c86ac4e --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h new file mode 120000 index 0000000..a5aa6ca --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h new file mode 120000 index 0000000..d90ead8 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h new file mode 120000 index 0000000..59af110 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h @@ -0,0 +1 @@ +../../../../../CLImageEditor/CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/Utils/CLClassList.h b/Example/Pods/Headers/Private/CLImageEditor/Utils/CLClassList.h new file mode 120000 index 0000000..5ca4321 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/Utils/CLClassList.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/Utils/CLClassList.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/Utils/CLSplineInterpolator.h b/Example/Pods/Headers/Private/CLImageEditor/Utils/CLSplineInterpolator.h new file mode 120000 index 0000000..a4b0f03 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/Utils/CLSplineInterpolator.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/Utils/CLSplineInterpolator.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/Utils/UIDevice+SystemVersion.h b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIDevice+SystemVersion.h new file mode 120000 index 0000000..6535740 --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIDevice+SystemVersion.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/Utils/UIDevice+SystemVersion.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/Utils/UIImage+Utility.h b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIImage+Utility.h new file mode 120000 index 0000000..9afab8e --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIImage+Utility.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/Utils/UIImage+Utility.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/Utils/UIView+Frame.h b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIView+Frame.h new file mode 120000 index 0000000..017002f --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/Utils/UIView+Frame.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/Utils/UIView+Frame.h \ No newline at end of file diff --git a/Example/Pods/Headers/Private/CLImageEditor/ViewController/_CLImageEditorViewController.h b/Example/Pods/Headers/Private/CLImageEditor/ViewController/_CLImageEditorViewController.h new file mode 120000 index 0000000..4beb01e --- /dev/null +++ b/Example/Pods/Headers/Private/CLImageEditor/ViewController/_CLImageEditorViewController.h @@ -0,0 +1 @@ +../../../../CLImageEditor/CLImageEditor/ViewController/_CLImageEditorViewController.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/CLImageEditor/CLImageEditor.h b/Example/Pods/Headers/Public/CLImageEditor/CLImageEditor.h new file mode 120000 index 0000000..b0d7af9 --- /dev/null +++ b/Example/Pods/Headers/Public/CLImageEditor/CLImageEditor.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageEditor.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/CLImageEditor/CLImageEditorTheme.h b/Example/Pods/Headers/Public/CLImageEditor/CLImageEditorTheme.h new file mode 120000 index 0000000..a6048e8 --- /dev/null +++ b/Example/Pods/Headers/Public/CLImageEditor/CLImageEditorTheme.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageEditorTheme.h \ No newline at end of file diff --git a/Example/Pods/Headers/Public/CLImageEditor/CLImageToolInfo.h b/Example/Pods/Headers/Public/CLImageEditor/CLImageToolInfo.h new file mode 120000 index 0000000..fb51740 --- /dev/null +++ b/Example/Pods/Headers/Public/CLImageEditor/CLImageToolInfo.h @@ -0,0 +1 @@ +../../../CLImageEditor/CLImageEditor/CLImageToolInfo.h \ No newline at end of file diff --git a/Example/Pods/Local Podspecs/PNImagePickerViewController.podspec.json b/Example/Pods/Local Podspecs/PNImagePickerViewController.podspec.json index d892707..108f62a 100644 --- a/Example/Pods/Local Podspecs/PNImagePickerViewController.podspec.json +++ b/Example/Pods/Local Podspecs/PNImagePickerViewController.podspec.json @@ -26,6 +26,9 @@ ], "DGActivityIndicatorView": [ + ], + "CLImageEditor/AllTools": [ + ] } } diff --git a/Example/Pods/Manifest.lock b/Example/Pods/Manifest.lock index 2192003..121f95f 100644 --- a/Example/Pods/Manifest.lock +++ b/Example/Pods/Manifest.lock @@ -1,4 +1,22 @@ PODS: + - CLImageEditor/AllTools (0.2.4): + - CLImageEditor/Core + - CLImageEditor/EmoticonTool + - CLImageEditor/ResizeTool + - CLImageEditor/SplashTool + - CLImageEditor/StickerTool + - CLImageEditor/TextTool + - CLImageEditor/Core (0.2.4) + - CLImageEditor/EmoticonTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/ResizeTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/SplashTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/StickerTool (0.2.4): + - CLImageEditor/Core + - CLImageEditor/TextTool (0.2.4): + - CLImageEditor/Core - DGActivityIndicatorView (2.1.1) - Expecta (1.0.6) - "Expecta+Snapshots (3.1.1)": @@ -7,6 +25,7 @@ PODS: - Specta (~> 1.0) - FBSnapshotTestCase/Core (2.1.4) - PNImagePickerViewController (1.0): + - CLImageEditor/AllTools - DGActivityIndicatorView - PureLayout - PureLayout (3.1.4) @@ -21,6 +40,7 @@ DEPENDENCIES: SPEC REPOS: https://github.com/cocoapods/specs.git: + - CLImageEditor - DGActivityIndicatorView - Expecta - "Expecta+Snapshots" @@ -33,11 +53,12 @@ EXTERNAL SOURCES: :path: "../" SPEC CHECKSUMS: + CLImageEditor: dc3e5358f641368da3a76fc1c744a4c2ceb270ad DGActivityIndicatorView: ff2c76073d79692f724863c8dd38685866a03cb6 Expecta: 3b6bd90a64b9a1dcb0b70aa0e10a7f8f631667d5 "Expecta+Snapshots": dcff217eef506dabd6dfdc7864ea2da321fafbb8 FBSnapshotTestCase: 094f9f314decbabe373b87cc339bea235a63e07a - PNImagePickerViewController: ec5feb9bd69e25a02dd13423ba2f27aa07812dbf + PNImagePickerViewController: 38f4dff617354431e0b6071a52bd3136b79e3ef3 PureLayout: f08c01b8dec00bb14a1fefa3de4c7d9c265df85e Specta: 3e1bd89c3517421982dc4d1c992503e48bd5fe66 diff --git a/Example/Pods/Pods.xcodeproj/project.pbxproj b/Example/Pods/Pods.xcodeproj/project.pbxproj index 2c6698a..aa244c6 100644 --- a/Example/Pods/Pods.xcodeproj/project.pbxproj +++ b/Example/Pods/Pods.xcodeproj/project.pbxproj @@ -7,225 +7,328 @@ objects = { /* Begin PBXBuildFile section */ - 00C7A118E2009066833E66AC0214E0E7 /* PureLayoutDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 15F399540B02FB4D17F7CCE7FDF80587 /* PureLayoutDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 010FD4363C29673A61B9113CC6D79980 /* DGActivityIndicatorBallTrianglePathAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A432C1EB254758D26FEA0508968652C /* DGActivityIndicatorBallTrianglePathAnimation.m */; }; - 02CB472F28410C1D2172539C10797CA1 /* DGActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D60CFC4AB33F01A4104ED78E755EF2B /* DGActivityIndicatorView.m */; }; - 041F212A0C424EC0D3F57B8395DA4426 /* EXPMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 4DEDB9500182D56C311D639BBA4B4AC9 /* EXPMatchers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0500C6CD298002742B3C14817D228676 /* DGActivityIndicatorTriplePulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0CD0B8CD41E5272E748A22109A27CD68 /* DGActivityIndicatorTriplePulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05B1643814E247E0ADF23AA912EECCE3 /* ExpectaObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FF0446102A0F6A6989D41B51DB4C3F7 /* ExpectaObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 06AC13201E9EBEEE0BB7C8CF90EB7EAB /* SPTExampleGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = E8A75F4242E289782C970422FCC33D30 /* SPTExampleGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 070BB6684957BCA2F6695D9DD24EE669 /* SPTExampleGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = E6FF11399A79E70C1A1DC2325DE93734 /* SPTExampleGroup.m */; }; - 08748D8BD4D1D8F1A59A3680E51C3019 /* EXPDoubleTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = FFD02234451C20BC55DA34624EC4673B /* EXPDoubleTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 094A16F4C95961D5877A2D6C7A09F3F8 /* DGActivityIndicatorLineScalePartyAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = B71F9769375E8E2218692E0A955A90E9 /* DGActivityIndicatorLineScalePartyAnimation.m */; }; - 09F7D05FEBD4F98146BFE58421B16042 /* EXPMatchers+beGreaterThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = E567E1CFDD566EA01E1A143FFD774953 /* EXPMatchers+beGreaterThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 0A00079E6C88034A271D3302A67B141C /* EXPMatchers+beTruthy.m in Sources */ = {isa = PBXBuildFile; fileRef = 81B2F4395F985F110B12E3D592269BB3 /* EXPMatchers+beTruthy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 0A15C6D3591BE31A9E81AA082FD7ECF6 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = EBF3212F66C1845FCB74C7BB3D8605F5 /* FBSnapshotTestController.m */; }; - 0B7F510030167772AFD8D39C9BA22F11 /* EXPMatchers+beNil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CB598BE99DDCB82DF8545991C3DFB42 /* EXPMatchers+beNil.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0BE0454631C0A770DE143C65B854D3FE /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = 438A1C4EFD72411CB5E4708982182333 /* UIImage+Compare.m */; }; - 0C3788D7C3966CE01D70E2A9A5FCFDF9 /* EXPFloatTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = EBFAC8BA979908F739576B7354E1FDA8 /* EXPFloatTuple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 0E96B74B9A624C37AEA6523C571783DF /* EXPMatchers+beInstanceOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A3683C5658C1F8670B3D5917BB9703A /* EXPMatchers+beInstanceOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 1003797060FD69BD5F0FCC17BB15D296 /* DGActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 527718B4621BCDE71BEA55AF9B7391A5 /* DGActivityIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 10B9B8BBD89C6A2A357A38067CDFCDB6 /* Specta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = ABEEEB75B318BDDBD3FFAB8FCFE9D008 /* Specta-dummy.m */; }; - 12BCF7ABC021906AF683C0B948A342AC /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = 789BCDD75B28A5DA925EC45071CD892C /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 13289BB3B7D747D8211ED8578550A7BF /* SPTTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = B62BCAB6786FC92CF3515157811AF7CB /* SPTTestSuite.m */; }; - 134AEAE1AA909F54003C371821B9436B /* SPTCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA9DEEE31D71ADE5316274427501DFA /* SPTCallSite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1387C9B33E3189F9B6F20DC5AFFEFFDB /* EXPMatchers+beGreaterThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 63116EE0063C84EE0E38B293DD6C15D0 /* EXPMatchers+beGreaterThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 14AB06531BFE33F9D1E5B819571D8B12 /* DGActivityIndicatorTripleRingsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 542396F01EAD6F9FC1563EA619D76BF9 /* DGActivityIndicatorTripleRingsAnimation.m */; }; - 1733DD89268EB4AC274F3F6E69ECD83D /* PNImagePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA45DA3B5333B493A6E548920A28473A /* PNImagePickerViewController.m */; }; - 18881AD82DBE7AECA3D0C5DC25441F0C /* EXPMatchers+raiseWithReason.h in Headers */ = {isa = PBXBuildFile; fileRef = EC82E83F0F1ADD40100BBA02B5AEEA76 /* EXPMatchers+raiseWithReason.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1A8A11EB92E8090339675B7DAE9AE7A3 /* DGActivityIndicatorLineScaleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = CF9877BE0055CEA7454DF31C84ABF10C /* DGActivityIndicatorLineScaleAnimation.m */; }; - 1A8DAF192608984F0C5BF370F2643DA2 /* EXPExpect.m in Sources */ = {isa = PBXBuildFile; fileRef = 58CBD375903D52C733603B13F3B9FD75 /* EXPExpect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 1B9580D88E28A8CB50E01CC1CFF21CEB /* DGActivityIndicatorBallClipRotatePulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C736319C6C57EA826839D881C13FE25 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 1DF8C86D628B05DE67656977CE189872 /* SPTCompiledExample.m in Sources */ = {isa = PBXBuildFile; fileRef = D1138C8D47C1A4DFA2388E211621D193 /* SPTCompiledExample.m */; }; - 1E1933CF48DE4C04F572656399BC5EAB /* EXPMatchers+haveCountOf.h in Headers */ = {isa = PBXBuildFile; fileRef = D6C77F0C15A2163E404CF29B5500E6A3 /* EXPMatchers+haveCountOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2005632E03B3015EE9EE5B02B433758E /* DGActivityIndicatorBallPulseSyncAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F00ED288A8C5F6FC49AC29142BEDBDF /* DGActivityIndicatorBallPulseSyncAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2205A3416E83A607BAA96A195BA66E7D /* DGActivityIndicatorAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 87FF64502AF6AFB5CD5DF7E1FC428797 /* DGActivityIndicatorAnimation.m */; }; - 25FC640CF3C6731DF51A55F49299519C /* DGActivityIndicatorBallPulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D5AF212112217B9D819DDFA5022F99 /* DGActivityIndicatorBallPulseAnimation.m */; }; - 26FCBF7893E7C1DDF867A2964FEC00E9 /* DGActivityIndicatorTriangleSkewSpinAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F098E37DC8CF2AC49ADACBF9B5135BE8 /* DGActivityIndicatorTriangleSkewSpinAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 27D8EDAF0306D378EFB50A89ECED90BA /* DGActivityIndicatorRotatingSandglassAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5218758C2C26EB32D2DB63974EE24985 /* DGActivityIndicatorRotatingSandglassAnimation.m */; }; - 2A044D479EE8A74C245A63F03CC58BD8 /* DGActivityIndicatorBallGridPulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0DFAE1B12397D48FD8F58243043DBADE /* DGActivityIndicatorBallGridPulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2B4C8719269E242AF7EA424122B140C2 /* DGActivityIndicatorAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 93AA1AAE1542ABEC84B5AEF48EA3F1F6 /* DGActivityIndicatorAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2BED55731EE66CE43B17B9CECB6F842D /* NSValue+Expecta.m in Sources */ = {isa = PBXBuildFile; fileRef = 82D85B82E08D2AB5F0DE12827636AE39 /* NSValue+Expecta.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 2C9C681DED4716979EDBE2C3128E5272 /* EXPMatchers+contain.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE8745F8C822127F4F15C813259EC3F /* EXPMatchers+contain.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 2F329D973FA7238383FF5468D1E1D978 /* PNImagePickerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 48F4CE36A0C3189880B7B1EBBB490FCF /* PNImagePickerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 33D287602F3A06015E8D9782FA209DEB /* DGActivityIndicatorRotatingSandglassAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 53B0122054FB8DCEC4B219E6B1ACBF6F /* DGActivityIndicatorRotatingSandglassAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3585D664E5150B343EB14EA2BB6559EA /* DGActivityIndicatorFiveDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AAC704390D1003A4706DEEB7AD9E712 /* DGActivityIndicatorFiveDotsAnimation.m */; }; - 35CD0B1E0C598785B44765E4131B5E57 /* DGActivityIndicatorBallRotateAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3D22976DF5930D258F8D0CD43C34E0A0 /* DGActivityIndicatorBallRotateAnimation.m */; }; - 382E189A8CE9F0CAC37E8ACEA467A285 /* DGActivityIndicatorRotatingSquaresAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E1206B1BCA502C8211B190211467F547 /* DGActivityIndicatorRotatingSquaresAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3B063212A6EF2B52AC8B7CCC918E4D12 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 7FBD26F8A36473565444B78F0014ACBD /* FBSnapshotTestCase.m */; }; - 3B7B130C746084034B068D1161998C78 /* NSString+HexColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC497D9C037951A3E10AB5B3A43AC13 /* NSString+HexColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3BEAB8AE0D3D6B4F0DA5C3F2477E7C08 /* EXPMatchers+beSupersetOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B8C1B6E0AD80C1DC53B309AEA8E2CAD /* EXPMatchers+beSupersetOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 3C64BF703DD397E4B99C4C0A496B9AA4 /* XCTestCase+Specta.m in Sources */ = {isa = PBXBuildFile; fileRef = 0735607C9210AD484C6B809578F3DA9F /* XCTestCase+Specta.m */; }; - 3C99AF91E2501167B5461DCC24F5B2FD /* EXPMatchers+match.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A4C544A7D61E9914B46C9315CE2450B /* EXPMatchers+match.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3CAD7C140B36E3D3E598054D5D09300D /* EXPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD772BBF1C19F20856556B753A7A0C8 /* EXPDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3F9FF8DB279402687102A4F50661AE2A /* DGActivityIndicatorBallRotateAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = ACC4C82E9336F709DF3A6A9D4F046E51 /* DGActivityIndicatorBallRotateAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 3FE6B4A7835A59EBBA77FCBAD0FD7868 /* Pods-PNImagePickerViewController_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 313B777032AF94534B4B2ADECF32763C /* Pods-PNImagePickerViewController_Example-dummy.m */; }; - 406F6344A6E0E6FC7CFF8BD2149EA2DA /* EXPMatchers+equal.h in Headers */ = {isa = PBXBuildFile; fileRef = A894372807AEBE5B8C379CE2DF1003AA /* EXPMatchers+equal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 427418E691958DFAA35164CB1D4C7947 /* PNImagePickerViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E8833656A3D899E088BDE95DF7FB5F /* PNImagePickerViewController-dummy.m */; }; - 42D023EAB5F7F8E7564B6194F97215F5 /* NSObject+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 3041B454B2F3FBE0BC88787C8205D429 /* NSObject+Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 42DA4F778EDC2EFE944E6D40E45226F0 /* XCTestCase+Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = D9AF3C7412855FEC35496E5C1F6946DA /* XCTestCase+Specta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 436F687B6D3E7EE8E70F3AE128093D22 /* SpectaUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = 44342D65C652BFEE364AA3618727EA53 /* SpectaUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 445886204E6F4D0FEC1039F03C538247 /* DGActivityIndicatorBallZigZagAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F4116B2FC44E257E4E81DECF45D1475C /* DGActivityIndicatorBallZigZagAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 44F41CAD2082185B032D7655D916E58F /* SPTExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CB1AC9638BEE4A7F0BB1D4803C22396 /* SPTExample.m */; }; - 4916752367EF5E2CC0FF6B729E6847ED /* EXPMatchers+endWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 61B7B7D74911BF1E22A6D82FA9A0D024 /* EXPMatchers+endWith.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4BDECD0267A6C2B9DD07FD21458A33E2 /* DGActivityIndicatorTwoDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 99587234E58AD47D94EEF33EE5593CCB /* DGActivityIndicatorTwoDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4C160EB200147210363D197B3C4759D6 /* DGActivityIndicatorBallBeatAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = B08F1B2A72B66B20EDC43ED8E2E16932 /* DGActivityIndicatorBallBeatAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4D98102E36719E62D8D3AD11892E124F /* SPTSharedExampleGroups.m in Sources */ = {isa = PBXBuildFile; fileRef = E0F3260E26F55C1FB0CC3EA9EEE00A78 /* SPTSharedExampleGroups.m */; }; - 4DE291731DC4B09C7EE55342FB8EB195 /* EXPBlockDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = A198E8B5473803670E04622EECB0BA4B /* EXPBlockDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 4EC45548385A6B7B050FE9204476F135 /* UIApplication+StrictKeyWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 42A031D21A30160D067D4F5047A361CF /* UIApplication+StrictKeyWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 4F1CD6D893210D801A51E64C975EB3BD /* SPTCompiledExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C437140653DEEB438731F2F5EC68707 /* SPTCompiledExample.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 504823050C9106E2EAE7F37A0008306F /* EXPMatchers+beKindOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 00B65B647667F1863CF7F97BC49BDAB6 /* EXPMatchers+beKindOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 50E5375CB3B35C244C2C7862C8B08579 /* DGActivityIndicatorBallZigZagDeflectAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B5E8BC33C445C284FF1AD2DB5A4B826 /* DGActivityIndicatorBallZigZagDeflectAnimation.m */; }; - 530D070E0E04E37792153D7ECEBCBB14 /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = 62FEE9BEDEDB62AEC56AC8BF396D704A /* EXPExpect.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5379BAB8CAB4BF3623D4B5CCBAB8182E /* DGActivityIndicatorBallClipRotatePulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C47305E86BCE08B135933CFE8B015712 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */; }; - 54C53E1D3B24640C7C14FCAFC1C3F5E1 /* DGActivityIndicatorBallSpinFadeLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 584C16CAD342AB77F9166FB9E5A82DF2 /* DGActivityIndicatorBallSpinFadeLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 54EB95FE9AFE459A64CD8AA29B7E1436 /* DGActivityIndicatorRotatingTrigonAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 343AAF28393979C4181639EC54E45BAE /* DGActivityIndicatorRotatingTrigonAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 57B54BD5D85F5BABE3CC4F9883824D63 /* EXPUnsupportedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D11B1EFC74CE1980AE638AECACF9C974 /* EXPUnsupportedObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 57E0098AADCFAB47B00A0E1158068EB0 /* DGActivityIndicatorBallGridBeatAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 20408733ABDE4A511D02524731CC0E87 /* DGActivityIndicatorBallGridBeatAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 591E7A6DD2DEA92695D105465D12AD1D /* DGActivityIndicatorBallClipRotateMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E6BDD6BDE5BE5B36A1ED5ACF8852C49 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5A262F52FE054C70E83DC7B6C32E500E /* DGActivityIndicatorCookieTerminatorAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F7CC758FF7A51797080A968859DB841E /* DGActivityIndicatorCookieTerminatorAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5B64BBFA0CD5D63E1E5809D92B6E7FDF /* Expecta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C6A0DFA69CA61B3B10109B0D5FD8F97C /* Expecta-dummy.m */; }; - 5C6FDDA71C273EF1F1E046C1467B3067 /* EXPMatchers+raiseWithReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 340AC250370DEFE01DC4672A8D88912A /* EXPMatchers+raiseWithReason.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5D45E0385CC6CBE4846C05C5BA867A68 /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = 30045B2304111FBD90CF8ED689520EB5 /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5F978E50EE337C460D3EF59FACEA5F06 /* EXPMatchers+beGreaterThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 979DD3CB93F4490B3615CB12F3E0A9EF /* EXPMatchers+beGreaterThanOrEqualTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6263DF85CAC47FE30E77665FA16AF0D1 /* DGActivityIndicatorNineDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = B29331DBF52D38CDA41515F9C1D0F8FD /* DGActivityIndicatorNineDotsAnimation.m */; }; - 64382C59124DAB31C0FE1B8FBD58471F /* EXPMatchers+beGreaterThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 05E6C8C12E1F8760CA2666CEA583327A /* EXPMatchers+beGreaterThan.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 64944DDD778FD0A450BB2A16BB75807E /* PNCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 26896700324AB679EFBE596D65C64FE9 /* PNCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 660148CE4CFAD377D84C5CBCB40D1691 /* EXPMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = D2BF444E62A1BF778634544CE47F974A /* EXPMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6832975463D985146A4C9AD0BB93CAC0 /* EXPFloatTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1F29BADB09B2DBD35EE4B0F35AA9DE /* EXPFloatTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 6A9077D9ED73D8F084547624D2295E02 /* EXPMatchers+beLessThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = FB6FA9F1190576BB11ADF678F5A46655 /* EXPMatchers+beLessThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 6ADE34791D1DB6793C1E4D38DBF85286 /* DGActivityIndicatorBallScaleMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A8986D5B3683E751BBCB38F9D3E745E9 /* DGActivityIndicatorBallScaleMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D5DEEE8EAEAD1ECFF1D9E6F4D9EB3E4 /* EXPMatchers+beginWith.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B35690475813D750553F708E232440 /* EXPMatchers+beginWith.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 6D9C8DB7300E4E960F36745CDB8A0471 /* SPTCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FA70EFF180FC1428130AFED3E0644ED /* SPTCallSite.m */; }; - 6EE045DD2ABCD9D7EA3B5C51C08C83C9 /* DGActivityIndicatorBallScaleRippleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 540BD55DE87739E33BEBFC00A131941D /* DGActivityIndicatorBallScaleRippleAnimation.m */; }; - 7030759772B01F05620150FDAC7D2043 /* EXPMatchers+beFalsy.m in Sources */ = {isa = PBXBuildFile; fileRef = C9006F52DD6059B7910C6A9B948D008F /* EXPMatchers+beFalsy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 7061A4B65AB1873E0A2D1CA8C9510570 /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E6FBD1D02A3ACAF9A744FC0A3C3EE49 /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 711F75973345CBDC71658323E6193BE2 /* DGActivityIndicatorLineScalePartyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E72689157E3B261C8DD620BA95A3644C /* DGActivityIndicatorLineScalePartyAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7167C44A7954FC7DB01DAB5D92E07222 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DAE39110C161CD4116FB3748B10B635 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7254A8855B81FFCD7A34F6090C25DD10 /* DGActivityIndicatorBallBeatAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA40938C9E29CBC060588AF424FBDDC /* DGActivityIndicatorBallBeatAnimation.m */; }; - 72782FFE0328E19423341171E7EAC814 /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = F89362F2451A13B64AE32C67DF4CA1C3 /* UIImage+Diff.m */; }; - 728DEA58139FC1FE0AA6A6B82743974C /* NSString+HexColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 0241D4A62E5BBCC907B632CBE01BC4A6 /* NSString+HexColor.m */; }; - 738B5070638475BF36BB0E0D69CCACE5 /* DGActivityIndicatorTriangleSkewSpinAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B0ADCD49CB97055862DB1453BDFD8E4 /* DGActivityIndicatorTriangleSkewSpinAnimation.m */; }; - 740667B5E21C75E36A436B6527883CFB /* EXPMatchers+contain.m in Sources */ = {isa = PBXBuildFile; fileRef = E3E5246E179E90A9260ED4FB4E8F3E1E /* EXPMatchers+contain.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 741ACA29F831D9D7711F72B905A113C2 /* SPTExample.h in Headers */ = {isa = PBXBuildFile; fileRef = B2672ADBFEB22938D2F91C5FEF78478B /* SPTExample.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 742EAA0875A8A0D26143A1D50DE54BFB /* SPTTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 07FD6F4D0A9DDB89C41C1056507591FB /* SPTTestSuite.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7442B0F755193F24903A4E658847866A /* ExpectaSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = 32FCF38F326C4E9FB34B0EE2163D99D2 /* ExpectaSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 74BD6EA63472F447A81A316FE8914104 /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = CC2B05BBB0C6B65FC67DB06D9A5D6184 /* EXPMatchers+raise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 7715D828E563776C1BC279C6CAB91C40 /* EXPMatchers+beTruthy.h in Headers */ = {isa = PBXBuildFile; fileRef = A882930B1B557522A5440C42B1B67904 /* EXPMatchers+beTruthy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7895827122C110CD4FD94EE3EFA5501A /* EXPMatchers+endWith.m in Sources */ = {isa = PBXBuildFile; fileRef = AC1556429910AF9D7A5C104820460362 /* EXPMatchers+endWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 78B8BE94445C35BDAAC5FFBDF9FD7AEE /* ExpectaObject.m in Sources */ = {isa = PBXBuildFile; fileRef = B59B0A5AA79E9C81F13D18852D9755F5 /* ExpectaObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 78D901D8665019930BEB9B017DD61247 /* DGActivityIndicatorBallZigZagAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 127BCD869F399CC2D26DB2A825276751 /* DGActivityIndicatorBallZigZagAnimation.m */; }; - 79E6EDA55A2806201E7A8B671B869297 /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = B0DFB3411CDD6190D6885F20F3F39752 /* UIImage+Snapshot.m */; }; - 7A49D725F1673275E3BB157017BE1708 /* DGActivityIndicatorBallZigZagDeflectAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FE1D46581B55DF807E66708E165096F /* DGActivityIndicatorBallZigZagDeflectAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 7BC9F65797AA8C48D92E32E4B711BB9C /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDF8B46279229C6A6B77BFF1863618E /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 802AF9F20091DF8428BBAC20166F09F3 /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = AD2C88560277830873F0B4F9A1AA5A6A /* FBSnapshotTestCasePlatform.m */; }; - 8121BA41DC0BC7F18CA5428839AA4040 /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = C850E4119FC6A751D2F900C85D446694 /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 82160641E649C133D36DECDA65B12EB4 /* EXPMatchers+beInTheRangeOf.h in Headers */ = {isa = PBXBuildFile; fileRef = A476E9C3796F0A16A0BCC278451A5887 /* EXPMatchers+beInTheRangeOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 84249932B8EDE09A7AEAA735F27C23C9 /* SpectaDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 11F5321913FE795A88F3C15A0E4804FE /* SpectaDSL.m */; }; - 85D852589B2E1F856379E92946661280 /* SpectaUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A1245ACF63C01A89B6C833478A3754A /* SpectaUtility.m */; }; - 86F15087CAB1E3329958ED6E5D5AA6F6 /* Pods-PNImagePickerViewController_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CB53272766B326AFED0717E9DBEFF871 /* Pods-PNImagePickerViewController_Tests-dummy.m */; }; - 88CB4D12DF5D016FF9514D51B5200FA9 /* UIApplication+StrictKeyWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 56B0FAE8AF56DE36B7F41D22E3CFBA2C /* UIApplication+StrictKeyWindow.m */; }; - 89F6AA6386BE29948AA66450EF70CD0A /* EXPMatchers+beFalsy.h in Headers */ = {isa = PBXBuildFile; fileRef = 11B6330FFF7F7E3D0E0D055667627C39 /* EXPMatchers+beFalsy.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8D844A897C252A4BC5A990B088120C27 /* EXPMatchers+conformTo.h in Headers */ = {isa = PBXBuildFile; fileRef = E2BF5B06A69C2878C3A51825998F15AE /* EXPMatchers+conformTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 8F28879286915373FB094878B3CD0214 /* EXPMatchers+beSupersetOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FE5BFE1B82A4328F9542EDA31BFB877 /* EXPMatchers+beSupersetOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 90DC4427B8EA4546FC7A309226D414C5 /* PNCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D358CEC162D5EDFBF364FF07521A725 /* PNCollectionViewCell.m */; }; - 912DB6378044E54828CD9E9458C2C80A /* DGActivityIndicatorBallScaleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A05315F30184FBB74EF2E8D408C0329 /* DGActivityIndicatorBallScaleAnimation.m */; }; - 95A32BB687CB2A964BCEF31421B63EA9 /* NSArray+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = D2E5AA027920FEFC6501EDBD7927549C /* NSArray+PureLayout.m */; }; - 9615260CE5E8AC1514AD1073E07A3865 /* DGActivityIndicatorBallTrianglePathAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 345A4875D2470550A613D350ED101F8F /* DGActivityIndicatorBallTrianglePathAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9649C3E0977C601124B165F614A8003F /* EXPMatchers+conformTo.m in Sources */ = {isa = PBXBuildFile; fileRef = A37F6EE49DE93B85607D36F96BD35450 /* EXPMatchers+conformTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 978983ECB597A6E6FAC484BAEF1BD25F /* EXPMatchers+FBSnapshotTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 4B267F7099E5F667D61B49082AE9B00A /* EXPMatchers+FBSnapshotTest.m */; }; - 9791FBBE0A7A98C66984F2CC0DD31343 /* EXPBlockDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 8167B36F49B90C5CF522D693F4E6CCBE /* EXPBlockDefinedMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 99A7CD83765F909812285AB07AFF52B9 /* DGActivityIndicatorThreeDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = FB899888391C6218F5C3963CA824654D /* DGActivityIndicatorThreeDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9A07800C82BD27AA95F92F5C64A0D8D9 /* NSLayoutConstraint+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 688ADDCBE42993718E3E0BE21CD34F88 /* NSLayoutConstraint+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9AE27FCE44D21D1CD0CABC2B3336E4BB /* SPTExcludeGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = F7FFB8D223B0E1989708F0B39CF317F3 /* SPTExcludeGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B1EFE6DE4A457EDB03EF9B34E7BF617 /* EXPMatchers+beInstanceOf.h in Headers */ = {isa = PBXBuildFile; fileRef = BE241C92B3673E71452B186D973D8B99 /* EXPMatchers+beInstanceOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9B84064B099EF1CC825DFF4D01B11AC1 /* DGActivityIndicatorDoubleBounceAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 653E1D04B5C42953BE49583834B88195 /* DGActivityIndicatorDoubleBounceAnimation.m */; }; - 9BACDD44F8FB7876FB8E5691554EACE6 /* DGActivityIndicatorBallPulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B17048967E86B6F88FE3760E061CAAC /* DGActivityIndicatorBallPulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 9ED31CD8DFCACF06F51A88E559058705 /* ExpectaSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8D56777CAB61E60ABE5169B3257975 /* ExpectaSupport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 9FD9C3873FFEFB06B0EFC348EBD3CDA4 /* EXPMatchers+beginWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 50C51B444293D19FE5A444BE84CC95B0 /* EXPMatchers+beginWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A054A5283AF7F8320A2AE5E035F64413 /* EXPMatchers+equal.m in Sources */ = {isa = PBXBuildFile; fileRef = 5500DEB3B1B37E089B180FFF2177B440 /* EXPMatchers+equal.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A11F2F3E3FF83F4C05D7B290EDF67285 /* DGActivityIndicatorLineScalePulseOutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E900B62E26E87ED9E367ED337DECB00F /* DGActivityIndicatorLineScalePulseOutAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1B29D1574B325F0460E2D1531BE6F20 /* ExpectaObject+FBSnapshotTest.h in Headers */ = {isa = PBXBuildFile; fileRef = C3E7E7FEC55D09C690F84929B08CF5C6 /* ExpectaObject+FBSnapshotTest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A1E5DF8FF288877C4E57358D476D2E1E /* PureLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9405B80774B52E7F63F79E305C0E1B6D /* PureLayout-dummy.m */; }; - A2971465F0C3D91347BA9139DE6C0B75 /* DGActivityIndicatorRotatingSquaresAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 891D18912E498329CFA4AA880138180D /* DGActivityIndicatorRotatingSquaresAnimation.m */; }; - A398B74699BD8CEDC9779FE58E8CC5EB /* EXPMatchers+FBSnapshotTest.h in Headers */ = {isa = PBXBuildFile; fileRef = AFDA1D435FFCB12E08C11D72F10B3A2A /* EXPMatchers+FBSnapshotTest.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A39F7144EBB2E7A25F077D6DF19C8FBB /* ALView+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 10388F3FDCF8037C5696BC6E48AF93C6 /* ALView+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A7677CEBE8C676B695C959384BC57583 /* EXPMatchers+beNil.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DED8B42C6394D9F7362325DB10CBD0B /* EXPMatchers+beNil.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - A807A3B9B2B4C078E19AD6DECBAA81C3 /* SpectaDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = F5A92B987F5614CCA4ABCAAF36F7B7BB /* SpectaDSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; - A949335E7B0D7B272487456CF1392D51 /* DGActivityIndicatorThreeDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = A8CF38D63EC176579E09FEC0430CE737 /* DGActivityIndicatorThreeDotsAnimation.m */; }; - A9B2B355214771031DE427BA9BAB8733 /* NSValue+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DF748CF65727745E3EC958A1383DABA /* NSValue+Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AA77A90F799E2E3DFBD86B70DE4A7E47 /* FBSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE42F6BFFC31F81D9E491D65E3F2DA0D /* FBSnapshotTestCase-dummy.m */; }; - AD5F325645F3F7A501AD4BE0AB6A3E03 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = ADD8BC79468CDD9E764D6F1EA496B4F7 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AF0F638BE9BB74D4C33A2303A0B7D1F4 /* DGActivityIndicatorBallGridBeatAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A593BD1D7AFF0D2985324CBCECCAE23 /* DGActivityIndicatorBallGridBeatAnimation.m */; }; - AF5BC982B23E3A4BB0B5F40287560307 /* DGActivityIndicatorRotatingTrigonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = A18F9B8AD3DD0F98F7B30230CA47AE74 /* DGActivityIndicatorRotatingTrigonAnimation.m */; }; - B0691216975A0869780B661AAF32738D /* EXPMatchers+haveCountOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 84E1D8318F87F2F59C78E51856A44682 /* EXPMatchers+haveCountOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B091A92DA60FBAABD0E017E7A307F490 /* XCTest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A0EA618ABA1FEFE300B2C8912EAD2880 /* XCTest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B2058C98EEDBAC40552E6531597D4F3F /* DGActivityIndicatorAnimationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EEEBD26C484268FF0F6D44F610A010BF /* DGActivityIndicatorAnimationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B23BC9C823DAB94FDAD3D176D4B57578 /* DGActivityIndicatorBallClipRotateAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E8B21017D962491FD4EB7B1374EEAEB4 /* DGActivityIndicatorBallClipRotateAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B27731D7870ACB9E57C629A60864F3D2 /* EXPMatchers+postNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FA15D878D8EBA456903F0BA083082C0 /* EXPMatchers+postNotification.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B2CDFDCAC565221AB92DEB48781C9761 /* SPTSharedExampleGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 1254B4CBF3BC43A4AA14130C9D994552 /* SPTSharedExampleGroups.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B4EAD5CE0065AB8795C71E04BAD4F9BA /* DGActivityIndicatorFiveDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B6E2D9BA249CF515E17ACA8E171DD28 /* DGActivityIndicatorFiveDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B56295163A81105E4A6D40E5DC0DD1B4 /* EXPMatchers+respondTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C13D985E199B6606EC19D0B9D660D78 /* EXPMatchers+respondTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B57E7A8C8FE9D637F1BA77175E811ECB /* DGActivityIndicatorTwoDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 196AAAFF899EED6ECB64BBF8FA18617B /* DGActivityIndicatorTwoDotsAnimation.m */; }; - B681483BFE6373308BC20BCA4B57E556 /* NSLayoutConstraint+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 97B59947B5CDD647744634C51303C68F /* NSLayoutConstraint+PureLayout.m */; }; - B69F76F691C13122EFCD1972A9022BD8 /* SpectaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 47D5461A0482ACCE07AB5C6A4432722A /* SpectaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6C24CCD08DD194019FA1B1624D64173 /* SPTSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A4EFB81AEAAA8CB7DF710CD30A47FE1 /* SPTSpec.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B6DBC56ED0EB80C93D632D37CE7819CD /* DGActivityIndicatorNineDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C079324BD4564637742D2363D7235B39 /* DGActivityIndicatorNineDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B890B155903A154005EE5651865DD151 /* EXPMatchers+beCloseTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F09BF8543BE98A75DF08FBE5DA7749D /* EXPMatchers+beCloseTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B96A7F9A9B09709BFBC64E9A70AD5504 /* EXPMatchers+beSubclassOf.h in Headers */ = {isa = PBXBuildFile; fileRef = A20DBC0C903E53D990DF826B885AE08C /* EXPMatchers+beSubclassOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; - B99EB3B1145B9AFD0708D92B3B40AC35 /* EXPMatchers+beKindOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 48ABB3B17ABA5349AA2490F7F0199698 /* EXPMatchers+beKindOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - B9DE002F87486D9C42FBFCAF2FD44B64 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 09632C0914372467E37C5D3F0A2D2FA0 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */; }; - BD933A069DC28703FECFC4B5D4ACA64C /* EXPMatchers+beSubclassOf.m in Sources */ = {isa = PBXBuildFile; fileRef = E47379262AE52F59F1D1FDF1D47ADAD3 /* EXPMatchers+beSubclassOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - BDE88D4CBA76A00F02B3C763C888C062 /* EXPMatchers+beCloseTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E6F83B96D10933170B381722B6F94CE /* EXPMatchers+beCloseTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - BED913166CB3BA83A2A40EFD7443FEA9 /* NSArray+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 8A15F60B4D82339861ADA171A6B48890 /* NSArray+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C1DC2A9EB7B4A41D33AE508114D482CD /* EXPMatchers+postNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D0903E79E56B300AB7CDA304C8E65AB /* EXPMatchers+postNotification.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C3E2128C8AA83D259B80103CE10C2DC7 /* DGActivityIndicatorBallScaleRippleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FFA621D2AFC60333CB094F5F9B7A0F4 /* DGActivityIndicatorBallScaleRippleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - C474C49B58675733FA7C5DBAF3F694CD /* DGActivityIndicatorBallSpinFadeLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = B8B9BA86A6F882B2F2D33561B48FCCE2 /* DGActivityIndicatorBallSpinFadeLoader.m */; }; - C698636623E6B996F47989C5745AD473 /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = D1E62DAB191F6C2415F9D3213AF28AA0 /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CA649B81C91FD77E38DA4B2175542160 /* EXPUnsupportedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CFCFD6A7A6749E103F46BC78D57AF4A /* EXPUnsupportedObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CC1A9C99D77A42D1218E3063BDAB9E46 /* DGActivityIndicatorLineScaleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 44026A095B9B6969B90CFAB82A55E28C /* DGActivityIndicatorLineScaleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CE202724EBC0851E72E1D5B574DD6310 /* Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = 2ACDC414CD8D02F1CD1C7F6A45DBDEB6 /* Specta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - CF446290E0D69CAE95CBD1EC394AFDC4 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 01493E6E259777EA76017D828C38F9DF /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */; }; - D098A602C7372879DBD37B0386841FD9 /* PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 43A77050EE412E799E68240DA53D491F /* PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D13823551BE04038F6444A00DFE4122F /* EXPMatchers+beIdenticalTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A9F34644F7D3C6AE77F265C69CD3893 /* EXPMatchers+beIdenticalTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D1E6D4FE575333F502B2C4A777FBD6F1 /* PureLayout+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = A191716885879336C1E252D2CCFBBD0B /* PureLayout+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D3AC389E6BA3181AD81E46FB4F033CF5 /* EXPMatchers+beInTheRangeOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B1CDBADA96A60A6CD6E44CF8DCDF045 /* EXPMatchers+beInTheRangeOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D3E67AF91D0DB5A7CF6457947B1B7C8F /* DGActivityIndicatorDoubleBounceAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2274B65099CC808B6918054841DA2D64 /* DGActivityIndicatorDoubleBounceAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - D757070A74D2EF521FE79475E701D906 /* EXPMatchers+match.m in Sources */ = {isa = PBXBuildFile; fileRef = C2A01990D424165AF7F7272B05391885 /* EXPMatchers+match.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - D9AC160C1D04F4E96F949762670749BB /* Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AEEAD3E15294B9DAD060D01F30957A9 /* Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DC5168648D2D4470CAF110A8D5DB510C /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 54DA03431C7C3296667AE784520FE4FD /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DD441889A3B155B28FF3B65BC55C2878 /* Expecta+Snapshots-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E417D5C6DF24AC4524F9CE87642ED85 /* Expecta+Snapshots-dummy.m */; }; - DEEDDC1E7E67D10C02AE7F9C9114C964 /* DGActivityIndicatorBallScaleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 38E76EA65E32ED08A8892DDFE7785DFE /* DGActivityIndicatorBallScaleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF205E6078602E31BDED22F3F6E5D1B1 /* SPTGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 20AC5714C1010B8B3F085AEAD0D53DE8 /* SPTGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF5BA3CDA109C7FABC41D1E2B1963F80 /* EXPDoubleTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F57D3E380552F1C512A0BD5DA735CDA /* EXPDoubleTuple.h */; settings = {ATTRIBUTES = (Project, ); }; }; - DF932A448D602A6EB68228586D90DB77 /* EXPMatchers+beLessThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 9CB173AF16A4149C470E1B32C67FE6B0 /* EXPMatchers+beLessThanOrEqualTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E04648FC3DB7B73293FDC4B0FCF6C516 /* EXPMatchers+respondTo.h in Headers */ = {isa = PBXBuildFile; fileRef = CFD00093D4CE466822FB65B7632B2C98 /* EXPMatchers+respondTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; - E13C1756A365D998EE23F0162D438F81 /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 3E55C7C509ADC9496A00C582F1054DDF /* SPTSpec.m */; }; - E2171C4B216E990DC14BD0B3E31A13E3 /* DGActivityIndicatorBallGridPulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E30496B7608B1C380CF9A07A89FE25A /* DGActivityIndicatorBallGridPulseAnimation.m */; }; - E5A7189D47304D8244835989B18836C8 /* DGActivityIndicatorBallScaleMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1379B55756ECF1ADF7EF2943EBAE87DE /* DGActivityIndicatorBallScaleMultipleAnimation.m */; }; - E6BB5738024B2A6191623B14C85B7622 /* ALView+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 4E122446AA583E5DF5171E199924040D /* ALView+PureLayout.m */; }; - E7647623505916C9DCB1E377C9D6A6F4 /* DGActivityIndicatorTriplePulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = A5927D0FB8A21F422200F6D0EC3F9350 /* DGActivityIndicatorTriplePulseAnimation.m */; }; - EA8B8A9C0725A0AEBA2B49AB0073F99E /* DGActivityIndicatorBallClipRotateAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 77A9BDDCD05BC18CE09F76B9E829B064 /* DGActivityIndicatorBallClipRotateAnimation.m */; }; - EC6F4D4EB03B32982BD40AFA33E5162E /* EXPMatcherHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 08324062150C42273AC21DD6FD100E2E /* EXPMatcherHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EF3456A6E85AAEDC25A74E4A7488E9EC /* DGActivityIndicatorBallPulseSyncAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 63B3E7DDDD6AAA8E26798EF8D7EE14F3 /* DGActivityIndicatorBallPulseSyncAnimation.m */; }; - F048EA8AC3DF6A4B8E6B39DCCA528983 /* DGActivityIndicatorView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F7BD1DBB61EDD7F336F4A21B67B0B27F /* DGActivityIndicatorView-dummy.m */; }; - F1A4D1D6EF7440FCE0A8CBDC11C69F78 /* DGActivityIndicatorBallClipRotateMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B520EE033269E818A119BBD7EF94ABC /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */; }; - F1EDBB2FDA3EA365FA56A9294BCB30C6 /* EXPMatcherHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 4AA91518BEA6CD1CB6F913AFAB4E5407 /* EXPMatcherHelpers.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F2316598F9BBA8363F45B64D6B8F93F4 /* EXPMatchers+beLessThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 7050DE2AC3EE5077F6C38C241FBCA941 /* EXPMatchers+beLessThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - F2E919C85D38016E6570CE161679370F /* DGActivityIndicatorCookieTerminatorAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = EE370723C19DF7804BC8E9006DDAA7E5 /* DGActivityIndicatorCookieTerminatorAnimation.m */; }; - F3B4143A9074EC0551BA265240BF4DA7 /* ExpectaObject+FBSnapshotTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AD5A8553307E67F16BB37F904C5600F /* ExpectaObject+FBSnapshotTest.m */; }; - F6AE953ACA5736EB86087839968526FF /* DGActivityIndicatorTripleRingsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E3C6071E73445BFA9A2DDC213B0127C3 /* DGActivityIndicatorTripleRingsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; - FCD5C206AD48A5653DF118A2DE87F40F /* DGActivityIndicatorLineScalePulseOutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 19B271D38A7BB4A14DA2B34E6C694698 /* DGActivityIndicatorLineScalePulseOutAnimation.m */; }; - FD678ACCB6B29F8DADD882EA98148249 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F92B138E265179C54CBC1E6E80F9F6B /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - FE35C071F54DADA3BE7FA3CC2D3DEDE9 /* EXPMatchers+beLessThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF0F550079093157BD0E331A1B12F88 /* EXPMatchers+beLessThan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 010FD4363C29673A61B9113CC6D79980 /* DGActivityIndicatorBallTrianglePathAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A956470C32647ADA50A887EBEA3CEAB /* DGActivityIndicatorBallTrianglePathAnimation.m */; }; + 02CB472F28410C1D2172539C10797CA1 /* DGActivityIndicatorView.m in Sources */ = {isa = PBXBuildFile; fileRef = A44680CD3E6D054D9D98424787089D2C /* DGActivityIndicatorView.m */; }; + 041F212A0C424EC0D3F57B8395DA4426 /* EXPMatchers.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A3BF5E8639956A74303A23977618597 /* EXPMatchers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 048DA29BB34827EA7D04BD4A782EACF0 /* CLBlurTool.h in Headers */ = {isa = PBXBuildFile; fileRef = A4607800FA988EF76030C7E1CCD348F5 /* CLBlurTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 04E846CF358070C5AA71DF8D31F26E54 /* NSString+HexColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BC497D9C037951A3E10AB5B3A43AC13 /* NSString+HexColor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0500C6CD298002742B3C14817D228676 /* DGActivityIndicatorTriplePulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 413607BAF712422432DBAF0B48D4961C /* DGActivityIndicatorTriplePulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05B1643814E247E0ADF23AA912EECCE3 /* ExpectaObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 6268404F5B58208C948BE43B12A34428 /* ExpectaObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 06AC13201E9EBEEE0BB7C8CF90EB7EAB /* SPTExampleGroup.h in Headers */ = {isa = PBXBuildFile; fileRef = BE773F15A1A9C2C4F456F860360D6C70 /* SPTExampleGroup.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 070BB6684957BCA2F6695D9DD24EE669 /* SPTExampleGroup.m in Sources */ = {isa = PBXBuildFile; fileRef = 467E8BF6B8440EAC10D35FFBA13BD008 /* SPTExampleGroup.m */; }; + 08748D8BD4D1D8F1A59A3680E51C3019 /* EXPDoubleTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = E65BF46FB72C62A4A77AE3BFF51C30E1 /* EXPDoubleTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 094A16F4C95961D5877A2D6C7A09F3F8 /* DGActivityIndicatorLineScalePartyAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = B60C4D8B577F0FBBC44267D4463082C2 /* DGActivityIndicatorLineScalePartyAnimation.m */; }; + 09BD3AD4DA5CB2BC9CAD807CED69B752 /* UIImage+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8987F415C3207E2F4FADF5AA411533D3 /* UIImage+Utility.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 09F7D05FEBD4F98146BFE58421B16042 /* EXPMatchers+beGreaterThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 75CE5363483109F5FE8818A5F2042C46 /* EXPMatchers+beGreaterThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0A00079E6C88034A271D3302A67B141C /* EXPMatchers+beTruthy.m in Sources */ = {isa = PBXBuildFile; fileRef = D7C44CE829A51109A9491A48D04D9954 /* EXPMatchers+beTruthy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0A15C6D3591BE31A9E81AA082FD7ECF6 /* FBSnapshotTestController.m in Sources */ = {isa = PBXBuildFile; fileRef = 287979869D8C3B19ADA5D41E4AD4C381 /* FBSnapshotTestController.m */; }; + 0B0E3471BF50D94CF2BB69A165EF0A9C /* CLHueEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = E279EA7686537CE1762904E7AA29BBD5 /* CLHueEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0B7F510030167772AFD8D39C9BA22F11 /* EXPMatchers+beNil.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C595E33D1F34612F99655D3F65CADEF /* EXPMatchers+beNil.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0BE0454631C0A770DE143C65B854D3FE /* UIImage+Compare.m in Sources */ = {isa = PBXBuildFile; fileRef = 52FCCBF89D83F65DA4CEC1B51BF16AFE /* UIImage+Compare.m */; }; + 0C3788D7C3966CE01D70E2A9A5FCFDF9 /* EXPFloatTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = C285BC26A5315E6C01AB41E33F1010D0 /* EXPFloatTuple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0E96B74B9A624C37AEA6523C571783DF /* EXPMatchers+beInstanceOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 24489B149F1552CF10A774DC6CFDE1EC /* EXPMatchers+beInstanceOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 0EF4B9FB8BE45EECD1EB41FA33079878 /* CLTextLabel.h in Headers */ = {isa = PBXBuildFile; fileRef = E8C2858F93DC90103D21FA84AF2928E7 /* CLTextLabel.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1003797060FD69BD5F0FCC17BB15D296 /* DGActivityIndicatorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 58BD53DBD5B68A85C61220B4F37AC981 /* DGActivityIndicatorView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 10B9B8BBD89C6A2A357A38067CDFCDB6 /* Specta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BFA46E0F96D4A99A6CFF63CF74F8485D /* Specta-dummy.m */; }; + 12571912A3803C7C82758E058DDA5139 /* CLStickerTool.h in Headers */ = {isa = PBXBuildFile; fileRef = D591D391B594D5B186CE8E0560CBCDD2 /* CLStickerTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 12BCF7ABC021906AF683C0B948A342AC /* FBSnapshotTestCase.h in Headers */ = {isa = PBXBuildFile; fileRef = F0F23811297E8DAE2C693B7330A18292 /* FBSnapshotTestCase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 13289BB3B7D747D8211ED8578550A7BF /* SPTTestSuite.m in Sources */ = {isa = PBXBuildFile; fileRef = C471AA6E10291AA9DBECC6BE191AD31B /* SPTTestSuite.m */; }; + 134AEAE1AA909F54003C371821B9436B /* SPTCallSite.h in Headers */ = {isa = PBXBuildFile; fileRef = AE53BE2F4CA712777D2C9E4DED28AF80 /* SPTCallSite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1387C9B33E3189F9B6F20DC5AFFEFFDB /* EXPMatchers+beGreaterThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 55F41591899D4449DA70C1B62D27B020 /* EXPMatchers+beGreaterThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 14AB06531BFE33F9D1E5B819571D8B12 /* DGActivityIndicatorTripleRingsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = A2432AA6D4EC0BEA306AD1697A788079 /* DGActivityIndicatorTripleRingsAnimation.m */; }; + 17828CDFCD8B745F3410E0679A1C436B /* UIView+CLImageToolInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = C17CE7BD2F8350F362203907202BE472 /* UIView+CLImageToolInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 18881AD82DBE7AECA3D0C5DC25441F0C /* EXPMatchers+raiseWithReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 231081C326FCBDE867B534A081A1CD5A /* EXPMatchers+raiseWithReason.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 188B96BE83AD23FE3753487F49CFB659 /* CLStickerTool.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2B0175206E908CE38D20F24C38A7B3 /* CLStickerTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1895CC17C64B718D1511C03E7DA1AB2E /* PNImagePickerViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 48F4CE36A0C3189880B7B1EBBB490FCF /* PNImagePickerViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1A8A11EB92E8090339675B7DAE9AE7A3 /* DGActivityIndicatorLineScaleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3A921A92DADD3F428BEDDC7C6D546C8D /* DGActivityIndicatorLineScaleAnimation.m */; }; + 1A8DAF192608984F0C5BF370F2643DA2 /* EXPExpect.m in Sources */ = {isa = PBXBuildFile; fileRef = 028C504F01FF398BD4595A3C6231CD9D /* EXPExpect.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 1B84B2CC958180D4D81297B3DE2B9E1B /* CLTextSettingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B118848C126610D3D81D4CD3620E035E /* CLTextSettingView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1B9580D88E28A8CB50E01CC1CFF21CEB /* DGActivityIndicatorBallClipRotatePulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 12F1AF2A9AE00A26508721D91B6BA3B2 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 1D0D77FBF03422DE800EEA9034C7C6EB /* CLRotateTool.m in Sources */ = {isa = PBXBuildFile; fileRef = F49DF3440FBD2F6A8D75F3D4618879E0 /* CLRotateTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1D5803680D9F742D06EEC77FA0411472 /* CLPickerDrum.m in Sources */ = {isa = PBXBuildFile; fileRef = 60F29CE7B3C013F5A3A6F3B7B33656C5 /* CLPickerDrum.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 1DF8C86D628B05DE67656977CE189872 /* SPTCompiledExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 86F3CFC4CCD398B2222B0775536C0C71 /* SPTCompiledExample.m */; }; + 1E1933CF48DE4C04F572656399BC5EAB /* EXPMatchers+haveCountOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 182F9B1FB4EAD604E281F0E091CAEE0B /* EXPMatchers+haveCountOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2005632E03B3015EE9EE5B02B433758E /* DGActivityIndicatorBallPulseSyncAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD61AD67EF3C6B150379836386E34923 /* DGActivityIndicatorBallPulseSyncAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2205A3416E83A607BAA96A195BA66E7D /* DGActivityIndicatorAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = EC1D8898DFADDA6F8786FF83009D746B /* DGActivityIndicatorAnimation.m */; }; + 25FC640CF3C6731DF51A55F49299519C /* DGActivityIndicatorBallPulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C8917D5C82931582EB00713E20C23132 /* DGActivityIndicatorBallPulseAnimation.m */; }; + 26FCBF7893E7C1DDF867A2964FEC00E9 /* DGActivityIndicatorTriangleSkewSpinAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E777358E38AFE8E510F10B8DEA46F7FC /* DGActivityIndicatorTriangleSkewSpinAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2702DFA974D36A4909CC1C39F3E640EF /* PNCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D358CEC162D5EDFBF364FF07521A725 /* PNCollectionViewCell.m */; }; + 276F389BAD32BCCE9FEC9116E18F3D56 /* CLEffectBase.m in Sources */ = {isa = PBXBuildFile; fileRef = CD3DE0425E48597ED3E92311287C26AD /* CLEffectBase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 27D8EDAF0306D378EFB50A89ECED90BA /* DGActivityIndicatorRotatingSandglassAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = C0711DB77BA304BD6910D12F28E5F892 /* DGActivityIndicatorRotatingSandglassAnimation.m */; }; + 27E06DBCB00A1CC391187FFF2878D1A2 /* UIDevice+SystemVersion.m in Sources */ = {isa = PBXBuildFile; fileRef = E3303664105630330B21FF55C00CA666 /* UIDevice+SystemVersion.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2851196CD48734A9A80E22A88B2BD2D8 /* ALView+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = D27EBDBE6AE2015FA9C4C9CF716E35EC /* ALView+PureLayout.m */; }; + 29A4095610EC7DC26E6323D33948445C /* CLFilterBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 75B37F8110BD82F3A493BD34FB303490 /* CLFilterBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A044D479EE8A74C245A63F03CC58BD8 /* DGActivityIndicatorBallGridPulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D90279F5D9C5FBFC4C2CB527594E92A6 /* DGActivityIndicatorBallGridPulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2A6859D2F54CA6924725606921E82E35 /* CLImageEditor-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E32AAE0F79BEC3497AB674E6E51CA514 /* CLImageEditor-dummy.m */; }; + 2A73E6C7559F8CF9ADC25947AE0C480A /* UIDevice+SystemVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = CD44816E58CE60EF66EF1091E7D3A813 /* UIDevice+SystemVersion.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2AC28995656F775595E31AF17F5DAB55 /* CLFilterTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 3526F2D300801B08DF64003DD7F0CC72 /* CLFilterTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2B4C8719269E242AF7EA424122B140C2 /* DGActivityIndicatorAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E4D4F34920624E0884D5575B93F8E377 /* DGActivityIndicatorAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 2B4E9B5C24728522F976B953BC48F246 /* CLTextLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 28FD4825476889B70215A8C46FB5C864 /* CLTextLabel.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 2BED55731EE66CE43B17B9CECB6F842D /* NSValue+Expecta.m in Sources */ = {isa = PBXBuildFile; fileRef = FFE46FDB6FBC1C769BE70FFE27E6D187 /* NSValue+Expecta.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 2C6D625E6162D4DF0ECC2FE5338F78C7 /* PNImagePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DA45DA3B5333B493A6E548920A28473A /* PNImagePickerViewController.m */; }; + 2C9C681DED4716979EDBE2C3128E5272 /* EXPMatchers+contain.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7814B74C453D919E0F04ED997CB3E0 /* EXPMatchers+contain.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 30944CEE6991E72532885F93DA3B42F1 /* CLToneCurveTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 29ADD60249AFD1F958E131A7B7F78E13 /* CLToneCurveTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 31A9BD3FAC0DE284BD77D0A39F50C54D /* CLEmoticonTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C8DE19CD4997F4782787005FFAF55B2 /* CLEmoticonTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 327A9D75514418F28F838BF0961D1E42 /* CLGloomEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = AEF45465A5731643CD6447386FE4BDA7 /* CLGloomEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 336BA6CBE9719C93B761679BBA823809 /* CLPosterizeEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = A8BF4E5EA50EB4A42945C866F8872A89 /* CLPosterizeEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 33D287602F3A06015E8D9782FA209DEB /* DGActivityIndicatorRotatingSandglassAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0137732B346BD1F820CE861483EBA4A8 /* DGActivityIndicatorRotatingSandglassAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3585D664E5150B343EB14EA2BB6559EA /* DGActivityIndicatorFiveDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E8DC91B05F6658A558C8C99D0B3349F /* DGActivityIndicatorFiveDotsAnimation.m */; }; + 35CD0B1E0C598785B44765E4131B5E57 /* DGActivityIndicatorBallRotateAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 158A9D6EFC9C30F8C3194E06FB8FFB4F /* DGActivityIndicatorBallRotateAnimation.m */; }; + 369C3E9FBA8238F55D1375CA9F38280D /* NSString+HexColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 0241D4A62E5BBCC907B632CBE01BC4A6 /* NSString+HexColor.m */; }; + 36AE54D079A1489A9E693C7CA2E73DDE /* CLImageToolInfo+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD88D10C8D64DC7C489CC9EA8C145E6 /* CLImageToolInfo+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3771DF23947091210CB0F123814D2966 /* CLPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 52ADC9A998C968EB7C8468BA2A594D77 /* CLPickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 382E189A8CE9F0CAC37E8ACEA467A285 /* DGActivityIndicatorRotatingSquaresAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E82BF6614529AD45CDDA91FA4CECC65E /* DGActivityIndicatorRotatingSquaresAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3B063212A6EF2B52AC8B7CCC918E4D12 /* FBSnapshotTestCase.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D79C1450ABF18B9FACD1D09B3F25B70 /* FBSnapshotTestCase.m */; }; + 3BEAB8AE0D3D6B4F0DA5C3F2477E7C08 /* EXPMatchers+beSupersetOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 164E059379200B76F8A44B16A43BA72C /* EXPMatchers+beSupersetOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 3C64BF703DD397E4B99C4C0A496B9AA4 /* XCTestCase+Specta.m in Sources */ = {isa = PBXBuildFile; fileRef = 28EC635DBC4EC7BD19B04E7D18F43DD1 /* XCTestCase+Specta.m */; }; + 3C99AF91E2501167B5461DCC24F5B2FD /* EXPMatchers+match.h in Headers */ = {isa = PBXBuildFile; fileRef = 44A82E1BD23AADF135D2358DB126290E /* EXPMatchers+match.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CAD7C140B36E3D3E598054D5D09300D /* EXPDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = 59312FB6D907BF42678B932173CCA1BB /* EXPDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3CF7A95B5CD898F95274BF0913A1FBE5 /* CLImageToolInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 55FCA17E765BBF60EEE7E77148A4D75B /* CLImageToolInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 3DCC48803F8ECB0F4E5D2CA6B73B16CC /* PureLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 12D294D67030D643D0B52EA6C1D31979 /* PureLayout-dummy.m */; }; + 3EAF1061BB87AAFB38B29CAB628664C9 /* UIView+Frame.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E8BB1C3EA002A126F30A227CB3A5F2E /* UIView+Frame.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 3F9FF8DB279402687102A4F50661AE2A /* DGActivityIndicatorBallRotateAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F6B4C0D9754C72F1F7E1F22F73667C8C /* DGActivityIndicatorBallRotateAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 406C27D498FD55C59A819D90B75DCE9C /* CLToolbarMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AE51D2E46A0E183AAE2D26B9E73F6BBF /* CLToolbarMenuItem.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 406F6344A6E0E6FC7CFF8BD2149EA2DA /* EXPMatchers+equal.h in Headers */ = {isa = PBXBuildFile; fileRef = 102788316CE4DD732E943BCF54B1C12F /* EXPMatchers+equal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4275CC9B13BD59049F977DF0488619E3 /* CLPixellateEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B5E3FF8856E095E344F5FC6C60410B /* CLPixellateEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42D023EAB5F7F8E7564B6194F97215F5 /* NSObject+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 1BBACF5E878ABE08D69F473853B4ABC8 /* NSObject+Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 42DA4F778EDC2EFE944E6D40E45226F0 /* XCTestCase+Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = DACDBF8ADBD30F9EA4997180B224AA36 /* XCTestCase+Specta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 436F687B6D3E7EE8E70F3AE128093D22 /* SpectaUtility.h in Headers */ = {isa = PBXBuildFile; fileRef = CFB5ECDC557ACE506A8D437416CB2429 /* SpectaUtility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 445886204E6F4D0FEC1039F03C538247 /* DGActivityIndicatorBallZigZagAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D9916A98B0C56DB95CD79ED2A15B31A8 /* DGActivityIndicatorBallZigZagAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 44F41CAD2082185B032D7655D916E58F /* SPTExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A0936B3D25DB8FB1E210C4597B21D76 /* SPTExample.m */; }; + 45296A993068CAF03962072EA350EBBB /* CLFontPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 55BE7A18C828E1C337F432D628B8D38A /* CLFontPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4905230A27F686915A04B6A1FE25E91E /* CLEffectTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 831A35ECC7BAB1B917AA09005F00EB4A /* CLEffectTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4916752367EF5E2CC0FF6B729E6847ED /* EXPMatchers+endWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EEF2B464E2854886600B18E5EC7110A /* EXPMatchers+endWith.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 49AD05F0898FFDAAE370F2952D457726 /* CLFilterBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EDDE77DA9F7FB24FA3BA6840D6A352 /* CLFilterBase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 49EEC4B67E08459276BAC2723E377151 /* CLPixellateEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 92B92FECD5D6793B5D0E0BAA90F5EB8F /* CLPixellateEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4ABF8FC65E759FD6C9486681B11358A3 /* UIImage+Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = A52CACBF6D0995217565C4712230F1E1 /* UIImage+Utility.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BDECD0267A6C2B9DD07FD21458A33E2 /* DGActivityIndicatorTwoDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 5018367D2EC3CE9EA99DD3891488E5D9 /* DGActivityIndicatorTwoDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4BEF7C22B1E31D5787D427E08AD4F0FD /* CLImageToolInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AFBDB75FF4633E291F58D3A4E844130 /* CLImageToolInfo.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 4C160EB200147210363D197B3C4759D6 /* DGActivityIndicatorBallBeatAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 87125D88D19A6D31347503B8674587B2 /* DGActivityIndicatorBallBeatAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D939F77A07A87CE3BAA6167D511F070 /* UIView+Frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D51FA6E00A5A8C56E7BDF6DDCFB4A13 /* UIView+Frame.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4D98102E36719E62D8D3AD11892E124F /* SPTSharedExampleGroups.m in Sources */ = {isa = PBXBuildFile; fileRef = 1607D6A502380169DB869165C8781ADF /* SPTSharedExampleGroups.m */; }; + 4DE291731DC4B09C7EE55342FB8EB195 /* EXPBlockDefinedMatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C48D9E13BAA6A1AA78A3FB5332CD8C8 /* EXPBlockDefinedMatcher.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 4E8DEE1BE9AD755F3F20258D60929CDC /* CLImageEditorTheme+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A9B0A9E17181101ABDBE61F3EA9711B /* CLImageEditorTheme+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4EC45548385A6B7B050FE9204476F135 /* UIApplication+StrictKeyWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = E3755B329118E995A24A2473A8EC91C0 /* UIApplication+StrictKeyWindow.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F1CD6D893210D801A51E64C975EB3BD /* SPTCompiledExample.h in Headers */ = {isa = PBXBuildFile; fileRef = E79558241A0D3DC4DB49B6FEBFD991CC /* SPTCompiledExample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 4F30B46C05B9CB353107358582E3F4F3 /* CLCircleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0595E83F4861DD113C23F0E9875164A7 /* CLCircleView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 504823050C9106E2EAE7F37A0008306F /* EXPMatchers+beKindOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CA19A6800D528F1AF2A6E912AEAB458 /* EXPMatchers+beKindOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 50E5375CB3B35C244C2C7862C8B08579 /* DGActivityIndicatorBallZigZagDeflectAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 61530153FF9C4AB84CB5828DBDD8F6CF /* DGActivityIndicatorBallZigZagDeflectAnimation.m */; }; + 530D070E0E04E37792153D7ECEBCBB14 /* EXPExpect.h in Headers */ = {isa = PBXBuildFile; fileRef = F646007BDE5F05FD4E88AA271C7D7470 /* EXPExpect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5379BAB8CAB4BF3623D4B5CCBAB8182E /* DGActivityIndicatorBallClipRotatePulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = B995E30EE66A1EA0C7CB08EB76072D74 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */; }; + 54C53E1D3B24640C7C14FCAFC1C3F5E1 /* DGActivityIndicatorBallSpinFadeLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A8D5FB1A671829925C55199833A87D /* DGActivityIndicatorBallSpinFadeLoader.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 54EB95FE9AFE459A64CD8AA29B7E1436 /* DGActivityIndicatorRotatingTrigonAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 92953EBFCE0589BD75174229B79C00E3 /* DGActivityIndicatorRotatingTrigonAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57313253F158E282404FE2FEB616885B /* PNCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 26896700324AB679EFBE596D65C64FE9 /* PNCollectionViewCell.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 57B54BD5D85F5BABE3CC4F9883824D63 /* EXPUnsupportedObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BC8C5E811C7C9577BE5668873B10590 /* EXPUnsupportedObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 57E0098AADCFAB47B00A0E1158068EB0 /* DGActivityIndicatorBallGridBeatAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2688F6134F0298A15A73B0C4CA38C00B /* DGActivityIndicatorBallGridBeatAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 591E7A6DD2DEA92695D105465D12AD1D /* DGActivityIndicatorBallClipRotateMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 6878FD408657C1D433D8235CC28D9688 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 59F74C5A20254EE4CC03E35DE786BA47 /* CLColorPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 40C293AAC1644A7E47D60EB77B145304 /* CLColorPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5A262F52FE054C70E83DC7B6C32E500E /* DGActivityIndicatorCookieTerminatorAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4568CFFF5D70E9938AABF62320A0056E /* DGActivityIndicatorCookieTerminatorAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5B64BBFA0CD5D63E1E5809D92B6E7FDF /* Expecta-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 08279B166C8C8EBABAEF43E786A718B0 /* Expecta-dummy.m */; }; + 5C6FDDA71C273EF1F1E046C1467B3067 /* EXPMatchers+raiseWithReason.m in Sources */ = {isa = PBXBuildFile; fileRef = 916A6D7BA05C1458EAC460A0C01B904C /* EXPMatchers+raiseWithReason.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 5D45E0385CC6CBE4846C05C5BA867A68 /* FBSnapshotTestController.h in Headers */ = {isa = PBXBuildFile; fileRef = 6511D4FCAAFCAF5F889190FFDC43545A /* FBSnapshotTestController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D8761CA7A85DC70AA91E03BFB2E97B3 /* CLImageToolSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = C105333441308C1AEDBBD40FC9462B8E /* CLImageToolSettings.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5D9C0245FE8B6C68CAFF219B4A83AECB /* CLHueEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D78CF607DED161F7960D8EC865A12B9 /* CLHueEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 5DCAA85A0454D2C5E4AF8C27D53A4937 /* CLSpotEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D3DCEFA6FA1C45840E93790995AAA85 /* CLSpotEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F58BE295B439AE293AE300CAA08C623 /* CLHighlightShadowEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F4E853ECF336C3ACB246B1FEA2700AF /* CLHighlightShadowEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5F978E50EE337C460D3EF59FACEA5F06 /* EXPMatchers+beGreaterThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = B4585AA2AE022BCFD772B38179C94EA5 /* EXPMatchers+beGreaterThanOrEqualTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 60CECE85274E23DB88339FFBB894E09E /* CLImageToolBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C7AD82E7ABA19FC174534AF689B81EF /* CLImageToolBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 624E25D48BF1830D16075EC12B187609 /* CLSpotEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = FE368F5E1331B59B0E89FE430EF2A4C9 /* CLSpotEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6263DF85CAC47FE30E77665FA16AF0D1 /* DGActivityIndicatorNineDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA2A47777F6739B2B470B5207A09637 /* DGActivityIndicatorNineDotsAnimation.m */; }; + 62E36E05E578A8C04944DA47A360D7A8 /* CLSplineInterpolator.h in Headers */ = {isa = PBXBuildFile; fileRef = 6EC41D2D28D58016DF52592F740A9FA4 /* CLSplineInterpolator.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 63CDBBDA223F06E37A66BE5715D3399E /* CLClippingTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 51269A77524BB72ACDBD0ED41896797F /* CLClippingTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 64382C59124DAB31C0FE1B8FBD58471F /* EXPMatchers+beGreaterThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 721EA652CD526E38EBE8B7DA19133B6F /* EXPMatchers+beGreaterThan.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 65893908F4F4D279DD7C04C9A9E77BAA /* CLCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 531D67C216660BC7748E4453B7B7DEB5 /* CLCircleView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 660148CE4CFAD377D84C5CBCB40D1691 /* EXPMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = AC2ED7C283181306CF2EACB7110AD237 /* EXPMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6832975463D985146A4C9AD0BB93CAC0 /* EXPFloatTuple.m in Sources */ = {isa = PBXBuildFile; fileRef = 8061F80C45453B06E7D1FAFA2572CE24 /* EXPFloatTuple.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 69687305F424D2B9E960EBC3E21109DE /* CLBloomEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 4D48DF2DA815F9F474B9B1B999DAC921 /* CLBloomEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 6A9077D9ED73D8F084547624D2295E02 /* EXPMatchers+beLessThanOrEqualTo.m in Sources */ = {isa = PBXBuildFile; fileRef = FED9FC36901CB064F1A6BB419F87D9B2 /* EXPMatchers+beLessThanOrEqualTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 6ADE34791D1DB6793C1E4D38DBF85286 /* DGActivityIndicatorBallScaleMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 74BDBCCCFC0848FD8C1591C42ADC36CE /* DGActivityIndicatorBallScaleMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D5DEEE8EAEAD1ECFF1D9E6F4D9EB3E4 /* EXPMatchers+beginWith.h in Headers */ = {isa = PBXBuildFile; fileRef = 29DF95AD5C35B2584B738A5C4B89CE88 /* EXPMatchers+beginWith.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D84F6FEC9FE0CFDA7C60064420C841F /* CLImageEditor.h in Headers */ = {isa = PBXBuildFile; fileRef = 1074EDB09BB377F782E2A5AC8F7A439C /* CLImageEditor.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 6D9C8DB7300E4E960F36745CDB8A0471 /* SPTCallSite.m in Sources */ = {isa = PBXBuildFile; fileRef = C54D448DE0718FF6643247D95D86A7DE /* SPTCallSite.m */; }; + 6DCFD7561DD936111DC32A27C47BD02B /* PNImagePickerViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E8833656A3D899E088BDE95DF7FB5F /* PNImagePickerViewController-dummy.m */; }; + 6EE045DD2ABCD9D7EA3B5C51C08C83C9 /* DGActivityIndicatorBallScaleRippleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FB2FB769897E6A6A65F3D99E58D9FA8 /* DGActivityIndicatorBallScaleRippleAnimation.m */; }; + 7030759772B01F05620150FDAC7D2043 /* EXPMatchers+beFalsy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6879984937F965B06F94B56C999239CE /* EXPMatchers+beFalsy.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 7061A4B65AB1873E0A2D1CA8C9510570 /* FBSnapshotTestCasePlatform.h in Headers */ = {isa = PBXBuildFile; fileRef = 52F4856EC3DB0B6DFE3048EA40E34AFF /* FBSnapshotTestCasePlatform.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 711F75973345CBDC71658323E6193BE2 /* DGActivityIndicatorLineScalePartyAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 9DE84474D5129A2B209499663474E7B6 /* DGActivityIndicatorLineScalePartyAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7167C44A7954FC7DB01DAB5D92E07222 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = A567C863A2F932B9EA8A0F1D3EAC4536 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 71CFE3DCF2E2A5A8FBD5F42F516B933C /* CLSplashTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 202F3AA6B86B0D1FD4180CF8EAE86702 /* CLSplashTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7254A8855B81FFCD7A34F6090C25DD10 /* DGActivityIndicatorBallBeatAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 02EBC4C8E0408C6906CFA0B6D99B0A65 /* DGActivityIndicatorBallBeatAnimation.m */; }; + 72782FFE0328E19423341171E7EAC814 /* UIImage+Diff.m in Sources */ = {isa = PBXBuildFile; fileRef = CEEDD713872289DF0CE78A7D9F4E35FE /* UIImage+Diff.m */; }; + 738B5070638475BF36BB0E0D69CCACE5 /* DGActivityIndicatorTriangleSkewSpinAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 238E9D8D5B0EAFF1C400C579134EBC7B /* DGActivityIndicatorTriangleSkewSpinAnimation.m */; }; + 740667B5E21C75E36A436B6527883CFB /* EXPMatchers+contain.m in Sources */ = {isa = PBXBuildFile; fileRef = D05E5A1410A3A2EB847250DB4B27E36E /* EXPMatchers+contain.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 741ACA29F831D9D7711F72B905A113C2 /* SPTExample.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C34FA2FB9974AE2E93275C491EBC329 /* SPTExample.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 742EAA0875A8A0D26143A1D50DE54BFB /* SPTTestSuite.h in Headers */ = {isa = PBXBuildFile; fileRef = 64A0107C28C2C93E1C5E2C6579B5785A /* SPTTestSuite.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7442B0F755193F24903A4E658847866A /* ExpectaSupport.h in Headers */ = {isa = PBXBuildFile; fileRef = EE653EF70CEA1C8BECED9D12DB391DD4 /* ExpectaSupport.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 74BD6EA63472F447A81A316FE8914104 /* EXPMatchers+raise.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A58F44B55A781827780C66FEF68C074 /* EXPMatchers+raise.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 752A471B21B20EB65318DCB8482BA936 /* CLRotateTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 72F8E1690BB299F62B8BFE961F219587 /* CLRotateTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7715D828E563776C1BC279C6CAB91C40 /* EXPMatchers+beTruthy.h in Headers */ = {isa = PBXBuildFile; fileRef = 42CB25CA081FBC4A63EFFFB20334120B /* EXPMatchers+beTruthy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7895827122C110CD4FD94EE3EFA5501A /* EXPMatchers+endWith.m in Sources */ = {isa = PBXBuildFile; fileRef = AE10882DB2A4667E3EEED8012C4B7F81 /* EXPMatchers+endWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 78B8BE94445C35BDAAC5FFBDF9FD7AEE /* ExpectaObject.m in Sources */ = {isa = PBXBuildFile; fileRef = 099B59808274FFA5256015C96BE35934 /* ExpectaObject.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 78D901D8665019930BEB9B017DD61247 /* DGActivityIndicatorBallZigZagAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0DDCEE576BC6A1B69F72C0889B094BCD /* DGActivityIndicatorBallZigZagAnimation.m */; }; + 79E6EDA55A2806201E7A8B671B869297 /* UIImage+Snapshot.m in Sources */ = {isa = PBXBuildFile; fileRef = 8EE7515614472F7D1DA2AFB8FCB8B513 /* UIImage+Snapshot.m */; }; + 79F34AE4E22F36303D12151C4307D30D /* CLEmoticonTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 48E294762ABAA5DB574F586DEB5D6C75 /* CLEmoticonTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7A1A5F083BC47E65F7520998CD6BD2F5 /* _CLImageEditorViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 469EFF4318DC88D4451C345CFE2BE405 /* _CLImageEditorViewController.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 7A49D725F1673275E3BB157017BE1708 /* DGActivityIndicatorBallZigZagDeflectAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 87C774635F731C01F21B33BAEDBFB830 /* DGActivityIndicatorBallZigZagDeflectAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7BC9F65797AA8C48D92E32E4B711BB9C /* UIImage+Compare.h in Headers */ = {isa = PBXBuildFile; fileRef = A7D7B4997104B4C9DA1D9DB08A7EFDDF /* UIImage+Compare.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7C2A24D4CC2CB4B60FD471F2C6E9AF02 /* CLTextTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 9578D857DF98B16C199C682AA06F2150 /* CLTextTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CE46F821D7694C1EB1D8DFA50967AF3 /* PureLayoutDefines.h in Headers */ = {isa = PBXBuildFile; fileRef = D9DDCE4F298E28A79FD61C22BF64750F /* PureLayoutDefines.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7CF775ADF2952A3AEC382FECE95DB4BD /* CLEffectBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B141E3FD47FD261CC9A84EF0DE865CE /* CLEffectBase.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 7DAC8A07997F689FED1A3F11E09A065B /* CLBlurTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 788A22E2CCADE31EEE2A6CA2711B7D7F /* CLBlurTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 802AF9F20091DF8428BBAC20166F09F3 /* FBSnapshotTestCasePlatform.m in Sources */ = {isa = PBXBuildFile; fileRef = B101D9E07BA927ED510FE57505BE9706 /* FBSnapshotTestCasePlatform.m */; }; + 8121BA41DC0BC7F18CA5428839AA4040 /* EXPMatchers+raise.h in Headers */ = {isa = PBXBuildFile; fileRef = D942985B510E2E377497175CA4D40343 /* EXPMatchers+raise.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 813B8313368F3AD21E07DEA525DB8741 /* CLClassList.h in Headers */ = {isa = PBXBuildFile; fileRef = AAC180603C8BDADF466249E633C0B0BF /* CLClassList.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 82160641E649C133D36DECDA65B12EB4 /* EXPMatchers+beInTheRangeOf.h in Headers */ = {isa = PBXBuildFile; fileRef = 3DD57A7D9BF67727B3D47F2CE0A768C8 /* EXPMatchers+beInTheRangeOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 84249932B8EDE09A7AEAA735F27C23C9 /* SpectaDSL.m in Sources */ = {isa = PBXBuildFile; fileRef = 38659EF7BEFE1636B4312C4BAB9256DD /* SpectaDSL.m */; }; + 85D852589B2E1F856379E92946661280 /* SpectaUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = A16E37AD1F0511F083ADCB708C46DA1B /* SpectaUtility.m */; }; + 8696D5E7D3E9083CE72DDA7D02868EF2 /* CLImageEditorTheme.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F9E4017B544531E3DD3CFAE985A2939 /* CLImageEditorTheme.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 86D621D02BC005F9AC73FD78D13EA75A /* UIView+CLImageToolInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 501C4A539FC9B570D95F7DF8C00A947F /* UIView+CLImageToolInfo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 87F076C17C5D88092789219ECCD74D6F /* CLTextSettingView.h in Headers */ = {isa = PBXBuildFile; fileRef = 70DC4D3B887F91D5DD09F251D699627A /* CLTextSettingView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 88CB4D12DF5D016FF9514D51B5200FA9 /* UIApplication+StrictKeyWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 5E61D53B581AD78E96FE48B9B710B030 /* UIApplication+StrictKeyWindow.m */; }; + 89F6AA6386BE29948AA66450EF70CD0A /* EXPMatchers+beFalsy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C4FC1F27C15ECAF779C925EB118EC05 /* EXPMatchers+beFalsy.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8BBEF0BEA3F418FC09D01A5D0FFD299B /* CLAdjustmentTool.m in Sources */ = {isa = PBXBuildFile; fileRef = D8E5CAA106726ECF05AC28347AE4BEDA /* CLAdjustmentTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 8D844A897C252A4BC5A990B088120C27 /* EXPMatchers+conformTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FCE3F9E1165582A12D4BE2B10187213 /* EXPMatchers+conformTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 8F28879286915373FB094878B3CD0214 /* EXPMatchers+beSupersetOf.h in Headers */ = {isa = PBXBuildFile; fileRef = F8C577A973E16687543B68FE4C8FC814 /* EXPMatchers+beSupersetOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 912DB6378044E54828CD9E9458C2C80A /* DGActivityIndicatorBallScaleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F0E98133B2A03EDB9B93888DDE4E333 /* DGActivityIndicatorBallScaleAnimation.m */; }; + 94700CA476F0DAA844A6080ED1CD6CFB /* CLResizeTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 2395E0400EE4CE23BF5E632EDEF84CFB /* CLResizeTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 950C0711BBD4011101306033F6BC2DC5 /* CLFontPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 4624E9D28BA9D09E381668D04B3B62C1 /* CLFontPickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9615260CE5E8AC1514AD1073E07A3865 /* DGActivityIndicatorBallTrianglePathAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = ABA50EF8736D9D71678E92DE894271F0 /* DGActivityIndicatorBallTrianglePathAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9649C3E0977C601124B165F614A8003F /* EXPMatchers+conformTo.m in Sources */ = {isa = PBXBuildFile; fileRef = B7A6D8EAA9F4CF23796EEEF15426095C /* EXPMatchers+conformTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 978983ECB597A6E6FAC484BAEF1BD25F /* EXPMatchers+FBSnapshotTest.m in Sources */ = {isa = PBXBuildFile; fileRef = F61D704BEF61268ECB476DC662AB4BF1 /* EXPMatchers+FBSnapshotTest.m */; }; + 9791FBBE0A7A98C66984F2CC0DD31343 /* EXPBlockDefinedMatcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 96589DDD298104A3B4B2A7BCA888C180 /* EXPBlockDefinedMatcher.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9796E792438DCA2F899AAB821E1D19EA /* CLDrawTool.h in Headers */ = {isa = PBXBuildFile; fileRef = CA06417863EAA8D1843B71986CE3A826 /* CLDrawTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 98501F5FAD998C6E3982E969D805F7A4 /* CLGloomEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 8515A9CC81F305BA42E310417FC8B80A /* CLGloomEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 99A7CD83765F909812285AB07AFF52B9 /* DGActivityIndicatorThreeDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 377AEA6F7610CA0D7E436BD74B5A9255 /* DGActivityIndicatorThreeDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9A3574E5EE4BAAA210A0C6E25A5E67B3 /* CLFilterTool.h in Headers */ = {isa = PBXBuildFile; fileRef = A7F66FD07FA222ED6DF93D114777B5A8 /* CLFilterTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9AE27FCE44D21D1CD0CABC2B3336E4BB /* SPTExcludeGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = D0B46660DBCE36D3B4F6BDA5A97F51B8 /* SPTExcludeGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B1EFE6DE4A457EDB03EF9B34E7BF617 /* EXPMatchers+beInstanceOf.h in Headers */ = {isa = PBXBuildFile; fileRef = E703CA2A8534BF873B6C84ABC2F13173 /* EXPMatchers+beInstanceOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9B54F8625B69F02716168FC3D4DEFDA2 /* CLImageToolBase.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D4CCAE2D625E14AE3AB2C181F160334 /* CLImageToolBase.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9B84064B099EF1CC825DFF4D01B11AC1 /* DGActivityIndicatorDoubleBounceAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C3CBF34D7AB5A63464D2968901D5D88 /* DGActivityIndicatorDoubleBounceAnimation.m */; }; + 9BACDD44F8FB7876FB8E5691554EACE6 /* DGActivityIndicatorBallPulseAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = C19C5A5C17B304CB0284D9B16406B33A /* DGActivityIndicatorBallPulseAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 9CA46D87D37CADF0EE049EBCF7081930 /* CLSplineInterpolator.m in Sources */ = {isa = PBXBuildFile; fileRef = 79626C8499A4C34DAB3B0F7C796060CE /* CLSplineInterpolator.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + 9ED31CD8DFCACF06F51A88E559058705 /* ExpectaSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = DF04A0C5AF176E7AE21FC4198A1BB8F8 /* ExpectaSupport.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + 9FD9C3873FFEFB06B0EFC348EBD3CDA4 /* EXPMatchers+beginWith.m in Sources */ = {isa = PBXBuildFile; fileRef = 0079408D99F7B0D9C718823C7C67B65D /* EXPMatchers+beginWith.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A054A5283AF7F8320A2AE5E035F64413 /* EXPMatchers+equal.m in Sources */ = {isa = PBXBuildFile; fileRef = 10571A323F9CAEC308554EF69AE90573 /* EXPMatchers+equal.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A0EF7376F1362787C16B90C5FF899586 /* CLPickerDrum.h in Headers */ = {isa = PBXBuildFile; fileRef = B1867EC23AFC111BEBE7684DA440A86C /* CLPickerDrum.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A11F2F3E3FF83F4C05D7B290EDF67285 /* DGActivityIndicatorLineScalePulseOutAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = DDF3CCE9146E25A842E8665C96D556C3 /* DGActivityIndicatorLineScalePulseOutAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A1B29D1574B325F0460E2D1531BE6F20 /* ExpectaObject+FBSnapshotTest.h in Headers */ = {isa = PBXBuildFile; fileRef = 70C62B6745FCFFAEA5330E1386AA9ABD /* ExpectaObject+FBSnapshotTest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A2971465F0C3D91347BA9139DE6C0B75 /* DGActivityIndicatorRotatingSquaresAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 63A6E4540D786D2B8D247AC3472CA19B /* DGActivityIndicatorRotatingSquaresAnimation.m */; }; + A398B74699BD8CEDC9779FE58E8CC5EB /* EXPMatchers+FBSnapshotTest.h in Headers */ = {isa = PBXBuildFile; fileRef = AA1236E595013C545E40DDF9FA9E72A3 /* EXPMatchers+FBSnapshotTest.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A5028DC2BAFFC6C4A669E3F0D1C10E34 /* CLSplashTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E7A06B53A03B1AAC348D7184F3F2283 /* CLSplashTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A54966A88D97C926897BB8A63A1B899D /* Pods-PNImagePickerViewController_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C1E3D9293F8A53EE20D093D52FBD7A94 /* Pods-PNImagePickerViewController_Tests-dummy.m */; }; + A7677CEBE8C676B695C959384BC57583 /* EXPMatchers+beNil.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C937FE31F35E5D428801CE0108E3D2A /* EXPMatchers+beNil.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + A807A3B9B2B4C078E19AD6DECBAA81C3 /* SpectaDSL.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B3D30B97D48C65172549D829F9E7886 /* SpectaDSL.h */; settings = {ATTRIBUTES = (Project, ); }; }; + A89A2584A04C370F909879341B1B3281 /* CLEffectTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 9BF5D22A38139D6A8E755AB67850A2F2 /* CLEffectTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + A949335E7B0D7B272487456CF1392D51 /* DGActivityIndicatorThreeDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = AC5567FA3EE4586D4B42422B43830F54 /* DGActivityIndicatorThreeDotsAnimation.m */; }; + A9B2B355214771031DE427BA9BAB8733 /* NSValue+Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = 106EC411F1BB7A127B3C814E07BAFDCF /* NSValue+Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AA77A90F799E2E3DFBD86B70DE4A7E47 /* FBSnapshotTestCase-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C76EFFD07FF6C6F01899F2D2D0859C48 /* FBSnapshotTestCase-dummy.m */; }; + AD5F325645F3F7A501AD4BE0AB6A3E03 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A7C6EBB538B88A74E6880B457D0C574 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + AD6EB97D7A7C32F1FCAEB83586125CF6 /* CLPickerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 70E1A9A0B1E02A42A44EA9A77D4D0610 /* CLPickerView.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ADEB9454AF4F1034BB694E32AA0240C3 /* NSLayoutConstraint+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 43F80604401C1D7C6D62A3E3AF0688DB /* NSLayoutConstraint+PureLayout.m */; }; + AF0F638BE9BB74D4C33A2303A0B7D1F4 /* DGActivityIndicatorBallGridBeatAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 7CC96C5D73036E814C3470CBFEAACA2C /* DGActivityIndicatorBallGridBeatAnimation.m */; }; + AF5BC982B23E3A4BB0B5F40287560307 /* DGActivityIndicatorRotatingTrigonAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 0198C5993492AA3EF6F40B5BD04CBFB8 /* DGActivityIndicatorRotatingTrigonAnimation.m */; }; + B0691216975A0869780B661AAF32738D /* EXPMatchers+haveCountOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E5F0349A4594BCA8E28494708D65556 /* EXPMatchers+haveCountOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B091A92DA60FBAABD0E017E7A307F490 /* XCTest+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 34CF5E05E97E55ABDE153F8B69575A1A /* XCTest+Private.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B1621C2B88133E96207D34D17B18DAF8 /* CLPosterizeEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A6F8BB79E9380C389EA0D0BBEC297BD /* CLPosterizeEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B2058C98EEDBAC40552E6531597D4F3F /* DGActivityIndicatorAnimationProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BB74377CDCB3224BD62413E93027CBC /* DGActivityIndicatorAnimationProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B23BC9C823DAB94FDAD3D176D4B57578 /* DGActivityIndicatorBallClipRotateAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 300EC21FF8DE7EA70EFF64B595FB69B2 /* DGActivityIndicatorBallClipRotateAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B247EBDEBB795F5E24E15A7810038D77 /* CLHighlightShadowEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = D669478AD880197C28B93809E5AF3A08 /* CLHighlightShadowEffect.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + B27731D7870ACB9E57C629A60864F3D2 /* EXPMatchers+postNotification.m in Sources */ = {isa = PBXBuildFile; fileRef = 94306BA3B0A7FDCC8CAE586BBF76F0B0 /* EXPMatchers+postNotification.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B2CDFDCAC565221AB92DEB48781C9761 /* SPTSharedExampleGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 079383233F814C53417D899EF44F3E0E /* SPTSharedExampleGroups.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B32121405276F6C8D93E6DAE71A09972 /* NSLayoutConstraint+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = BED15B0227699510790422026A7A6DA9 /* NSLayoutConstraint+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4C8F77057C7217E84DBD51B79A9B6DB /* CLBloomEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 7258D3B1D96C6F0D9E4EFD887220DF55 /* CLBloomEffect.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B4EAD5CE0065AB8795C71E04BAD4F9BA /* DGActivityIndicatorFiveDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = DD14738C6B77C0B2B2ABB957A39B19BF /* DGActivityIndicatorFiveDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B56295163A81105E4A6D40E5DC0DD1B4 /* EXPMatchers+respondTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4CA8AFCCDD8B190011AE6C229DD56A47 /* EXPMatchers+respondTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B57E7A8C8FE9D637F1BA77175E811ECB /* DGActivityIndicatorTwoDotsAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ED07AE2DF7B55B6FC518A5B802518B9 /* DGActivityIndicatorTwoDotsAnimation.m */; }; + B69F76F691C13122EFCD1972A9022BD8 /* SpectaTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 02391CE84BAADBC23043CBC7122EA5F0 /* SpectaTypes.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6C24CCD08DD194019FA1B1624D64173 /* SPTSpec.h in Headers */ = {isa = PBXBuildFile; fileRef = C14779D3F8BC70BF5714331574CE44BA /* SPTSpec.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B6DBC56ED0EB80C93D632D37CE7819CD /* DGActivityIndicatorNineDotsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B056E408F75D61C8183DA2B245156CC /* DGActivityIndicatorNineDotsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B890B155903A154005EE5651865DD151 /* EXPMatchers+beCloseTo.m in Sources */ = {isa = PBXBuildFile; fileRef = 4890329971CC5A7F8151247982F480E2 /* EXPMatchers+beCloseTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B96A7F9A9B09709BFBC64E9A70AD5504 /* EXPMatchers+beSubclassOf.h in Headers */ = {isa = PBXBuildFile; fileRef = B92F0728667FB2155162429D638F47A9 /* EXPMatchers+beSubclassOf.h */; settings = {ATTRIBUTES = (Project, ); }; }; + B99EB3B1145B9AFD0708D92B3B40AC35 /* EXPMatchers+beKindOf.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BC89760CEB19A9840CA44064687905 /* EXPMatchers+beKindOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + B9DE002F87486D9C42FBFCAF2FD44B64 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 707AD70CDA31A488EA94F41E1A8C3F5D /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */; }; + BB39687FFC5BECD547971759FA75BA36 /* CLToolbarMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 4282396C07BCBBBCDA54A0BFD02F1361 /* CLToolbarMenuItem.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BC0F19555CEE819953448F8C41D67CC3 /* CLImageEditor.m in Sources */ = {isa = PBXBuildFile; fileRef = F4858AFC3AB0CB701B77DBE2ECF9CC7D /* CLImageEditor.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + BD933A069DC28703FECFC4B5D4ACA64C /* EXPMatchers+beSubclassOf.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CDC709AD35E7449CEC00A5D76EFD280 /* EXPMatchers+beSubclassOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + BDE88D4CBA76A00F02B3C763C888C062 /* EXPMatchers+beCloseTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 76496175DF8CC917D5C624EDBAA996D8 /* EXPMatchers+beCloseTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + BF798886AEAEEBF9DA22FFBA2E2535F4 /* CLToneCurveTool.h in Headers */ = {isa = PBXBuildFile; fileRef = FA8BD040A9E5AE22C774C4526E4E4A6E /* CLToneCurveTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C091F797DC6970E4487BF8E53875E0A9 /* NSArray+PureLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 3791C20B45450AB4026BFFC01F234B9E /* NSArray+PureLayout.m */; }; + C1DC2A9EB7B4A41D33AE508114D482CD /* EXPMatchers+postNotification.h in Headers */ = {isa = PBXBuildFile; fileRef = C850598DB3A0399C224AF6F3239A7371 /* EXPMatchers+postNotification.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C3E2128C8AA83D259B80103CE10C2DC7 /* DGActivityIndicatorBallScaleRippleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 55D5D063DD50507C2008293BC3ED7DFA /* DGActivityIndicatorBallScaleRippleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C474C49B58675733FA7C5DBAF3F694CD /* DGActivityIndicatorBallSpinFadeLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = DF9C9C643D839AC15E9F157678474895 /* DGActivityIndicatorBallSpinFadeLoader.m */; }; + C4C38CEB092882B8D6237C82C5A32AF8 /* CLTextTool.m in Sources */ = {isa = PBXBuildFile; fileRef = A28D9B967F851A2F4820DA8B312E422C /* CLTextTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + C698636623E6B996F47989C5745AD473 /* UIImage+Diff.h in Headers */ = {isa = PBXBuildFile; fileRef = FB32FA05195E6BE1334FAEF3FFDD4E30 /* UIImage+Diff.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C753F1F1CA75C277473C1A5F858F471B /* NSArray+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = BCC64FC0CED02F74463BDAAFAC0EDB7C /* NSArray+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + C85E94E48062E5D50B294C06771B2305 /* CLImageEditorTheme.m in Sources */ = {isa = PBXBuildFile; fileRef = 582FAA969B5B203CF0C271A0AF437E61 /* CLImageEditorTheme.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CA649B81C91FD77E38DA4B2175542160 /* EXPUnsupportedObject.h in Headers */ = {isa = PBXBuildFile; fileRef = D11561C93FD86FAA6D823549229750F7 /* EXPUnsupportedObject.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CC0F62559E50AB49531D1CDDFF67FD7B /* CLImageToolInfo+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = FD1845E4402BE5F87CE0A45A40FEA17F /* CLImageToolInfo+Private.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CC1A9C99D77A42D1218E3063BDAB9E46 /* DGActivityIndicatorLineScaleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = D7B2890298DB765B6F9E30965A8F4CB2 /* DGActivityIndicatorLineScaleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CD1CC3F95B92A730F529A9D44558AD27 /* CLColorPickerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B27A6B764F3A5C28C3C0FA783A6EBEE /* CLColorPickerView.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + CE202724EBC0851E72E1D5B574DD6310 /* Specta.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EAE8B75F4A3738527DCDE0990FCB1A8 /* Specta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + CF446290E0D69CAE95CBD1EC394AFDC4 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5F652102EE76239FD9DA73FE75418C /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */; }; + CFE24B4207C88A3F18891A646536982D /* CLClippingTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 66429114168E24B2BA67CF8636FBA3B1 /* CLClippingTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + D13823551BE04038F6444A00DFE4122F /* EXPMatchers+beIdenticalTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A3F8880A97D49801CDD86B12735DE32 /* EXPMatchers+beIdenticalTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D3AC389E6BA3181AD81E46FB4F033CF5 /* EXPMatchers+beInTheRangeOf.m in Sources */ = {isa = PBXBuildFile; fileRef = F6704BD3B6C3FD6FAB30D81AC4EB1D05 /* EXPMatchers+beInTheRangeOf.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D3E67AF91D0DB5A7CF6457947B1B7C8F /* DGActivityIndicatorDoubleBounceAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = E078B715EA674E13B26FB2FCC5A072BD /* DGActivityIndicatorDoubleBounceAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + D757070A74D2EF521FE79475E701D906 /* EXPMatchers+match.m in Sources */ = {isa = PBXBuildFile; fileRef = 4FCCEE2CA9C2862A44911B761AAEE7BD /* EXPMatchers+match.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + D9AC160C1D04F4E96F949762670749BB /* Expecta.h in Headers */ = {isa = PBXBuildFile; fileRef = D1A0DC335AD2642469F5DA529765A85C /* Expecta.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DA132ED8D16E070FFB6908E8E122011B /* _CLImageEditorViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 41A18D18EA08AC2DF69D99908922A648 /* _CLImageEditorViewController.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DC5168648D2D4470CAF110A8D5DB510C /* UIImage+Snapshot.h in Headers */ = {isa = PBXBuildFile; fileRef = 8426A7AE3F1A954B70A50BEDF3CC2C85 /* UIImage+Snapshot.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DCBD49C22876A9157D2598BDA82C2E52 /* ALView+PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = E98D48313BD9AB830895320034E34FB3 /* ALView+PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DD441889A3B155B28FF3B65BC55C2878 /* Expecta+Snapshots-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D2ABBB4CC5B354DF4CF54C437F0184C4 /* Expecta+Snapshots-dummy.m */; }; + DEEDDC1E7E67D10C02AE7F9C9114C964 /* DGActivityIndicatorBallScaleAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3EA3E908C5CCE65D3ADAA6D4E9E73F /* DGActivityIndicatorBallScaleAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF205E6078602E31BDED22F3F6E5D1B1 /* SPTGlobalBeforeAfterEach.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A8A9D90CEA18D79C07FBE70410FAA58 /* SPTGlobalBeforeAfterEach.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF5BA3CDA109C7FABC41D1E2B1963F80 /* EXPDoubleTuple.h in Headers */ = {isa = PBXBuildFile; fileRef = C15CCDB05DFE9779572C25206DC94363 /* EXPDoubleTuple.h */; settings = {ATTRIBUTES = (Project, ); }; }; + DF932A448D602A6EB68228586D90DB77 /* EXPMatchers+beLessThanOrEqualTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FAEF891219180A1F1C484EAFDB05A3B /* EXPMatchers+beLessThanOrEqualTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E04648FC3DB7B73293FDC4B0FCF6C516 /* EXPMatchers+respondTo.h in Headers */ = {isa = PBXBuildFile; fileRef = 020CFAA90BAF3FDF2EEEB06B3085DA85 /* EXPMatchers+respondTo.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E13C1756A365D998EE23F0162D438F81 /* SPTSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 470322E06DD432C0E4078A0EBE64E738 /* SPTSpec.m */; }; + E15EA1A544FB7BA34C34F45FC6761997 /* PureLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 730BF7F3B1B42CD3C4F5E553F870DDCA /* PureLayout.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E2171C4B216E990DC14BD0B3E31A13E3 /* DGActivityIndicatorBallGridPulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = D1F2097EAE7937FC52B2076224AC7D67 /* DGActivityIndicatorBallGridPulseAnimation.m */; }; + E5A7189D47304D8244835989B18836C8 /* DGActivityIndicatorBallScaleMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 9C53AE5DA16C84F320993822893E7211 /* DGActivityIndicatorBallScaleMultipleAnimation.m */; }; + E66A2D4F953BA58A7D5EE2D5F280EA5F /* CLImageEditorTheme+Private.m in Sources */ = {isa = PBXBuildFile; fileRef = F7AF85E776B7292D5CAAA4CE356D8D1C /* CLImageEditorTheme+Private.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + E7647623505916C9DCB1E377C9D6A6F4 /* DGActivityIndicatorTriplePulseAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 90176BD845094FA5B80755B4160B997F /* DGActivityIndicatorTriplePulseAnimation.m */; }; + E7AB5F476A5058580A0A7D4C77E94CD2 /* CLAdjustmentTool.h in Headers */ = {isa = PBXBuildFile; fileRef = BA1F8B5F708B205B24C6E1B9779B248F /* CLAdjustmentTool.h */; settings = {ATTRIBUTES = (Project, ); }; }; + E9DE6F51A09993C1E1D94A2405802E0F /* CLResizeTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 5178E203C17975145D60CC7A1049F6B8 /* CLResizeTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + EA8B8A9C0725A0AEBA2B49AB0073F99E /* DGActivityIndicatorBallClipRotateAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = F0F77449F785ECA2602DD68835779A75 /* DGActivityIndicatorBallClipRotateAnimation.m */; }; + EC6F4D4EB03B32982BD40AFA33E5162E /* EXPMatcherHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = 72082F71B6DA5CB722F58425C51BB119 /* EXPMatcherHelpers.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EF3456A6E85AAEDC25A74E4A7488E9EC /* DGActivityIndicatorBallPulseSyncAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 597B1BFCB4C430D82828ABE5A9E2C2C6 /* DGActivityIndicatorBallPulseSyncAnimation.m */; }; + F048EA8AC3DF6A4B8E6B39DCCA528983 /* DGActivityIndicatorView-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 807D7BDCF1C13D72AA31648880964FA7 /* DGActivityIndicatorView-dummy.m */; }; + F05F3A28AB2A96A0278ED7CC69DBA153 /* CLDrawTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 7C62907F7D1A03C1056766D44F3D7499 /* CLDrawTool.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + F1A4D1D6EF7440FCE0A8CBDC11C69F78 /* DGActivityIndicatorBallClipRotateMultipleAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = 81E24007FA72146EF5FF3BA73FE81D26 /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */; }; + F1EDBB2FDA3EA365FA56A9294BCB30C6 /* EXPMatcherHelpers.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AC6B865F6E57305C1973C4E0E93E134 /* EXPMatcherHelpers.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + F2316598F9BBA8363F45B64D6B8F93F4 /* EXPMatchers+beLessThan.m in Sources */ = {isa = PBXBuildFile; fileRef = 9771937E6AD121D992F85088533FA1C9 /* EXPMatchers+beLessThan.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + F2E919C85D38016E6570CE161679370F /* DGActivityIndicatorCookieTerminatorAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = AC24CC61265DA9CCB626B3E6677FE892 /* DGActivityIndicatorCookieTerminatorAnimation.m */; }; + F32EA9D1BC88C1DBB86BDE441008B6DA /* CLImageToolProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = EB6BAD15DE1148ECE09C9C1AE42720CF /* CLImageToolProtocol.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F3B4143A9074EC0551BA265240BF4DA7 /* ExpectaObject+FBSnapshotTest.m in Sources */ = {isa = PBXBuildFile; fileRef = B26922B47CC86901E841F8F9CACF8A66 /* ExpectaObject+FBSnapshotTest.m */; }; + F6AE953ACA5736EB86087839968526FF /* DGActivityIndicatorTripleRingsAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = F72B8583F161538EE39E8C877BD3807E /* DGActivityIndicatorTripleRingsAnimation.h */; settings = {ATTRIBUTES = (Project, ); }; }; + F80E657D6327865E053C609656BAA3BB /* PureLayout+Internal.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1B9CB8EC28910CB0762A5A1BAAF6C1 /* PureLayout+Internal.h */; settings = {ATTRIBUTES = (Project, ); }; }; + FB0BC7E80499DEE2E89A5EDE8010DD86 /* CLClassList.m in Sources */ = {isa = PBXBuildFile; fileRef = B0555E281173F434DE321A6980EB4B7D /* CLClassList.m */; settings = {COMPILER_FLAGS = "-DOS_OBJECT_USE_OBJC=0"; }; }; + FCD5C206AD48A5653DF118A2DE87F40F /* DGActivityIndicatorLineScalePulseOutAnimation.m in Sources */ = {isa = PBXBuildFile; fileRef = CDB0C1F86A601FAA57DC356A35E53A0C /* DGActivityIndicatorLineScalePulseOutAnimation.m */; }; + FCF20479A3948F9A189B1412F541BE8F /* Pods-PNImagePickerViewController_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CA3BAE5B1E70E8A22A6F7122F6324DEE /* Pods-PNImagePickerViewController_Example-dummy.m */; }; + FD678ACCB6B29F8DADD882EA98148249 /* EXPMatchers+beIdenticalTo.m in Sources */ = {isa = PBXBuildFile; fileRef = B92025E31C1C80C908E6387ABE8B49F6 /* EXPMatchers+beIdenticalTo.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; + FE35C071F54DADA3BE7FA3CC2D3DEDE9 /* EXPMatchers+beLessThan.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D08C699AFD4D8AD09238B2DE9064293 /* EXPMatchers+beLessThan.h */; settings = {ATTRIBUTES = (Project, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0D4DEA010D2ACDB67C79B5D763371D4D /* PBXContainerItemProxy */ = { + 06E50FEEA1BBD341F012111A77C9AD82 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5089EEAF8DD991A0A25FF85B1C893293; + remoteGlobalIDString = 8620FA4E4760D950B62AECE570F385FF; + remoteInfo = PNImagePickerViewController; + }; + 0880495973453532CAC391605BA537D7 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A075EF8F6759743C8B06CCC6D7B7961D; + remoteInfo = DGActivityIndicatorView; + }; + 0C87808A0864D6442613961BB3B4C966 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = FC4407CD05467A90650F0588CF53A16F; remoteInfo = PureLayout; }; 0D675C893C43BF9B2CF16E3DFB9B559B /* PBXContainerItemProxy */ = { @@ -235,40 +338,47 @@ remoteGlobalIDString = 7C5E09F14C77A34CDDBE3B135E42F0A5; remoteInfo = FBSnapshotTestCase; }; - 29C11130AE79891FA6F064CA60FCB6E5 /* PBXContainerItemProxy */ = { + 148B10BB5C07DD7DB2038A1EB3947CBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7C5E09F14C77A34CDDBE3B135E42F0A5; - remoteInfo = FBSnapshotTestCase; + remoteGlobalIDString = CB2883F6F8461C2BDD61E0BA2A1728FA; + remoteInfo = CLImageEditor; }; - 2D0EE54079FE2E5CD5CC95B3D3BB7561 /* PBXContainerItemProxy */ = { + 18B4725471EE73D7F471ABD332A951AA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = A075EF8F6759743C8B06CCC6D7B7961D; remoteInfo = DGActivityIndicatorView; }; - 35D0B4436C6951B14E44E41AD8694E0C /* PBXContainerItemProxy */ = { + 214C77C1E0B71B7B28530F158425CE99 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 7CBB10AF4B08239BA0363FE1240EEAEA; - remoteInfo = PNImagePickerViewController; + remoteGlobalIDString = 7C5E09F14C77A34CDDBE3B135E42F0A5; + remoteInfo = FBSnapshotTestCase; }; - 49C8F39BFAED4296B755D736E92550BE /* PBXContainerItemProxy */ = { + 2E7B26A0585145D93A99A90B622E18C4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 9C59561051F1403A293E0B943DB4E71F; - remoteInfo = Expecta; + remoteGlobalIDString = C0139FF721A043F8132011DB99D22114; + remoteInfo = Specta; }; - 5232E883E4D1F8737E3E7168BE52F955 /* PBXContainerItemProxy */ = { + 31DDFC27AC995BDCD1B51789A6474D68 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5089EEAF8DD991A0A25FF85B1C893293; - remoteInfo = PureLayout; + remoteGlobalIDString = A075EF8F6759743C8B06CCC6D7B7961D; + remoteInfo = DGActivityIndicatorView; + }; + 5C0B32BA20B461197D1D1A5D3DF23036 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = CB2883F6F8461C2BDD61E0BA2A1728FA; + remoteInfo = CLImageEditor; }; 5C6334597CD2CC5B57F162A37BD8C90C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -277,26 +387,26 @@ remoteGlobalIDString = C0139FF721A043F8132011DB99D22114; remoteInfo = Specta; }; - 6E38667BB2D1003703FA57F4D7697C2C /* PBXContainerItemProxy */ = { + 62AF0E6C853742DDAFAB444440617ABF /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = C0139FF721A043F8132011DB99D22114; - remoteInfo = Specta; + remoteGlobalIDString = FC4407CD05467A90650F0588CF53A16F; + remoteInfo = PureLayout; }; - 7AE6879D2A7ABE0FC5AA605209616B5C /* PBXContainerItemProxy */ = { + 82D3CFB26A0AF5CD8733D8BFCEA9D297 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A075EF8F6759743C8B06CCC6D7B7961D; - remoteInfo = DGActivityIndicatorView; + remoteGlobalIDString = FC4407CD05467A90650F0588CF53A16F; + remoteInfo = PureLayout; }; - 96C770FFF170913C631ECE42C5D1EC8C /* PBXContainerItemProxy */ = { + 83AC680987438B4ACAB463503C39F066 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = A075EF8F6759743C8B06CCC6D7B7961D; - remoteInfo = DGActivityIndicatorView; + remoteGlobalIDString = 8620FA4E4760D950B62AECE570F385FF; + remoteInfo = PNImagePickerViewController; }; AB5E46A2666FD81EF932A7BA5EBEB48F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -305,286 +415,374 @@ remoteGlobalIDString = 9C59561051F1403A293E0B943DB4E71F; remoteInfo = Expecta; }; - EB45BEADFD2057E6279FA61CC5DF3D0A /* PBXContainerItemProxy */ = { + BE9C373042FEFA14D4002095A810F1D1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; - remoteGlobalIDString = 5089EEAF8DD991A0A25FF85B1C893293; - remoteInfo = PureLayout; + remoteGlobalIDString = CB2883F6F8461C2BDD61E0BA2A1728FA; + remoteInfo = CLImageEditor; }; - F3536E6D84F5140F4657D6E835ECE101 /* PBXContainerItemProxy */ = { + D263E71AF9D2C347017E5126F8EAB163 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9C59561051F1403A293E0B943DB4E71F; + remoteInfo = Expecta; + }; + DEDA556ED10AE729BFF9F15E006AE6A4 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = 0D6EC326E1174CBD1052C8A16C109576; remoteInfo = "Expecta+Snapshots"; }; - FA318A12E182D5048FB009641C9906C2 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 7CBB10AF4B08239BA0363FE1240EEAEA; - remoteInfo = PNImagePickerViewController; - }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00B65B647667F1863CF7F97BC49BDAB6 /* EXPMatchers+beKindOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beKindOf.h"; path = "Expecta/Matchers/EXPMatchers+beKindOf.h"; sourceTree = ""; }; - 01493E6E259777EA76017D828C38F9DF /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePulseOutRapidAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutRapidAnimation.m; sourceTree = ""; }; + 0079408D99F7B0D9C718823C7C67B65D /* EXPMatchers+beginWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beginWith.m"; path = "Expecta/Matchers/EXPMatchers+beginWith.m"; sourceTree = ""; }; + 0137732B346BD1F820CE861483EBA4A8 /* DGActivityIndicatorRotatingSandglassAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingSandglassAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSandglassAnimation.h; sourceTree = ""; }; + 0198C5993492AA3EF6F40B5BD04CBFB8 /* DGActivityIndicatorRotatingTrigonAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingTrigonAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingTrigonAnimation.m; sourceTree = ""; }; + 020CFAA90BAF3FDF2EEEB06B3085DA85 /* EXPMatchers+respondTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+respondTo.h"; path = "Expecta/Matchers/EXPMatchers+respondTo.h"; sourceTree = ""; }; + 02391CE84BAADBC23043CBC7122EA5F0 /* SpectaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaTypes.h; path = Specta/Specta/SpectaTypes.h; sourceTree = ""; }; 0241D4A62E5BBCC907B632CBE01BC4A6 /* NSString+HexColor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "NSString+HexColor.m"; sourceTree = ""; }; - 0262713C498991992DBB25D0647A1E87 /* Pods-PNImagePickerViewController_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PNImagePickerViewController_Tests-acknowledgements.markdown"; sourceTree = ""; }; - 05E6C8C12E1F8760CA2666CEA583327A /* EXPMatchers+beGreaterThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThan.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.h"; sourceTree = ""; }; - 0735607C9210AD484C6B809578F3DA9F /* XCTestCase+Specta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestCase+Specta.m"; path = "Specta/Specta/XCTestCase+Specta.m"; sourceTree = ""; }; - 07FD6F4D0A9DDB89C41C1056507591FB /* SPTTestSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTTestSuite.h; path = Specta/Specta/SPTTestSuite.h; sourceTree = ""; }; - 08324062150C42273AC21DD6FD100E2E /* EXPMatcherHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcherHelpers.h; path = Expecta/Matchers/EXPMatcherHelpers.h; sourceTree = ""; }; - 09632C0914372467E37C5D3F0A2D2FA0 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleRippleMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleMultipleAnimation.m; sourceTree = ""; }; - 0B17048967E86B6F88FE3760E061CAAC /* DGActivityIndicatorBallPulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallPulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseAnimation.h; sourceTree = ""; }; - 0B8C1B6E0AD80C1DC53B309AEA8E2CAD /* EXPMatchers+beSupersetOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSupersetOf.m"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.m"; sourceTree = ""; }; - 0C5C43F0FF7E6E3D02794151C9B4EBC5 /* Expecta+Snapshots-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta+Snapshots-prefix.pch"; sourceTree = ""; }; - 0CD0B8CD41E5272E748A22109A27CD68 /* DGActivityIndicatorTriplePulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTriplePulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriplePulseAnimation.h; sourceTree = ""; }; - 0DFAE1B12397D48FD8F58243043DBADE /* DGActivityIndicatorBallGridPulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallGridPulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridPulseAnimation.h; sourceTree = ""; }; - 0FD772BBF1C19F20856556B753A7A0C8 /* EXPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDefines.h; path = Expecta/EXPDefines.h; sourceTree = ""; }; - 10388F3FDCF8037C5696BC6E48AF93C6 /* ALView+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ALView+PureLayout.h"; path = "PureLayout/PureLayout/ALView+PureLayout.h"; sourceTree = ""; }; - 11B6330FFF7F7E3D0E0D055667627C39 /* EXPMatchers+beFalsy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beFalsy.h"; path = "Expecta/Matchers/EXPMatchers+beFalsy.h"; sourceTree = ""; }; - 11F5321913FE795A88F3C15A0E4804FE /* SpectaDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaDSL.m; path = Specta/Specta/SpectaDSL.m; sourceTree = ""; }; - 1254B4CBF3BC43A4AA14130C9D994552 /* SPTSharedExampleGroups.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSharedExampleGroups.h; path = Specta/Specta/SPTSharedExampleGroups.h; sourceTree = ""; }; - 127BCD869F399CC2D26DB2A825276751 /* DGActivityIndicatorBallZigZagAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallZigZagAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagAnimation.m; sourceTree = ""; }; - 1379B55756ECF1ADF7EF2943EBAE87DE /* DGActivityIndicatorBallScaleMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleMultipleAnimation.m; sourceTree = ""; }; - 146931ABEC2A21E93DD406F60D9988B3 /* libPureLayout.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libPureLayout.a; path = libPureLayout.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 15F399540B02FB4D17F7CCE7FDF80587 /* PureLayoutDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayoutDefines.h; path = PureLayout/PureLayout/PureLayoutDefines.h; sourceTree = ""; }; - 196AAAFF899EED6ECB64BBF8FA18617B /* DGActivityIndicatorTwoDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTwoDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTwoDotsAnimation.m; sourceTree = ""; }; - 19B271D38A7BB4A14DA2B34E6C694698 /* DGActivityIndicatorLineScalePulseOutAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePulseOutAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutAnimation.m; sourceTree = ""; }; - 1A9F34644F7D3C6AE77F265C69CD3893 /* EXPMatchers+beIdenticalTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beIdenticalTo.h"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.h"; sourceTree = ""; }; - 1C13D985E199B6606EC19D0B9D660D78 /* EXPMatchers+respondTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+respondTo.m"; path = "Expecta/Matchers/EXPMatchers+respondTo.m"; sourceTree = ""; }; - 1C1F29BADB09B2DBD35EE4B0F35AA9DE /* EXPFloatTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPFloatTuple.m; path = Expecta/EXPFloatTuple.m; sourceTree = ""; }; - 1D60CFC4AB33F01A4104ED78E755EF2B /* DGActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorView.m; path = DGActivityIndicatorView/DGActivityIndicatorView.m; sourceTree = ""; }; - 1DED8B42C6394D9F7362325DB10CBD0B /* EXPMatchers+beNil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beNil.m"; path = "Expecta/Matchers/EXPMatchers+beNil.m"; sourceTree = ""; }; - 1E30496B7608B1C380CF9A07A89FE25A /* DGActivityIndicatorBallGridPulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallGridPulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridPulseAnimation.m; sourceTree = ""; }; - 1FA15D878D8EBA456903F0BA083082C0 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; - 1FE5BFE1B82A4328F9542EDA31BFB877 /* EXPMatchers+beSupersetOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSupersetOf.h"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.h"; sourceTree = ""; }; - 20408733ABDE4A511D02524731CC0E87 /* DGActivityIndicatorBallGridBeatAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallGridBeatAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridBeatAnimation.h; sourceTree = ""; }; - 20AC5714C1010B8B3F085AEAD0D53DE8 /* SPTGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTGlobalBeforeAfterEach.h; path = Specta/Specta/SPTGlobalBeforeAfterEach.h; sourceTree = ""; }; - 20D5AF212112217B9D819DDFA5022F99 /* DGActivityIndicatorBallPulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallPulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseAnimation.m; sourceTree = ""; }; - 2274B65099CC808B6918054841DA2D64 /* DGActivityIndicatorDoubleBounceAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorDoubleBounceAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorDoubleBounceAnimation.h; sourceTree = ""; }; - 246EEDB046A72DCCF14BBAFBEA1D1881 /* FBSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSnapshotTestCase-prefix.pch"; sourceTree = ""; }; + 028C504F01FF398BD4595A3C6231CD9D /* EXPExpect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPExpect.m; path = Expecta/EXPExpect.m; sourceTree = ""; }; + 02EBC4C8E0408C6906CFA0B6D99B0A65 /* DGActivityIndicatorBallBeatAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallBeatAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallBeatAnimation.m; sourceTree = ""; }; + 035AA0D35DC3C96D88C68BDCE814F4C1 /* PureLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PureLayout-prefix.pch"; sourceTree = ""; }; + 0595E83F4861DD113C23F0E9875164A7 /* CLCircleView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLCircleView.h; path = CLImageEditor/ImageTools/ToolSettings/CLCircleView.h; sourceTree = ""; }; + 079383233F814C53417D899EF44F3E0E /* SPTSharedExampleGroups.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSharedExampleGroups.h; path = Specta/Specta/SPTSharedExampleGroups.h; sourceTree = ""; }; + 07A458A20D9A15CB671325CEDC301DF5 /* libPods-PNImagePickerViewController_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-PNImagePickerViewController_Example.a"; path = "libPods-PNImagePickerViewController_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 08279B166C8C8EBABAEF43E786A718B0 /* Expecta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta-dummy.m"; sourceTree = ""; }; + 099B59808274FFA5256015C96BE35934 /* ExpectaObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaObject.m; path = Expecta/ExpectaObject.m; sourceTree = ""; }; + 0A7C6EBB538B88A74E6880B457D0C574 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePulseOutRapidAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutRapidAnimation.h; sourceTree = ""; }; + 0A8A9D90CEA18D79C07FBE70410FAA58 /* SPTGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTGlobalBeforeAfterEach.h; path = Specta/Specta/SPTGlobalBeforeAfterEach.h; sourceTree = ""; }; + 0BB74377CDCB3224BD62413E93027CBC /* DGActivityIndicatorAnimationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorAnimationProtocol.h; path = DGActivityIndicatorView/DGActivityIndicatorAnimationProtocol.h; sourceTree = ""; }; + 0DDCEE576BC6A1B69F72C0889B094BCD /* DGActivityIndicatorBallZigZagAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallZigZagAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagAnimation.m; sourceTree = ""; }; + 0F0E98133B2A03EDB9B93888DDE4E333 /* DGActivityIndicatorBallScaleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleAnimation.m; sourceTree = ""; }; + 0F7814B74C453D919E0F04ED997CB3E0 /* EXPMatchers+contain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+contain.h"; path = "Expecta/Matchers/EXPMatchers+contain.h"; sourceTree = ""; }; + 102788316CE4DD732E943BCF54B1C12F /* EXPMatchers+equal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+equal.h"; path = "Expecta/Matchers/EXPMatchers+equal.h"; sourceTree = ""; }; + 10571A323F9CAEC308554EF69AE90573 /* EXPMatchers+equal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+equal.m"; path = "Expecta/Matchers/EXPMatchers+equal.m"; sourceTree = ""; }; + 106EC411F1BB7A127B3C814E07BAFDCF /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; + 1074EDB09BB377F782E2A5AC8F7A439C /* CLImageEditor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageEditor.h; path = CLImageEditor/CLImageEditor.h; sourceTree = ""; }; + 12D294D67030D643D0B52EA6C1D31979 /* PureLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PureLayout-dummy.m"; sourceTree = ""; }; + 12F1AF2A9AE00A26508721D91B6BA3B2 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotatePulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotatePulseAnimation.h; sourceTree = ""; }; + 14EDDE77DA9F7FB24FA3BA6840D6A352 /* CLFilterBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLFilterBase.m; path = CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.m; sourceTree = ""; }; + 158A9D6EFC9C30F8C3194E06FB8FFB4F /* DGActivityIndicatorBallRotateAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallRotateAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallRotateAnimation.m; sourceTree = ""; }; + 1607D6A502380169DB869165C8781ADF /* SPTSharedExampleGroups.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSharedExampleGroups.m; path = Specta/Specta/SPTSharedExampleGroups.m; sourceTree = ""; }; + 164E059379200B76F8A44B16A43BA72C /* EXPMatchers+beSupersetOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSupersetOf.m"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.m"; sourceTree = ""; }; + 182F9B1FB4EAD604E281F0E091CAEE0B /* EXPMatchers+haveCountOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+haveCountOf.h"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.h"; sourceTree = ""; }; + 1A1B9CB8EC28910CB0762A5A1BAAF6C1 /* PureLayout+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PureLayout+Internal.h"; path = "PureLayout/PureLayout/PureLayout+Internal.h"; sourceTree = ""; }; + 1A956470C32647ADA50A887EBEA3CEAB /* DGActivityIndicatorBallTrianglePathAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallTrianglePathAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallTrianglePathAnimation.m; sourceTree = ""; }; + 1BBACF5E878ABE08D69F473853B4ABC8 /* NSObject+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Expecta.h"; path = "Expecta/NSObject+Expecta.h"; sourceTree = ""; }; + 1BF69C957475843F38DA2D54D61812FD /* libPNImagePickerViewController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libPNImagePickerViewController.a; path = libPNImagePickerViewController.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 1C48D9E13BAA6A1AA78A3FB5332CD8C8 /* EXPBlockDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPBlockDefinedMatcher.m; path = Expecta/EXPBlockDefinedMatcher.m; sourceTree = ""; }; + 1E5F0349A4594BCA8E28494708D65556 /* EXPMatchers+haveCountOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+haveCountOf.m"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.m"; sourceTree = ""; }; + 1F116938FF4A43A4B75595A2D2DD390A /* Pods-PNImagePickerViewController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Example.debug.xcconfig"; sourceTree = ""; }; + 202F3AA6B86B0D1FD4180CF8EAE86702 /* CLSplashTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLSplashTool.m; path = OptionalImageTools/CLSplashTool/CLSplashTool.m; sourceTree = ""; }; + 231081C326FCBDE867B534A081A1CD5A /* EXPMatchers+raiseWithReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raiseWithReason.h"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.h"; sourceTree = ""; }; + 238E9D8D5B0EAFF1C400C579134EBC7B /* DGActivityIndicatorTriangleSkewSpinAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTriangleSkewSpinAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriangleSkewSpinAnimation.m; sourceTree = ""; }; + 2395E0400EE4CE23BF5E632EDEF84CFB /* CLResizeTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLResizeTool.h; path = OptionalImageTools/CLResizeTool/CLResizeTool.h; sourceTree = ""; }; + 24489B149F1552CF10A774DC6CFDE1EC /* EXPMatchers+beInstanceOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInstanceOf.m"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.m"; sourceTree = ""; }; 24DBADEABCC616AD4ED2EDB6EA1C4CC5 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; + 2688F6134F0298A15A73B0C4CA38C00B /* DGActivityIndicatorBallGridBeatAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallGridBeatAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridBeatAnimation.h; sourceTree = ""; }; 26896700324AB679EFBE596D65C64FE9 /* PNCollectionViewCell.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PNCollectionViewCell.h; path = Pod/Classes/PNCollectionViewCell.h; sourceTree = ""; }; - 28480F6ECEB473466932618C209FDAAD /* Pods-PNImagePickerViewController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Example.release.xcconfig"; sourceTree = ""; }; - 2ACDC414CD8D02F1CD1C7F6A45DBDEB6 /* Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Specta.h; path = Specta/Specta/Specta.h; sourceTree = ""; }; - 2B0ADCD49CB97055862DB1453BDFD8E4 /* DGActivityIndicatorTriangleSkewSpinAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTriangleSkewSpinAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriangleSkewSpinAnimation.m; sourceTree = ""; }; + 287979869D8C3B19ADA5D41E4AD4C381 /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; + 28EC635DBC4EC7BD19B04E7D18F43DD1 /* XCTestCase+Specta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "XCTestCase+Specta.m"; path = "Specta/Specta/XCTestCase+Specta.m"; sourceTree = ""; }; + 28FD4825476889B70215A8C46FB5C864 /* CLTextLabel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLTextLabel.m; path = OptionalImageTools/CLTextTool/CLTextLabel.m; sourceTree = ""; }; + 29ADD60249AFD1F958E131A7B7F78E13 /* CLToneCurveTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLToneCurveTool.m; path = CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.m; sourceTree = ""; }; + 29DF95AD5C35B2584B738A5C4B89CE88 /* EXPMatchers+beginWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beginWith.h"; path = "Expecta/Matchers/EXPMatchers+beginWith.h"; sourceTree = ""; }; 2BC497D9C037951A3E10AB5B3A43AC13 /* NSString+HexColor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "NSString+HexColor.h"; sourceTree = ""; }; - 2CB598BE99DDCB82DF8545991C3DFB42 /* EXPMatchers+beNil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beNil.h"; path = "Expecta/Matchers/EXPMatchers+beNil.h"; sourceTree = ""; }; - 2DF748CF65727745E3EC958A1383DABA /* NSValue+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSValue+Expecta.h"; path = "Expecta/NSValue+Expecta.h"; sourceTree = ""; }; - 2E6BDD6BDE5BE5B36A1ED5ACF8852C49 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotateMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateMultipleAnimation.h; sourceTree = ""; }; - 2F8DA6F4540FE9ADD9C3AF78A64764D7 /* DGActivityIndicatorView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DGActivityIndicatorView-prefix.pch"; sourceTree = ""; }; - 30045B2304111FBD90CF8ED689520EB5 /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; - 3041B454B2F3FBE0BC88787C8205D429 /* NSObject+Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSObject+Expecta.h"; path = "Expecta/NSObject+Expecta.h"; sourceTree = ""; }; - 313B777032AF94534B4B2ADECF32763C /* Pods-PNImagePickerViewController_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PNImagePickerViewController_Example-dummy.m"; sourceTree = ""; }; - 32FCF38F326C4E9FB34B0EE2163D99D2 /* ExpectaSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaSupport.h; path = Expecta/ExpectaSupport.h; sourceTree = ""; }; - 340AC250370DEFE01DC4672A8D88912A /* EXPMatchers+raiseWithReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raiseWithReason.m"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.m"; sourceTree = ""; }; - 343AAF28393979C4181639EC54E45BAE /* DGActivityIndicatorRotatingTrigonAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingTrigonAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingTrigonAnimation.h; sourceTree = ""; }; - 345A4875D2470550A613D350ED101F8F /* DGActivityIndicatorBallTrianglePathAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallTrianglePathAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallTrianglePathAnimation.h; sourceTree = ""; }; - 34C347E7A8DD1681F1194B7F7135A78A /* Specta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-prefix.pch"; sourceTree = ""; }; - 3715C965FB0AE977C8CB14B50B5A377E /* libPods-PNImagePickerViewController_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-PNImagePickerViewController_Example.a"; path = "libPods-PNImagePickerViewController_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 38E76EA65E32ED08A8892DDFE7785DFE /* DGActivityIndicatorBallScaleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleAnimation.h; sourceTree = ""; }; - 3A593BD1D7AFF0D2985324CBCECCAE23 /* DGActivityIndicatorBallGridBeatAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallGridBeatAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridBeatAnimation.m; sourceTree = ""; }; - 3B6E2D9BA249CF515E17ACA8E171DD28 /* DGActivityIndicatorFiveDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorFiveDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorFiveDotsAnimation.h; sourceTree = ""; }; - 3CB1AC9638BEE4A7F0BB1D4803C22396 /* SPTExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExample.m; path = Specta/Specta/SPTExample.m; sourceTree = ""; }; - 3D22976DF5930D258F8D0CD43C34E0A0 /* DGActivityIndicatorBallRotateAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallRotateAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallRotateAnimation.m; sourceTree = ""; }; - 3E55C7C509ADC9496A00C582F1054DDF /* SPTSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSpec.m; path = Specta/Specta/SPTSpec.m; sourceTree = ""; }; - 3E6FBD1D02A3ACAF9A744FC0A3C3EE49 /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; - 42A031D21A30160D067D4F5047A361CF /* UIApplication+StrictKeyWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+StrictKeyWindow.h"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h"; sourceTree = ""; }; - 438A1C4EFD72411CB5E4708982182333 /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; - 43A77050EE412E799E68240DA53D491F /* PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayout.h; path = PureLayout/PureLayout/PureLayout.h; sourceTree = ""; }; - 44026A095B9B6969B90CFAB82A55E28C /* DGActivityIndicatorLineScaleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScaleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScaleAnimation.h; sourceTree = ""; }; - 44342D65C652BFEE364AA3618727EA53 /* SpectaUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaUtility.h; path = Specta/Specta/SpectaUtility.h; sourceTree = ""; }; - 457F5A8ED48B68CA96D7DA28A0DFB99E /* libPods-PNImagePickerViewController_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-PNImagePickerViewController_Tests.a"; path = "libPods-PNImagePickerViewController_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 47160C72333BBB6F801CB41562C1620A /* Pods-PNImagePickerViewController_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PNImagePickerViewController_Tests-acknowledgements.plist"; sourceTree = ""; }; - 47D5461A0482ACCE07AB5C6A4432722A /* SpectaTypes.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaTypes.h; path = Specta/Specta/SpectaTypes.h; sourceTree = ""; }; - 48ABB3B17ABA5349AA2490F7F0199698 /* EXPMatchers+beKindOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beKindOf.m"; path = "Expecta/Matchers/EXPMatchers+beKindOf.m"; sourceTree = ""; }; + 2C4FC1F27C15ECAF779C925EB118EC05 /* EXPMatchers+beFalsy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beFalsy.h"; path = "Expecta/Matchers/EXPMatchers+beFalsy.h"; sourceTree = ""; }; + 2D3DCEFA6FA1C45840E93790995AAA85 /* CLSpotEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSpotEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.h; sourceTree = ""; }; + 2D4CCAE2D625E14AE3AB2C181F160334 /* CLImageToolBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLImageToolBase.m; path = CLImageEditor/ImageTools/CLImageToolBase.m; sourceTree = ""; }; + 2ED07AE2DF7B55B6FC518A5B802518B9 /* DGActivityIndicatorTwoDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTwoDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTwoDotsAnimation.m; sourceTree = ""; }; + 300EC21FF8DE7EA70EFF64B595FB69B2 /* DGActivityIndicatorBallClipRotateAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotateAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateAnimation.h; sourceTree = ""; }; + 3081AED4A1DBC8558F95C1B3A3E8AED3 /* CLImageEditor.bundle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.plug-in"; name = CLImageEditor.bundle; path = CLImageEditor/CLImageEditor.bundle; sourceTree = ""; }; + 319EB9863A0D72FD4EFA7B1A031B81AA /* libSpecta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSpecta.a; path = libSpecta.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 34CF5E05E97E55ABDE153F8B69575A1A /* XCTest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTest+Private.h"; path = "Specta/Specta/XCTest+Private.h"; sourceTree = ""; }; + 3526F2D300801B08DF64003DD7F0CC72 /* CLFilterTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLFilterTool.m; path = CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.m; sourceTree = ""; }; + 377AEA6F7610CA0D7E436BD74B5A9255 /* DGActivityIndicatorThreeDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorThreeDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorThreeDotsAnimation.h; sourceTree = ""; }; + 3791C20B45450AB4026BFFC01F234B9E /* NSArray+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+PureLayout.m"; path = "PureLayout/PureLayout/NSArray+PureLayout.m"; sourceTree = ""; }; + 38659EF7BEFE1636B4312C4BAB9256DD /* SpectaDSL.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaDSL.m; path = Specta/Specta/SpectaDSL.m; sourceTree = ""; }; + 3A921A92DADD3F428BEDDC7C6D546C8D /* DGActivityIndicatorLineScaleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScaleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScaleAnimation.m; sourceTree = ""; }; + 3A9B0A9E17181101ABDBE61F3EA9711B /* CLImageEditorTheme+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CLImageEditorTheme+Private.h"; path = "CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.h"; sourceTree = ""; }; + 3CDC709AD35E7449CEC00A5D76EFD280 /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; + 3DD57A7D9BF67727B3D47F2CE0A768C8 /* EXPMatchers+beInTheRangeOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInTheRangeOf.h"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.h"; sourceTree = ""; }; + 3EA2A47777F6739B2B470B5207A09637 /* DGActivityIndicatorNineDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorNineDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorNineDotsAnimation.m; sourceTree = ""; }; + 3FB2FB769897E6A6A65F3D99E58D9FA8 /* DGActivityIndicatorBallScaleRippleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleRippleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleAnimation.m; sourceTree = ""; }; + 40C293AAC1644A7E47D60EB77B145304 /* CLColorPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLColorPickerView.h; path = CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.h; sourceTree = ""; }; + 413607BAF712422432DBAF0B48D4961C /* DGActivityIndicatorTriplePulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTriplePulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriplePulseAnimation.h; sourceTree = ""; }; + 41A18D18EA08AC2DF69D99908922A648 /* _CLImageEditorViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _CLImageEditorViewController.h; path = CLImageEditor/ViewController/_CLImageEditorViewController.h; sourceTree = ""; }; + 4282396C07BCBBBCDA54A0BFD02F1361 /* CLToolbarMenuItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLToolbarMenuItem.h; path = CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.h; sourceTree = ""; }; + 42CB25CA081FBC4A63EFFFB20334120B /* EXPMatchers+beTruthy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beTruthy.h"; path = "Expecta/Matchers/EXPMatchers+beTruthy.h"; sourceTree = ""; }; + 43F80604401C1D7C6D62A3E3AF0688DB /* NSLayoutConstraint+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+PureLayout.m"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m"; sourceTree = ""; }; + 44A82E1BD23AADF135D2358DB126290E /* EXPMatchers+match.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+match.h"; path = "Expecta/Matchers/EXPMatchers+match.h"; sourceTree = ""; }; + 4568CFFF5D70E9938AABF62320A0056E /* DGActivityIndicatorCookieTerminatorAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorCookieTerminatorAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorCookieTerminatorAnimation.h; sourceTree = ""; }; + 4624E9D28BA9D09E381668D04B3B62C1 /* CLFontPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLFontPickerView.m; path = OptionalImageTools/CLTextTool/CLFontPickerView.m; sourceTree = ""; }; + 467E8BF6B8440EAC10D35FFBA13BD008 /* SPTExampleGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExampleGroup.m; path = Specta/Specta/SPTExampleGroup.m; sourceTree = ""; }; + 469EFF4318DC88D4451C345CFE2BE405 /* _CLImageEditorViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = _CLImageEditorViewController.m; path = CLImageEditor/ViewController/_CLImageEditorViewController.m; sourceTree = ""; }; + 470322E06DD432C0E4078A0EBE64E738 /* SPTSpec.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSpec.m; path = Specta/Specta/SPTSpec.m; sourceTree = ""; }; + 4890329971CC5A7F8151247982F480E2 /* EXPMatchers+beCloseTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beCloseTo.m"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.m"; sourceTree = ""; }; + 48E294762ABAA5DB574F586DEB5D6C75 /* CLEmoticonTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLEmoticonTool.m; path = OptionalImageTools/CLEmoticonTool/CLEmoticonTool.m; sourceTree = ""; }; 48F4CE36A0C3189880B7B1EBBB490FCF /* PNImagePickerViewController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PNImagePickerViewController.h; path = Pod/Classes/PNImagePickerViewController.h; sourceTree = ""; }; - 4AA91518BEA6CD1CB6F913AFAB4E5407 /* EXPMatcherHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPMatcherHelpers.m; path = Expecta/Matchers/EXPMatcherHelpers.m; sourceTree = ""; }; - 4B267F7099E5F667D61B49082AE9B00A /* EXPMatchers+FBSnapshotTest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+FBSnapshotTest.m"; sourceTree = ""; }; - 4DEDB9500182D56C311D639BBA4B4AC9 /* EXPMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatchers.h; path = Expecta/Matchers/EXPMatchers.h; sourceTree = ""; }; - 4E122446AA583E5DF5171E199924040D /* ALView+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ALView+PureLayout.m"; path = "PureLayout/PureLayout/ALView+PureLayout.m"; sourceTree = ""; }; - 4EE8745F8C822127F4F15C813259EC3F /* EXPMatchers+contain.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+contain.h"; path = "Expecta/Matchers/EXPMatchers+contain.h"; sourceTree = ""; }; - 4FA70EFF180FC1428130AFED3E0644ED /* SPTCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCallSite.m; path = Specta/Specta/SPTCallSite.m; sourceTree = ""; }; - 4FE1D46581B55DF807E66708E165096F /* DGActivityIndicatorBallZigZagDeflectAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallZigZagDeflectAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagDeflectAnimation.h; sourceTree = ""; }; - 50C51B444293D19FE5A444BE84CC95B0 /* EXPMatchers+beginWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beginWith.m"; path = "Expecta/Matchers/EXPMatchers+beginWith.m"; sourceTree = ""; }; - 5218758C2C26EB32D2DB63974EE24985 /* DGActivityIndicatorRotatingSandglassAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingSandglassAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSandglassAnimation.m; sourceTree = ""; }; - 527718B4621BCDE71BEA55AF9B7391A5 /* DGActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorView.h; path = DGActivityIndicatorView/DGActivityIndicatorView.h; sourceTree = ""; }; - 537A0DC1392B02762BC4844F210E00AD /* libDGActivityIndicatorView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDGActivityIndicatorView.a; path = libDGActivityIndicatorView.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 53B0122054FB8DCEC4B219E6B1ACBF6F /* DGActivityIndicatorRotatingSandglassAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingSandglassAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSandglassAnimation.h; sourceTree = ""; }; - 540BD55DE87739E33BEBFC00A131941D /* DGActivityIndicatorBallScaleRippleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleRippleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleAnimation.m; sourceTree = ""; }; - 542396F01EAD6F9FC1563EA619D76BF9 /* DGActivityIndicatorTripleRingsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTripleRingsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTripleRingsAnimation.m; sourceTree = ""; }; - 54DA03431C7C3296667AE784520FE4FD /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; + 4A0936B3D25DB8FB1E210C4597B21D76 /* SPTExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExample.m; path = Specta/Specta/SPTExample.m; sourceTree = ""; }; + 4B056E408F75D61C8183DA2B245156CC /* DGActivityIndicatorNineDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorNineDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorNineDotsAnimation.h; sourceTree = ""; }; + 4C34FA2FB9974AE2E93275C491EBC329 /* SPTExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExample.h; path = Specta/Specta/SPTExample.h; sourceTree = ""; }; + 4CA8AFCCDD8B190011AE6C229DD56A47 /* EXPMatchers+respondTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+respondTo.m"; path = "Expecta/Matchers/EXPMatchers+respondTo.m"; sourceTree = ""; }; + 4D48DF2DA815F9F474B9B1B999DAC921 /* CLBloomEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLBloomEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.m; sourceTree = ""; }; + 4DEA1CB372545AA4261BD3A77A23C120 /* Pods-PNImagePickerViewController_Example-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PNImagePickerViewController_Example-resources.sh"; sourceTree = ""; }; + 4EAE8B75F4A3738527DCDE0990FCB1A8 /* Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Specta.h; path = Specta/Specta/Specta.h; sourceTree = ""; }; + 4FAEF891219180A1F1C484EAFDB05A3B /* EXPMatchers+beLessThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h"; sourceTree = ""; }; + 4FCCEE2CA9C2862A44911B761AAEE7BD /* EXPMatchers+match.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+match.m"; path = "Expecta/Matchers/EXPMatchers+match.m"; sourceTree = ""; }; + 5018367D2EC3CE9EA99DD3891488E5D9 /* DGActivityIndicatorTwoDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTwoDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTwoDotsAnimation.h; sourceTree = ""; }; + 501C4A539FC9B570D95F7DF8C00A947F /* UIView+CLImageToolInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+CLImageToolInfo.h"; path = "CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.h"; sourceTree = ""; }; + 51269A77524BB72ACDBD0ED41896797F /* CLClippingTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLClippingTool.h; path = CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.h; sourceTree = ""; }; + 5178E203C17975145D60CC7A1049F6B8 /* CLResizeTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLResizeTool.m; path = OptionalImageTools/CLResizeTool/CLResizeTool.m; sourceTree = ""; }; + 527F6698D88773757C9DB0307C7DBE1E /* FBSnapshotTestCase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSnapshotTestCase.xcconfig; sourceTree = ""; }; + 52ADC9A998C968EB7C8468BA2A594D77 /* CLPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLPickerView.m; path = OptionalImageTools/CLTextTool/CLPickerView.m; sourceTree = ""; }; + 52F4856EC3DB0B6DFE3048EA40E34AFF /* FBSnapshotTestCasePlatform.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCasePlatform.h; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.h; sourceTree = ""; }; + 52FCCBF89D83F65DA4CEC1B51BF16AFE /* UIImage+Compare.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Compare.m"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.m"; sourceTree = ""; }; + 531D67C216660BC7748E4453B7B7DEB5 /* CLCircleView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLCircleView.m; path = CLImageEditor/ImageTools/ToolSettings/CLCircleView.m; sourceTree = ""; }; 54E8833656A3D899E088BDE95DF7FB5F /* PNImagePickerViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PNImagePickerViewController-dummy.m"; sourceTree = ""; }; - 5500DEB3B1B37E089B180FFF2177B440 /* EXPMatchers+equal.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+equal.m"; path = "Expecta/Matchers/EXPMatchers+equal.m"; sourceTree = ""; }; - 56B0FAE8AF56DE36B7F41D22E3CFBA2C /* UIApplication+StrictKeyWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+StrictKeyWindow.m"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.m"; sourceTree = ""; }; - 584C16CAD342AB77F9166FB9E5A82DF2 /* DGActivityIndicatorBallSpinFadeLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallSpinFadeLoader.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallSpinFadeLoader.h; sourceTree = ""; }; - 58CBD375903D52C733603B13F3B9FD75 /* EXPExpect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPExpect.m; path = Expecta/EXPExpect.m; sourceTree = ""; }; - 5A432C1EB254758D26FEA0508968652C /* DGActivityIndicatorBallTrianglePathAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallTrianglePathAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallTrianglePathAnimation.m; sourceTree = ""; }; - 5A4EFB81AEAAA8CB7DF710CD30A47FE1 /* SPTSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSpec.h; path = Specta/Specta/SPTSpec.h; sourceTree = ""; }; - 5AAC704390D1003A4706DEEB7AD9E712 /* DGActivityIndicatorFiveDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorFiveDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorFiveDotsAnimation.m; sourceTree = ""; }; - 5AD5A8553307E67F16BB37F904C5600F /* ExpectaObject+FBSnapshotTest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ExpectaObject+FBSnapshotTest.m"; sourceTree = ""; }; - 5C736319C6C57EA826839D881C13FE25 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotatePulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotatePulseAnimation.h; sourceTree = ""; }; - 5D0903E79E56B300AB7CDA304C8E65AB /* EXPMatchers+postNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+postNotification.h"; path = "Expecta/Matchers/EXPMatchers+postNotification.h"; sourceTree = ""; }; - 5FF0446102A0F6A6989D41B51DB4C3F7 /* ExpectaObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaObject.h; path = Expecta/ExpectaObject.h; sourceTree = ""; }; - 61B7B7D74911BF1E22A6D82FA9A0D024 /* EXPMatchers+endWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+endWith.h"; path = "Expecta/Matchers/EXPMatchers+endWith.h"; sourceTree = ""; }; - 62FAD1139FE57B2854585CEB80C743B9 /* libFBSnapshotTestCase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFBSnapshotTestCase.a; path = libFBSnapshotTestCase.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 62FEE9BEDEDB62AEC56AC8BF396D704A /* EXPExpect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPExpect.h; path = Expecta/EXPExpect.h; sourceTree = ""; }; - 63116EE0063C84EE0E38B293DD6C15D0 /* EXPMatchers+beGreaterThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThan.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.m"; sourceTree = ""; }; - 63B3E7DDDD6AAA8E26798EF8D7EE14F3 /* DGActivityIndicatorBallPulseSyncAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallPulseSyncAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseSyncAnimation.m; sourceTree = ""; }; - 6504BCAB77EE793DB38CDADAE500596A /* DGActivityIndicatorView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DGActivityIndicatorView.xcconfig; sourceTree = ""; }; - 653E1D04B5C42953BE49583834B88195 /* DGActivityIndicatorDoubleBounceAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorDoubleBounceAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorDoubleBounceAnimation.m; sourceTree = ""; }; - 65E422734AE5C96CA2C536045219E0ED /* PureLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PureLayout-prefix.pch"; sourceTree = ""; }; - 663D81FE55B7DCF682A679FF8E75F7E9 /* Expecta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-prefix.pch"; sourceTree = ""; }; - 688ADDCBE42993718E3E0BE21CD34F88 /* NSLayoutConstraint+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+PureLayout.h"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h"; sourceTree = ""; }; - 6A1245ACF63C01A89B6C833478A3754A /* SpectaUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaUtility.m; path = Specta/Specta/SpectaUtility.m; sourceTree = ""; }; - 6B520EE033269E818A119BBD7EF94ABC /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotateMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateMultipleAnimation.m; sourceTree = ""; }; - 6C437140653DEEB438731F2F5EC68707 /* SPTCompiledExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCompiledExample.h; path = Specta/Specta/SPTCompiledExample.h; sourceTree = ""; }; - 6E417D5C6DF24AC4524F9CE87642ED85 /* Expecta+Snapshots-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta+Snapshots-dummy.m"; sourceTree = ""; }; - 6E6F83B96D10933170B381722B6F94CE /* EXPMatchers+beCloseTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beCloseTo.h"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.h"; sourceTree = ""; }; - 6F00ED288A8C5F6FC49AC29142BEDBDF /* DGActivityIndicatorBallPulseSyncAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallPulseSyncAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseSyncAnimation.h; sourceTree = ""; }; - 7050DE2AC3EE5077F6C38C241FBCA941 /* EXPMatchers+beLessThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThan.m"; path = "Expecta/Matchers/EXPMatchers+beLessThan.m"; sourceTree = ""; }; - 733F7D2BF1F10720986043F8F70CED3D /* Expecta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Expecta.xcconfig; sourceTree = ""; }; - 77A9BDDCD05BC18CE09F76B9E829B064 /* DGActivityIndicatorBallClipRotateAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotateAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateAnimation.m; sourceTree = ""; }; - 789BCDD75B28A5DA925EC45071CD892C /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; - 7A4C544A7D61E9914B46C9315CE2450B /* EXPMatchers+match.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+match.h"; path = "Expecta/Matchers/EXPMatchers+match.h"; sourceTree = ""; }; - 7CDF8B46279229C6A6B77BFF1863618E /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; - 7DF0F550079093157BD0E331A1B12F88 /* EXPMatchers+beLessThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThan.h"; path = "Expecta/Matchers/EXPMatchers+beLessThan.h"; sourceTree = ""; }; - 7F09BF8543BE98A75DF08FBE5DA7749D /* EXPMatchers+beCloseTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beCloseTo.m"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.m"; sourceTree = ""; }; - 7F92B138E265179C54CBC1E6E80F9F6B /* EXPMatchers+beIdenticalTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beIdenticalTo.m"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.m"; sourceTree = ""; }; - 7FBD26F8A36473565444B78F0014ACBD /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; - 8167B36F49B90C5CF522D693F4E6CCBE /* EXPBlockDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPBlockDefinedMatcher.h; path = Expecta/EXPBlockDefinedMatcher.h; sourceTree = ""; }; - 81B2F4395F985F110B12E3D592269BB3 /* EXPMatchers+beTruthy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beTruthy.m"; path = "Expecta/Matchers/EXPMatchers+beTruthy.m"; sourceTree = ""; }; - 82D85B82E08D2AB5F0DE12827636AE39 /* NSValue+Expecta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+Expecta.m"; path = "Expecta/NSValue+Expecta.m"; sourceTree = ""; }; - 84E1D8318F87F2F59C78E51856A44682 /* EXPMatchers+haveCountOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+haveCountOf.m"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.m"; sourceTree = ""; }; - 87FF64502AF6AFB5CD5DF7E1FC428797 /* DGActivityIndicatorAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorAnimation.m; sourceTree = ""; }; - 891D18912E498329CFA4AA880138180D /* DGActivityIndicatorRotatingSquaresAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingSquaresAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSquaresAnimation.m; sourceTree = ""; }; - 8A05315F30184FBB74EF2E8D408C0329 /* DGActivityIndicatorBallScaleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleAnimation.m; sourceTree = ""; }; - 8A15F60B4D82339861ADA171A6B48890 /* NSArray+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+PureLayout.h"; path = "PureLayout/PureLayout/NSArray+PureLayout.h"; sourceTree = ""; }; - 8B1CDBADA96A60A6CD6E44CF8DCDF045 /* EXPMatchers+beInTheRangeOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInTheRangeOf.m"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.m"; sourceTree = ""; }; - 8CEAD24182BD2092A6D68BBFA2EDE382 /* FBSnapshotTestCase.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = FBSnapshotTestCase.xcconfig; sourceTree = ""; }; - 8CFCFD6A7A6749E103F46BC78D57AF4A /* EXPUnsupportedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPUnsupportedObject.h; path = Expecta/EXPUnsupportedObject.h; sourceTree = ""; }; + 55BE7A18C828E1C337F432D628B8D38A /* CLFontPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLFontPickerView.h; path = OptionalImageTools/CLTextTool/CLFontPickerView.h; sourceTree = ""; }; + 55D5D063DD50507C2008293BC3ED7DFA /* DGActivityIndicatorBallScaleRippleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleRippleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleAnimation.h; sourceTree = ""; }; + 55F41591899D4449DA70C1B62D27B020 /* EXPMatchers+beGreaterThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThan.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.m"; sourceTree = ""; }; + 55FCA17E765BBF60EEE7E77148A4D75B /* CLImageToolInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageToolInfo.h; path = CLImageEditor/CLImageToolInfo.h; sourceTree = ""; }; + 582FAA969B5B203CF0C271A0AF437E61 /* CLImageEditorTheme.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLImageEditorTheme.m; path = CLImageEditor/CLImageEditorTheme.m; sourceTree = ""; }; + 58AED4B8164892CBAE70990656DCDFD2 /* CLImageEditor.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = CLImageEditor.xcconfig; sourceTree = ""; }; + 58BD53DBD5B68A85C61220B4F37AC981 /* DGActivityIndicatorView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorView.h; path = DGActivityIndicatorView/DGActivityIndicatorView.h; sourceTree = ""; }; + 59312FB6D907BF42678B932173CCA1BB /* EXPDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDefines.h; path = Expecta/EXPDefines.h; sourceTree = ""; }; + 597B1BFCB4C430D82828ABE5A9E2C2C6 /* DGActivityIndicatorBallPulseSyncAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallPulseSyncAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseSyncAnimation.m; sourceTree = ""; }; + 5A3F8880A97D49801CDD86B12735DE32 /* EXPMatchers+beIdenticalTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beIdenticalTo.h"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.h"; sourceTree = ""; }; + 5AC6B865F6E57305C1973C4E0E93E134 /* EXPMatcherHelpers.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPMatcherHelpers.m; path = Expecta/Matchers/EXPMatcherHelpers.m; sourceTree = ""; }; + 5AFBDB75FF4633E291F58D3A4E844130 /* CLImageToolInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLImageToolInfo.m; path = CLImageEditor/CLImageToolInfo.m; sourceTree = ""; }; + 5B3D30B97D48C65172549D829F9E7886 /* SpectaDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaDSL.h; path = Specta/Specta/SpectaDSL.h; sourceTree = ""; }; + 5C7AD82E7ABA19FC174534AF689B81EF /* CLImageToolBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageToolBase.h; path = CLImageEditor/ImageTools/CLImageToolBase.h; sourceTree = ""; }; + 5E61D53B581AD78E96FE48B9B710B030 /* UIApplication+StrictKeyWindow.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIApplication+StrictKeyWindow.m"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.m"; sourceTree = ""; }; + 60F29CE7B3C013F5A3A6F3B7B33656C5 /* CLPickerDrum.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLPickerDrum.m; path = OptionalImageTools/CLTextTool/CLPickerDrum.m; sourceTree = ""; }; + 61530153FF9C4AB84CB5828DBDD8F6CF /* DGActivityIndicatorBallZigZagDeflectAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallZigZagDeflectAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagDeflectAnimation.m; sourceTree = ""; }; + 6268404F5B58208C948BE43B12A34428 /* ExpectaObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaObject.h; path = Expecta/ExpectaObject.h; sourceTree = ""; }; + 63A6E4540D786D2B8D247AC3472CA19B /* DGActivityIndicatorRotatingSquaresAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingSquaresAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSquaresAnimation.m; sourceTree = ""; }; + 64A0107C28C2C93E1C5E2C6579B5785A /* SPTTestSuite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTTestSuite.h; path = Specta/Specta/SPTTestSuite.h; sourceTree = ""; }; + 6511D4FCAAFCAF5F889190FFDC43545A /* FBSnapshotTestController.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestController.h; path = FBSnapshotTestCase/FBSnapshotTestController.h; sourceTree = ""; }; + 66429114168E24B2BA67CF8636FBA3B1 /* CLClippingTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLClippingTool.m; path = CLImageEditor/ImageTools/CLClippingTool/CLClippingTool.m; sourceTree = ""; }; + 6878FD408657C1D433D8235CC28D9688 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotateMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateMultipleAnimation.h; sourceTree = ""; }; + 6879984937F965B06F94B56C999239CE /* EXPMatchers+beFalsy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beFalsy.m"; path = "Expecta/Matchers/EXPMatchers+beFalsy.m"; sourceTree = ""; }; + 6B27A6B764F3A5C28C3C0FA783A6EBEE /* CLColorPickerView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLColorPickerView.m; path = CLImageEditor/ImageTools/ToolSettings/CLColorPickerView.m; sourceTree = ""; }; + 6C595E33D1F34612F99655D3F65CADEF /* EXPMatchers+beNil.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beNil.h"; path = "Expecta/Matchers/EXPMatchers+beNil.h"; sourceTree = ""; }; + 6D5F652102EE76239FD9DA73FE75418C /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePulseOutRapidAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutRapidAnimation.m; sourceTree = ""; }; + 6D79C1450ABF18B9FACD1D09B3F25B70 /* FBSnapshotTestCase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCase.m; path = FBSnapshotTestCase/FBSnapshotTestCase.m; sourceTree = ""; }; + 6E7A06B53A03B1AAC348D7184F3F2283 /* CLSplashTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSplashTool.h; path = OptionalImageTools/CLSplashTool/CLSplashTool.h; sourceTree = ""; }; + 6E8DC91B05F6658A558C8C99D0B3349F /* DGActivityIndicatorFiveDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorFiveDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorFiveDotsAnimation.m; sourceTree = ""; }; + 6EC41D2D28D58016DF52592F740A9FA4 /* CLSplineInterpolator.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLSplineInterpolator.h; path = CLImageEditor/Utils/CLSplineInterpolator.h; sourceTree = ""; }; + 6EEF2B464E2854886600B18E5EC7110A /* EXPMatchers+endWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+endWith.h"; path = "Expecta/Matchers/EXPMatchers+endWith.h"; sourceTree = ""; }; + 6F9E4017B544531E3DD3CFAE985A2939 /* CLImageEditorTheme.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageEditorTheme.h; path = CLImageEditor/CLImageEditorTheme.h; sourceTree = ""; }; + 707AD70CDA31A488EA94F41E1A8C3F5D /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleRippleMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleMultipleAnimation.m; sourceTree = ""; }; + 70C62B6745FCFFAEA5330E1386AA9ABD /* ExpectaObject+FBSnapshotTest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ExpectaObject+FBSnapshotTest.h"; sourceTree = ""; }; + 70DC4D3B887F91D5DD09F251D699627A /* CLTextSettingView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLTextSettingView.h; path = OptionalImageTools/CLTextTool/CLTextSettingView.h; sourceTree = ""; }; + 70E1A9A0B1E02A42A44EA9A77D4D0610 /* CLPickerView.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLPickerView.h; path = OptionalImageTools/CLTextTool/CLPickerView.h; sourceTree = ""; }; + 72082F71B6DA5CB722F58425C51BB119 /* EXPMatcherHelpers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcherHelpers.h; path = Expecta/Matchers/EXPMatcherHelpers.h; sourceTree = ""; }; + 721EA652CD526E38EBE8B7DA19133B6F /* EXPMatchers+beGreaterThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThan.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThan.h"; sourceTree = ""; }; + 7258D3B1D96C6F0D9E4EFD887220DF55 /* CLBloomEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLBloomEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLBloomEffect.h; sourceTree = ""; }; + 72F8E1690BB299F62B8BFE961F219587 /* CLRotateTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLRotateTool.h; path = CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.h; sourceTree = ""; }; + 730BF7F3B1B42CD3C4F5E553F870DDCA /* PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayout.h; path = PureLayout/PureLayout/PureLayout.h; sourceTree = ""; }; + 736EAD20C00312AD70A9CC51C242554C /* Expecta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta-prefix.pch"; sourceTree = ""; }; + 74BDBCCCFC0848FD8C1591C42ADC36CE /* DGActivityIndicatorBallScaleMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleMultipleAnimation.h; sourceTree = ""; }; + 75B37F8110BD82F3A493BD34FB303490 /* CLFilterBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLFilterBase.h; path = CLImageEditor/ImageTools/CLFilterTool/CLFilterBase.h; sourceTree = ""; }; + 75CE5363483109F5FE8818A5F2042C46 /* EXPMatchers+beGreaterThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m"; sourceTree = ""; }; + 76496175DF8CC917D5C624EDBAA996D8 /* EXPMatchers+beCloseTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beCloseTo.h"; path = "Expecta/Matchers/EXPMatchers+beCloseTo.h"; sourceTree = ""; }; + 788A22E2CCADE31EEE2A6CA2711B7D7F /* CLBlurTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLBlurTool.m; path = CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.m; sourceTree = ""; }; + 79626C8499A4C34DAB3B0F7C796060CE /* CLSplineInterpolator.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLSplineInterpolator.m; path = CLImageEditor/Utils/CLSplineInterpolator.m; sourceTree = ""; }; + 7A58F44B55A781827780C66FEF68C074 /* EXPMatchers+raise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raise.m"; path = "Expecta/Matchers/EXPMatchers+raise.m"; sourceTree = ""; }; + 7A6F8BB79E9380C389EA0D0BBEC297BD /* CLPosterizeEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLPosterizeEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.m; sourceTree = ""; }; + 7C3EA3E908C5CCE65D3ADAA6D4E9E73F /* DGActivityIndicatorBallScaleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleAnimation.h; sourceTree = ""; }; + 7C4F3FE816FBC048C49C66A0431DFEC7 /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Tests.debug.xcconfig"; sourceTree = ""; }; + 7C62907F7D1A03C1056766D44F3D7499 /* CLDrawTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLDrawTool.m; path = CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.m; sourceTree = ""; }; + 7C8DE19CD4997F4782787005FFAF55B2 /* CLEmoticonTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLEmoticonTool.h; path = OptionalImageTools/CLEmoticonTool/CLEmoticonTool.h; sourceTree = ""; }; + 7CC96C5D73036E814C3470CBFEAACA2C /* DGActivityIndicatorBallGridBeatAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallGridBeatAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridBeatAnimation.m; sourceTree = ""; }; + 7D08C699AFD4D8AD09238B2DE9064293 /* EXPMatchers+beLessThan.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThan.h"; path = "Expecta/Matchers/EXPMatchers+beLessThan.h"; sourceTree = ""; }; + 7D51FA6E00A5A8C56E7BDF6DDCFB4A13 /* UIView+Frame.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIView+Frame.h"; path = "CLImageEditor/Utils/UIView+Frame.h"; sourceTree = ""; }; + 7D78CF607DED161F7960D8EC865A12B9 /* CLHueEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLHueEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.m; sourceTree = ""; }; + 8061F80C45453B06E7D1FAFA2572CE24 /* EXPFloatTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPFloatTuple.m; path = Expecta/EXPFloatTuple.m; sourceTree = ""; }; + 807D7BDCF1C13D72AA31648880964FA7 /* DGActivityIndicatorView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DGActivityIndicatorView-dummy.m"; sourceTree = ""; }; + 81E24007FA72146EF5FF3BA73FE81D26 /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotateMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateMultipleAnimation.m; sourceTree = ""; }; + 831A35ECC7BAB1B917AA09005F00EB4A /* CLEffectTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLEffectTool.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.h; sourceTree = ""; }; + 8426A7AE3F1A954B70A50BEDF3CC2C85 /* UIImage+Snapshot.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Snapshot.h"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.h"; sourceTree = ""; }; + 8515A9CC81F305BA42E310417FC8B80A /* CLGloomEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLGloomEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.m; sourceTree = ""; }; + 86B5E3FF8856E095E344F5FC6C60410B /* CLPixellateEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLPixellateEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.h; sourceTree = ""; }; + 86F3CFC4CCD398B2222B0775536C0C71 /* SPTCompiledExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCompiledExample.m; path = Specta/Specta/SPTCompiledExample.m; sourceTree = ""; }; + 87125D88D19A6D31347503B8674587B2 /* DGActivityIndicatorBallBeatAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallBeatAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallBeatAnimation.h; sourceTree = ""; }; + 87C774635F731C01F21B33BAEDBFB830 /* DGActivityIndicatorBallZigZagDeflectAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallZigZagDeflectAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagDeflectAnimation.h; sourceTree = ""; }; + 88A1A56FC7B637942215FBD46FAA72F1 /* libExpecta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libExpecta.a; path = libExpecta.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8987F415C3207E2F4FADF5AA411533D3 /* UIImage+Utility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Utility.m"; path = "CLImageEditor/Utils/UIImage+Utility.m"; sourceTree = ""; }; + 8B141E3FD47FD261CC9A84EF0DE865CE /* CLEffectBase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLEffectBase.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.h; sourceTree = ""; }; + 8B1DF3AA48602242D1957DED664F6165 /* libDGActivityIndicatorView.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libDGActivityIndicatorView.a; path = libDGActivityIndicatorView.a; sourceTree = BUILT_PRODUCTS_DIR; }; + 8BC8C5E811C7C9577BE5668873B10590 /* EXPUnsupportedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPUnsupportedObject.m; path = Expecta/EXPUnsupportedObject.m; sourceTree = ""; }; + 8C3CBF34D7AB5A63464D2968901D5D88 /* DGActivityIndicatorDoubleBounceAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorDoubleBounceAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorDoubleBounceAnimation.m; sourceTree = ""; }; + 8C937FE31F35E5D428801CE0108E3D2A /* EXPMatchers+beNil.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beNil.m"; path = "Expecta/Matchers/EXPMatchers+beNil.m"; sourceTree = ""; }; + 8CA19A6800D528F1AF2A6E912AEAB458 /* EXPMatchers+beKindOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beKindOf.h"; path = "Expecta/Matchers/EXPMatchers+beKindOf.h"; sourceTree = ""; }; 8D358CEC162D5EDFBF364FF07521A725 /* PNCollectionViewCell.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PNCollectionViewCell.m; path = Pod/Classes/PNCollectionViewCell.m; sourceTree = ""; }; - 8DAE39110C161CD4116FB3748B10B635 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleRippleMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleMultipleAnimation.h; sourceTree = ""; }; - 8F551D8377A64B4D1C29B251C43C1B52 /* libExpecta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libExpecta.a; path = libExpecta.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 93AA1AAE1542ABEC84B5AEF48EA3F1F6 /* DGActivityIndicatorAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorAnimation.h; sourceTree = ""; }; - 9405B80774B52E7F63F79E305C0E1B6D /* PureLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "PureLayout-dummy.m"; sourceTree = ""; }; - 979DD3CB93F4490B3615CB12F3E0A9EF /* EXPMatchers+beGreaterThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h"; sourceTree = ""; }; - 97B59947B5CDD647744634C51303C68F /* NSLayoutConstraint+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSLayoutConstraint+PureLayout.m"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.m"; sourceTree = ""; }; - 99587234E58AD47D94EEF33EE5593CCB /* DGActivityIndicatorTwoDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTwoDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTwoDotsAnimation.h; sourceTree = ""; }; - 9A3683C5658C1F8670B3D5917BB9703A /* EXPMatchers+beInstanceOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInstanceOf.m"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.m"; sourceTree = ""; }; - 9AEEAD3E15294B9DAD060D01F30957A9 /* Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Expecta.h; path = Expecta/Expecta.h; sourceTree = ""; }; - 9B5E8BC33C445C284FF1AD2DB5A4B826 /* DGActivityIndicatorBallZigZagDeflectAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallZigZagDeflectAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagDeflectAnimation.m; sourceTree = ""; }; - 9C1B6D063F9ACD6190D867E2C5456AFD /* Pods-PNImagePickerViewController_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PNImagePickerViewController_Example-acknowledgements.plist"; sourceTree = ""; }; - 9CB173AF16A4149C470E1B32C67FE6B0 /* EXPMatchers+beLessThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beLessThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.h"; sourceTree = ""; }; + 8E8BB1C3EA002A126F30A227CB3A5F2E /* UIView+Frame.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+Frame.m"; path = "CLImageEditor/Utils/UIView+Frame.m"; sourceTree = ""; }; + 8EE7515614472F7D1DA2AFB8FCB8B513 /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; + 8F2B0970FB87319B16DDA18C6CC74785 /* Expecta+Snapshots.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Expecta+Snapshots.xcconfig"; sourceTree = ""; }; + 8F4E853ECF336C3ACB246B1FEA2700AF /* CLHighlightShadowEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLHighlightShadowEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.h; sourceTree = ""; }; + 8FCE3F9E1165582A12D4BE2B10187213 /* EXPMatchers+conformTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+conformTo.h"; path = "Expecta/Matchers/EXPMatchers+conformTo.h"; sourceTree = ""; }; + 8FFB04A73E27045D16B23AEB87A7D8F4 /* CLImageEditor-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "CLImageEditor-prefix.pch"; sourceTree = ""; }; + 90176BD845094FA5B80755B4160B997F /* DGActivityIndicatorTriplePulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTriplePulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriplePulseAnimation.m; sourceTree = ""; }; + 916A6D7BA05C1458EAC460A0C01B904C /* EXPMatchers+raiseWithReason.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raiseWithReason.m"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.m"; sourceTree = ""; }; + 922382F5DFD953122E9240B15F3AD03B /* DGActivityIndicatorView.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = DGActivityIndicatorView.xcconfig; sourceTree = ""; }; + 92953EBFCE0589BD75174229B79C00E3 /* DGActivityIndicatorRotatingTrigonAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingTrigonAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingTrigonAnimation.h; sourceTree = ""; }; + 92B92FECD5D6793B5D0E0BAA90F5EB8F /* CLPixellateEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLPixellateEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPixellateEffect.m; sourceTree = ""; }; + 94306BA3B0A7FDCC8CAE586BBF76F0B0 /* EXPMatchers+postNotification.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+postNotification.m"; path = "Expecta/Matchers/EXPMatchers+postNotification.m"; sourceTree = ""; }; + 9578D857DF98B16C199C682AA06F2150 /* CLTextTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLTextTool.h; path = OptionalImageTools/CLTextTool/CLTextTool.h; sourceTree = ""; }; + 96589DDD298104A3B4B2A7BCA888C180 /* EXPBlockDefinedMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPBlockDefinedMatcher.h; path = Expecta/EXPBlockDefinedMatcher.h; sourceTree = ""; }; + 9771937E6AD121D992F85088533FA1C9 /* EXPMatchers+beLessThan.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThan.m"; path = "Expecta/Matchers/EXPMatchers+beLessThan.m"; sourceTree = ""; }; + 988AB59335AFA839E9B498EFF7191E40 /* Pods-PNImagePickerViewController_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PNImagePickerViewController_Example-acknowledgements.plist"; sourceTree = ""; }; + 9A3BF5E8639956A74303A23977618597 /* EXPMatchers.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatchers.h; path = Expecta/Matchers/EXPMatchers.h; sourceTree = ""; }; + 9AA009B2C02A39829E14FB009467EE13 /* Expecta+Snapshots-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Expecta+Snapshots-prefix.pch"; sourceTree = ""; }; + 9BF5D22A38139D6A8E755AB67850A2F2 /* CLEffectTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLEffectTool.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffectTool.m; sourceTree = ""; }; + 9C53AE5DA16C84F320993822893E7211 /* DGActivityIndicatorBallScaleMultipleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallScaleMultipleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleMultipleAnimation.m; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9EA9DEEE31D71ADE5316274427501DFA /* SPTCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCallSite.h; path = Specta/Specta/SPTCallSite.h; sourceTree = ""; }; - 9F57D3E380552F1C512A0BD5DA735CDA /* EXPDoubleTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDoubleTuple.h; path = Expecta/EXPDoubleTuple.h; sourceTree = ""; }; - 9FFA621D2AFC60333CB094F5F9B7A0F4 /* DGActivityIndicatorBallScaleRippleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleRippleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleAnimation.h; sourceTree = ""; }; - A0EA618ABA1FEFE300B2C8912EAD2880 /* XCTest+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTest+Private.h"; path = "Specta/Specta/XCTest+Private.h"; sourceTree = ""; }; - A18F9B8AD3DD0F98F7B30230CA47AE74 /* DGActivityIndicatorRotatingTrigonAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingTrigonAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingTrigonAnimation.m; sourceTree = ""; }; - A191716885879336C1E252D2CCFBBD0B /* PureLayout+Internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "PureLayout+Internal.h"; path = "PureLayout/PureLayout/PureLayout+Internal.h"; sourceTree = ""; }; - A198E8B5473803670E04622EECB0BA4B /* EXPBlockDefinedMatcher.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPBlockDefinedMatcher.m; path = Expecta/EXPBlockDefinedMatcher.m; sourceTree = ""; }; - A20DBC0C903E53D990DF826B885AE08C /* EXPMatchers+beSubclassOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSubclassOf.h"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.h"; sourceTree = ""; }; - A2B27404C0C2694965DC43E52B70DB5D /* Pods-PNImagePickerViewController_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Example.debug.xcconfig"; sourceTree = ""; }; - A37F6EE49DE93B85607D36F96BD35450 /* EXPMatchers+conformTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+conformTo.m"; path = "Expecta/Matchers/EXPMatchers+conformTo.m"; sourceTree = ""; }; - A476E9C3796F0A16A0BCC278451A5887 /* EXPMatchers+beInTheRangeOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInTheRangeOf.h"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.h"; sourceTree = ""; }; - A5927D0FB8A21F422200F6D0EC3F9350 /* DGActivityIndicatorTriplePulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTriplePulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriplePulseAnimation.m; sourceTree = ""; }; - A882930B1B557522A5440C42B1B67904 /* EXPMatchers+beTruthy.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beTruthy.h"; path = "Expecta/Matchers/EXPMatchers+beTruthy.h"; sourceTree = ""; }; - A894372807AEBE5B8C379CE2DF1003AA /* EXPMatchers+equal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+equal.h"; path = "Expecta/Matchers/EXPMatchers+equal.h"; sourceTree = ""; }; - A8986D5B3683E751BBCB38F9D3E745E9 /* DGActivityIndicatorBallScaleMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleMultipleAnimation.h; sourceTree = ""; }; - A8CF38D63EC176579E09FEC0430CE737 /* DGActivityIndicatorThreeDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorThreeDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorThreeDotsAnimation.m; sourceTree = ""; }; - A94A3856C16EA41451831CFA66381B74 /* Specta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Specta.xcconfig; sourceTree = ""; }; - AB1C242792F17FE04FC406467160C69F /* libExpecta+Snapshots.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libExpecta+Snapshots.a"; path = "libExpecta+Snapshots.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABEEEB75B318BDDBD3FFAB8FCFE9D008 /* Specta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Specta-dummy.m"; sourceTree = ""; }; - AC1556429910AF9D7A5C104820460362 /* EXPMatchers+endWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+endWith.m"; path = "Expecta/Matchers/EXPMatchers+endWith.m"; sourceTree = ""; }; - ACC4C82E9336F709DF3A6A9D4F046E51 /* DGActivityIndicatorBallRotateAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallRotateAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallRotateAnimation.h; sourceTree = ""; }; - AD2C88560277830873F0B4F9A1AA5A6A /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; - ADD8BC79468CDD9E764D6F1EA496B4F7 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePulseOutRapidAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutRapidAnimation.h; sourceTree = ""; }; - AFDA1D435FFCB12E08C11D72F10B3A2A /* EXPMatchers+FBSnapshotTest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EXPMatchers+FBSnapshotTest.h"; sourceTree = ""; }; - B08F1B2A72B66B20EDC43ED8E2E16932 /* DGActivityIndicatorBallBeatAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallBeatAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallBeatAnimation.h; sourceTree = ""; }; - B0DFB3411CDD6190D6885F20F3F39752 /* UIImage+Snapshot.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Snapshot.m"; path = "FBSnapshotTestCase/Categories/UIImage+Snapshot.m"; sourceTree = ""; }; - B2672ADBFEB22938D2F91C5FEF78478B /* SPTExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExample.h; path = Specta/Specta/SPTExample.h; sourceTree = ""; }; - B29331DBF52D38CDA41515F9C1D0F8FD /* DGActivityIndicatorNineDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorNineDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorNineDotsAnimation.m; sourceTree = ""; }; - B585EA8F8736D10BFBB2A3B9671FA968 /* Pods-PNImagePickerViewController_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Tests.release.xcconfig"; sourceTree = ""; }; - B59B0A5AA79E9C81F13D18852D9755F5 /* ExpectaObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaObject.m; path = Expecta/ExpectaObject.m; sourceTree = ""; }; - B62BCAB6786FC92CF3515157811AF7CB /* SPTTestSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTTestSuite.m; path = Specta/Specta/SPTTestSuite.m; sourceTree = ""; }; - B71F9769375E8E2218692E0A955A90E9 /* DGActivityIndicatorLineScalePartyAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePartyAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePartyAnimation.m; sourceTree = ""; }; - B8B9BA86A6F882B2F2D33561B48FCCE2 /* DGActivityIndicatorBallSpinFadeLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallSpinFadeLoader.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallSpinFadeLoader.m; sourceTree = ""; }; - BE241C92B3673E71452B186D973D8B99 /* EXPMatchers+beInstanceOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInstanceOf.h"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.h"; sourceTree = ""; }; - BF8D56777CAB61E60ABE5169B3257975 /* ExpectaSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaSupport.m; path = Expecta/ExpectaSupport.m; sourceTree = ""; }; - C079324BD4564637742D2363D7235B39 /* DGActivityIndicatorNineDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorNineDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorNineDotsAnimation.h; sourceTree = ""; }; - C2A01990D424165AF7F7272B05391885 /* EXPMatchers+match.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+match.m"; path = "Expecta/Matchers/EXPMatchers+match.m"; sourceTree = ""; }; - C3E7E7FEC55D09C690F84929B08CF5C6 /* ExpectaObject+FBSnapshotTest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "ExpectaObject+FBSnapshotTest.h"; sourceTree = ""; }; - C47305E86BCE08B135933CFE8B015712 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotatePulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotatePulseAnimation.m; sourceTree = ""; }; - C6A0DFA69CA61B3B10109B0D5FD8F97C /* Expecta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta-dummy.m"; sourceTree = ""; }; - C850E4119FC6A751D2F900C85D446694 /* EXPMatchers+raise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raise.h"; path = "Expecta/Matchers/EXPMatchers+raise.h"; sourceTree = ""; }; - C9006F52DD6059B7910C6A9B948D008F /* EXPMatchers+beFalsy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beFalsy.m"; path = "Expecta/Matchers/EXPMatchers+beFalsy.m"; sourceTree = ""; }; - CB53272766B326AFED0717E9DBEFF871 /* Pods-PNImagePickerViewController_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PNImagePickerViewController_Tests-dummy.m"; sourceTree = ""; }; - CC2B05BBB0C6B65FC67DB06D9A5D6184 /* EXPMatchers+raise.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+raise.m"; path = "Expecta/Matchers/EXPMatchers+raise.m"; sourceTree = ""; }; - CE42F6BFFC31F81D9E491D65E3F2DA0D /* FBSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSnapshotTestCase-dummy.m"; sourceTree = ""; }; - CF9877BE0055CEA7454DF31C84ABF10C /* DGActivityIndicatorLineScaleAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScaleAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScaleAnimation.m; sourceTree = ""; }; - CFD00093D4CE466822FB65B7632B2C98 /* EXPMatchers+respondTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+respondTo.h"; path = "Expecta/Matchers/EXPMatchers+respondTo.h"; sourceTree = ""; }; - CFF1D95B9CB69CC0C8A003255887B864 /* libPNImagePickerViewController.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libPNImagePickerViewController.a; path = libPNImagePickerViewController.a; sourceTree = BUILT_PRODUCTS_DIR; }; - D1138C8D47C1A4DFA2388E211621D193 /* SPTCompiledExample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCompiledExample.m; path = Specta/Specta/SPTCompiledExample.m; sourceTree = ""; }; - D11B1EFC74CE1980AE638AECACF9C974 /* EXPUnsupportedObject.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPUnsupportedObject.m; path = Expecta/EXPUnsupportedObject.m; sourceTree = ""; }; - D1E62DAB191F6C2415F9D3213AF28AA0 /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; - D2BF444E62A1BF778634544CE47F974A /* EXPMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcher.h; path = Expecta/EXPMatcher.h; sourceTree = ""; }; - D2E5AA027920FEFC6501EDBD7927549C /* NSArray+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSArray+PureLayout.m"; path = "PureLayout/PureLayout/NSArray+PureLayout.m"; sourceTree = ""; }; + 9DE84474D5129A2B209499663474E7B6 /* DGActivityIndicatorLineScalePartyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePartyAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePartyAnimation.h; sourceTree = ""; }; + 9F6C4F21E38B3C8722BF2000C3D2DC1A /* Pods-PNImagePickerViewController_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Example.release.xcconfig"; sourceTree = ""; }; + A16E37AD1F0511F083ADCB708C46DA1B /* SpectaUtility.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SpectaUtility.m; path = Specta/Specta/SpectaUtility.m; sourceTree = ""; }; + A20838E96960B0EE3E5E9AAC4F11765F /* Pods-PNImagePickerViewController_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PNImagePickerViewController_Example-acknowledgements.markdown"; sourceTree = ""; }; + A2432AA6D4EC0BEA306AD1697A788079 /* DGActivityIndicatorTripleRingsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorTripleRingsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTripleRingsAnimation.m; sourceTree = ""; }; + A28D9B967F851A2F4820DA8B312E422C /* CLTextTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLTextTool.m; path = OptionalImageTools/CLTextTool/CLTextTool.m; sourceTree = ""; }; + A2F779887CE15D223B10592B7D5B97A5 /* libPureLayout.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libPureLayout.a; path = libPureLayout.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A44680CD3E6D054D9D98424787089D2C /* DGActivityIndicatorView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorView.m; path = DGActivityIndicatorView/DGActivityIndicatorView.m; sourceTree = ""; }; + A4607800FA988EF76030C7E1CCD348F5 /* CLBlurTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLBlurTool.h; path = CLImageEditor/ImageTools/CLBlurTool/CLBlurTool.h; sourceTree = ""; }; + A52CACBF6D0995217565C4712230F1E1 /* UIImage+Utility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Utility.h"; path = "CLImageEditor/Utils/UIImage+Utility.h"; sourceTree = ""; }; + A567C863A2F932B9EA8A0F1D3EAC4536 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallScaleRippleMultipleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallScaleRippleMultipleAnimation.h; sourceTree = ""; }; + A7BC89760CEB19A9840CA44064687905 /* EXPMatchers+beKindOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beKindOf.m"; path = "Expecta/Matchers/EXPMatchers+beKindOf.m"; sourceTree = ""; }; + A7D7B4997104B4C9DA1D9DB08A7EFDDF /* UIImage+Compare.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Compare.h"; path = "FBSnapshotTestCase/Categories/UIImage+Compare.h"; sourceTree = ""; }; + A7F66FD07FA222ED6DF93D114777B5A8 /* CLFilterTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLFilterTool.h; path = CLImageEditor/ImageTools/CLFilterTool/CLFilterTool.h; sourceTree = ""; }; + A8BF4E5EA50EB4A42945C866F8872A89 /* CLPosterizeEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLPosterizeEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLPosterizeEffect.h; sourceTree = ""; }; + A93B96B32644DE5554738638C8BDF48D /* libPods-PNImagePickerViewController_Tests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libPods-PNImagePickerViewController_Tests.a"; path = "libPods-PNImagePickerViewController_Tests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + AA1236E595013C545E40DDF9FA9E72A3 /* EXPMatchers+FBSnapshotTest.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "EXPMatchers+FBSnapshotTest.h"; sourceTree = ""; }; + AAC180603C8BDADF466249E633C0B0BF /* CLClassList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLClassList.h; path = CLImageEditor/Utils/CLClassList.h; sourceTree = ""; }; + ABA50EF8736D9D71678E92DE894271F0 /* DGActivityIndicatorBallTrianglePathAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallTrianglePathAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallTrianglePathAnimation.h; sourceTree = ""; }; + AC24CC61265DA9CCB626B3E6677FE892 /* DGActivityIndicatorCookieTerminatorAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorCookieTerminatorAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorCookieTerminatorAnimation.m; sourceTree = ""; }; + AC2ED7C283181306CF2EACB7110AD237 /* EXPMatcher.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPMatcher.h; path = Expecta/EXPMatcher.h; sourceTree = ""; }; + AC5567FA3EE4586D4B42422B43830F54 /* DGActivityIndicatorThreeDotsAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorThreeDotsAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorThreeDotsAnimation.m; sourceTree = ""; }; + AE10882DB2A4667E3EEED8012C4B7F81 /* EXPMatchers+endWith.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+endWith.m"; path = "Expecta/Matchers/EXPMatchers+endWith.m"; sourceTree = ""; }; + AE51D2E46A0E183AAE2D26B9E73F6BBF /* CLToolbarMenuItem.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLToolbarMenuItem.m; path = CLImageEditor/ImageTools/ToolSettings/CLToolbarMenuItem.m; sourceTree = ""; }; + AE53BE2F4CA712777D2C9E4DED28AF80 /* SPTCallSite.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCallSite.h; path = Specta/Specta/SPTCallSite.h; sourceTree = ""; }; + AEF45465A5731643CD6447386FE4BDA7 /* CLGloomEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLGloomEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLGloomEffect.h; sourceTree = ""; }; + B0555E281173F434DE321A6980EB4B7D /* CLClassList.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLClassList.m; path = CLImageEditor/Utils/CLClassList.m; sourceTree = ""; }; + B101D9E07BA927ED510FE57505BE9706 /* FBSnapshotTestCasePlatform.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestCasePlatform.m; path = FBSnapshotTestCase/FBSnapshotTestCasePlatform.m; sourceTree = ""; }; + B118848C126610D3D81D4CD3620E035E /* CLTextSettingView.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLTextSettingView.m; path = OptionalImageTools/CLTextTool/CLTextSettingView.m; sourceTree = ""; }; + B1867EC23AFC111BEBE7684DA440A86C /* CLPickerDrum.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLPickerDrum.h; path = OptionalImageTools/CLTextTool/CLPickerDrum.h; sourceTree = ""; }; + B26922B47CC86901E841F8F9CACF8A66 /* ExpectaObject+FBSnapshotTest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "ExpectaObject+FBSnapshotTest.m"; sourceTree = ""; }; + B4585AA2AE022BCFD772B38179C94EA5 /* EXPMatchers+beGreaterThanOrEqualTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beGreaterThanOrEqualTo.h"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.h"; sourceTree = ""; }; + B60C4D8B577F0FBBC44267D4463082C2 /* DGActivityIndicatorLineScalePartyAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePartyAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePartyAnimation.m; sourceTree = ""; }; + B635529C8778441A6F819EFFB4A55998 /* FBSnapshotTestCase-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FBSnapshotTestCase-prefix.pch"; sourceTree = ""; }; + B7A6D8EAA9F4CF23796EEEF15426095C /* EXPMatchers+conformTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+conformTo.m"; path = "Expecta/Matchers/EXPMatchers+conformTo.m"; sourceTree = ""; }; + B92025E31C1C80C908E6387ABE8B49F6 /* EXPMatchers+beIdenticalTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beIdenticalTo.m"; path = "Expecta/Matchers/EXPMatchers+beIdenticalTo.m"; sourceTree = ""; }; + B92F0728667FB2155162429D638F47A9 /* EXPMatchers+beSubclassOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSubclassOf.h"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.h"; sourceTree = ""; }; + B995E30EE66A1EA0C7CB08EB76072D74 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotatePulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotatePulseAnimation.m; sourceTree = ""; }; + BA1F8B5F708B205B24C6E1B9779B248F /* CLAdjustmentTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLAdjustmentTool.h; path = CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.h; sourceTree = ""; }; + BCC64FC0CED02F74463BDAAFAC0EDB7C /* NSArray+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSArray+PureLayout.h"; path = "PureLayout/PureLayout/NSArray+PureLayout.h"; sourceTree = ""; }; + BE773F15A1A9C2C4F456F860360D6C70 /* SPTExampleGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExampleGroup.h; path = Specta/Specta/SPTExampleGroup.h; sourceTree = ""; }; + BED15B0227699510790422026A7A6DA9 /* NSLayoutConstraint+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "NSLayoutConstraint+PureLayout.h"; path = "PureLayout/PureLayout/NSLayoutConstraint+PureLayout.h"; sourceTree = ""; }; + BFA46E0F96D4A99A6CFF63CF74F8485D /* Specta-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Specta-dummy.m"; sourceTree = ""; }; + C0711DB77BA304BD6910D12F28E5F892 /* DGActivityIndicatorRotatingSandglassAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorRotatingSandglassAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSandglassAnimation.m; sourceTree = ""; }; + C105333441308C1AEDBBD40FC9462B8E /* CLImageToolSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageToolSettings.h; path = CLImageEditor/ImageTools/ToolSettings/CLImageToolSettings.h; sourceTree = ""; }; + C14779D3F8BC70BF5714331574CE44BA /* SPTSpec.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTSpec.h; path = Specta/Specta/SPTSpec.h; sourceTree = ""; }; + C15CCDB05DFE9779572C25206DC94363 /* EXPDoubleTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPDoubleTuple.h; path = Expecta/EXPDoubleTuple.h; sourceTree = ""; }; + C17CE7BD2F8350F362203907202BE472 /* UIView+CLImageToolInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIView+CLImageToolInfo.m"; path = "CLImageEditor/ImageTools/ToolSettings/UIView+CLImageToolInfo.m"; sourceTree = ""; }; + C19C5A5C17B304CB0284D9B16406B33A /* DGActivityIndicatorBallPulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallPulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseAnimation.h; sourceTree = ""; }; + C1E3D9293F8A53EE20D093D52FBD7A94 /* Pods-PNImagePickerViewController_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PNImagePickerViewController_Tests-dummy.m"; sourceTree = ""; }; + C285BC26A5315E6C01AB41E33F1010D0 /* EXPFloatTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPFloatTuple.h; path = Expecta/EXPFloatTuple.h; sourceTree = ""; }; + C471AA6E10291AA9DBECC6BE191AD31B /* SPTTestSuite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTTestSuite.m; path = Specta/Specta/SPTTestSuite.m; sourceTree = ""; }; + C54D448DE0718FF6643247D95D86A7DE /* SPTCallSite.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTCallSite.m; path = Specta/Specta/SPTCallSite.m; sourceTree = ""; }; + C63AB2F5F01BD95AFE85FE06DADA0E12 /* libFBSnapshotTestCase.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libFBSnapshotTestCase.a; path = libFBSnapshotTestCase.a; sourceTree = BUILT_PRODUCTS_DIR; }; + C76EFFD07FF6C6F01899F2D2D0859C48 /* FBSnapshotTestCase-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FBSnapshotTestCase-dummy.m"; sourceTree = ""; }; + C850598DB3A0399C224AF6F3239A7371 /* EXPMatchers+postNotification.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+postNotification.h"; path = "Expecta/Matchers/EXPMatchers+postNotification.h"; sourceTree = ""; }; + C8917D5C82931582EB00713E20C23132 /* DGActivityIndicatorBallPulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallPulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseAnimation.m; sourceTree = ""; }; + CA06417863EAA8D1843B71986CE3A826 /* CLDrawTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLDrawTool.h; path = CLImageEditor/ImageTools/CLDrawTool/CLDrawTool.h; sourceTree = ""; }; + CA3BAE5B1E70E8A22A6F7122F6324DEE /* Pods-PNImagePickerViewController_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-PNImagePickerViewController_Example-dummy.m"; sourceTree = ""; }; + CB6C88770592088B5F9F11F3339EB2F4 /* libExpecta+Snapshots.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = "libExpecta+Snapshots.a"; path = "libExpecta+Snapshots.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + CD3DE0425E48597ED3E92311287C26AD /* CLEffectBase.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLEffectBase.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffectBase.m; sourceTree = ""; }; + CD44816E58CE60EF66EF1091E7D3A813 /* UIDevice+SystemVersion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIDevice+SystemVersion.h"; path = "CLImageEditor/Utils/UIDevice+SystemVersion.h"; sourceTree = ""; }; + CD64CD2FC9F19617DEF0F4AD52387B4A /* Specta-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Specta-prefix.pch"; sourceTree = ""; }; + CDB0C1F86A601FAA57DC356A35E53A0C /* DGActivityIndicatorLineScalePulseOutAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorLineScalePulseOutAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutAnimation.m; sourceTree = ""; }; + CEEDD713872289DF0CE78A7D9F4E35FE /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; + CFB5ECDC557ACE506A8D437416CB2429 /* SpectaUtility.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaUtility.h; path = Specta/Specta/SpectaUtility.h; sourceTree = ""; }; + D05E5A1410A3A2EB847250DB4B27E36E /* EXPMatchers+contain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+contain.m"; path = "Expecta/Matchers/EXPMatchers+contain.m"; sourceTree = ""; }; + D0B46660DBCE36D3B4F6BDA5A97F51B8 /* SPTExcludeGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExcludeGlobalBeforeAfterEach.h; path = Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h; sourceTree = ""; }; + D11561C93FD86FAA6D823549229750F7 /* EXPUnsupportedObject.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPUnsupportedObject.h; path = Expecta/EXPUnsupportedObject.h; sourceTree = ""; }; + D1A0DC335AD2642469F5DA529765A85C /* Expecta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Expecta.h; path = Expecta/Expecta.h; sourceTree = ""; }; + D1A8D5FB1A671829925C55199833A87D /* DGActivityIndicatorBallSpinFadeLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallSpinFadeLoader.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallSpinFadeLoader.h; sourceTree = ""; }; + D1F2097EAE7937FC52B2076224AC7D67 /* DGActivityIndicatorBallGridPulseAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallGridPulseAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridPulseAnimation.m; sourceTree = ""; }; + D27EBDBE6AE2015FA9C4C9CF716E35EC /* ALView+PureLayout.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "ALView+PureLayout.m"; path = "PureLayout/PureLayout/ALView+PureLayout.m"; sourceTree = ""; }; + D2ABBB4CC5B354DF4CF54C437F0184C4 /* Expecta+Snapshots-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Expecta+Snapshots-dummy.m"; sourceTree = ""; }; D58FC251349EEAC93129F3C78EBF0B0B /* PNImagePickerViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PNImagePickerViewController.xcconfig; sourceTree = ""; }; - D6C77F0C15A2163E404CF29B5500E6A3 /* EXPMatchers+haveCountOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+haveCountOf.h"; path = "Expecta/Matchers/EXPMatchers+haveCountOf.h"; sourceTree = ""; }; - D96EC89C072B942B96AACCFD08D4162A /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Tests.debug.xcconfig"; sourceTree = ""; }; - D9AF3C7412855FEC35496E5C1F6946DA /* XCTestCase+Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTestCase+Specta.h"; path = "Specta/Specta/XCTestCase+Specta.h"; sourceTree = ""; }; + D591D391B594D5B186CE8E0560CBCDD2 /* CLStickerTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLStickerTool.h; path = OptionalImageTools/CLStickerTool/CLStickerTool.h; sourceTree = ""; }; + D669478AD880197C28B93809E5AF3A08 /* CLHighlightShadowEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLHighlightShadowEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHighlightShadowEffect.m; sourceTree = ""; }; + D7B2890298DB765B6F9E30965A8F4CB2 /* DGActivityIndicatorLineScaleAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScaleAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScaleAnimation.h; sourceTree = ""; }; + D7C44CE829A51109A9491A48D04D9954 /* EXPMatchers+beTruthy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beTruthy.m"; path = "Expecta/Matchers/EXPMatchers+beTruthy.m"; sourceTree = ""; }; + D8E5CAA106726ECF05AC28347AE4BEDA /* CLAdjustmentTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLAdjustmentTool.m; path = CLImageEditor/ImageTools/CLAdjustmentTool/CLAdjustmentTool.m; sourceTree = ""; }; + D90279F5D9C5FBFC4C2CB527594E92A6 /* DGActivityIndicatorBallGridPulseAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallGridPulseAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallGridPulseAnimation.h; sourceTree = ""; }; + D942985B510E2E377497175CA4D40343 /* EXPMatchers+raise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raise.h"; path = "Expecta/Matchers/EXPMatchers+raise.h"; sourceTree = ""; }; + D9916A98B0C56DB95CD79ED2A15B31A8 /* DGActivityIndicatorBallZigZagAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallZigZagAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagAnimation.h; sourceTree = ""; }; + D9DDCE4F298E28A79FD61C22BF64750F /* PureLayoutDefines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = PureLayoutDefines.h; path = PureLayout/PureLayout/PureLayoutDefines.h; sourceTree = ""; }; DA45DA3B5333B493A6E548920A28473A /* PNImagePickerViewController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = PNImagePickerViewController.m; path = Pod/Classes/PNImagePickerViewController.m; sourceTree = ""; }; - DAA40938C9E29CBC060588AF424FBDDC /* DGActivityIndicatorBallBeatAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallBeatAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallBeatAnimation.m; sourceTree = ""; }; - E0C56FBF5CDF85B7F9F029D50FCD1193 /* Expecta+Snapshots.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Expecta+Snapshots.xcconfig"; sourceTree = ""; }; - E0F3260E26F55C1FB0CC3EA9EEE00A78 /* SPTSharedExampleGroups.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTSharedExampleGroups.m; path = Specta/Specta/SPTSharedExampleGroups.m; sourceTree = ""; }; - E1206B1BCA502C8211B190211467F547 /* DGActivityIndicatorRotatingSquaresAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingSquaresAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSquaresAnimation.h; sourceTree = ""; }; - E2BF5B06A69C2878C3A51825998F15AE /* EXPMatchers+conformTo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+conformTo.h"; path = "Expecta/Matchers/EXPMatchers+conformTo.h"; sourceTree = ""; }; + DACDBF8ADBD30F9EA4997180B224AA36 /* XCTestCase+Specta.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "XCTestCase+Specta.h"; path = "Specta/Specta/XCTestCase+Specta.h"; sourceTree = ""; }; + DD05A4AF76763585C7ABC6910F9D360E /* Pods-PNImagePickerViewController_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-PNImagePickerViewController_Tests-acknowledgements.plist"; sourceTree = ""; }; + DD14738C6B77C0B2B2ABB957A39B19BF /* DGActivityIndicatorFiveDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorFiveDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorFiveDotsAnimation.h; sourceTree = ""; }; + DD61AD67EF3C6B150379836386E34923 /* DGActivityIndicatorBallPulseSyncAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallPulseSyncAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallPulseSyncAnimation.h; sourceTree = ""; }; + DDF3CCE9146E25A842E8665C96D556C3 /* DGActivityIndicatorLineScalePulseOutAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePulseOutAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutAnimation.h; sourceTree = ""; }; + DF04A0C5AF176E7AE21FC4198A1BB8F8 /* ExpectaSupport.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = ExpectaSupport.m; path = Expecta/ExpectaSupport.m; sourceTree = ""; }; + DF2B0175206E908CE38D20F24C38A7B3 /* CLStickerTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLStickerTool.m; path = OptionalImageTools/CLStickerTool/CLStickerTool.m; sourceTree = ""; }; + DF9C9C643D839AC15E9F157678474895 /* DGActivityIndicatorBallSpinFadeLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallSpinFadeLoader.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallSpinFadeLoader.m; sourceTree = ""; }; + E078B715EA674E13B26FB2FCC5A072BD /* DGActivityIndicatorDoubleBounceAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorDoubleBounceAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorDoubleBounceAnimation.h; sourceTree = ""; }; + E279EA7686537CE1762904E7AA29BBD5 /* CLHueEffect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLHueEffect.h; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLHueEffect.h; sourceTree = ""; }; E2E95162BB4F4C334E7207418B0D957D /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; + E32AAE0F79BEC3497AB674E6E51CA514 /* CLImageEditor-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "CLImageEditor-dummy.m"; sourceTree = ""; }; + E3303664105630330B21FF55C00CA666 /* UIDevice+SystemVersion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIDevice+SystemVersion.m"; path = "CLImageEditor/Utils/UIDevice+SystemVersion.m"; sourceTree = ""; }; + E3755B329118E995A24A2473A8EC91C0 /* UIApplication+StrictKeyWindow.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIApplication+StrictKeyWindow.h"; path = "FBSnapshotTestCase/Categories/UIApplication+StrictKeyWindow.h"; sourceTree = ""; }; E38736C845D85AB8D5B509FA79C25700 /* PNImagePickerViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "PNImagePickerViewController-prefix.pch"; sourceTree = ""; }; - E3C6071E73445BFA9A2DDC213B0127C3 /* DGActivityIndicatorTripleRingsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTripleRingsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTripleRingsAnimation.h; sourceTree = ""; }; - E3E5246E179E90A9260ED4FB4E8F3E1E /* EXPMatchers+contain.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+contain.m"; path = "Expecta/Matchers/EXPMatchers+contain.m"; sourceTree = ""; }; - E47379262AE52F59F1D1FDF1D47ADAD3 /* EXPMatchers+beSubclassOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beSubclassOf.m"; path = "Expecta/Matchers/EXPMatchers+beSubclassOf.m"; sourceTree = ""; }; E477B56A725385680AA61D7709EE4021 /* PNImagePickerViewController.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = PNImagePickerViewController.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - E567E1CFDD566EA01E1A143FFD774953 /* EXPMatchers+beGreaterThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beGreaterThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beGreaterThanOrEqualTo.m"; sourceTree = ""; }; - E6FF11399A79E70C1A1DC2325DE93734 /* SPTExampleGroup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = SPTExampleGroup.m; path = Specta/Specta/SPTExampleGroup.m; sourceTree = ""; }; - E72689157E3B261C8DD620BA95A3644C /* DGActivityIndicatorLineScalePartyAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePartyAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePartyAnimation.h; sourceTree = ""; }; - E8A75F4242E289782C970422FCC33D30 /* SPTExampleGroup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExampleGroup.h; path = Specta/Specta/SPTExampleGroup.h; sourceTree = ""; }; - E8B21017D962491FD4EB7B1374EEAEB4 /* DGActivityIndicatorBallClipRotateAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallClipRotateAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateAnimation.h; sourceTree = ""; }; - E8B35690475813D750553F708E232440 /* EXPMatchers+beginWith.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beginWith.h"; path = "Expecta/Matchers/EXPMatchers+beginWith.h"; sourceTree = ""; }; - E900B62E26E87ED9E367ED337DECB00F /* DGActivityIndicatorLineScalePulseOutAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorLineScalePulseOutAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorLineScalePulseOutAnimation.h; sourceTree = ""; }; - EBF3212F66C1845FCB74C7BB3D8605F5 /* FBSnapshotTestController.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FBSnapshotTestController.m; path = FBSnapshotTestCase/FBSnapshotTestController.m; sourceTree = ""; }; - EBFAC8BA979908F739576B7354E1FDA8 /* EXPFloatTuple.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPFloatTuple.h; path = Expecta/EXPFloatTuple.h; sourceTree = ""; }; - EC82E83F0F1ADD40100BBA02B5AEEA76 /* EXPMatchers+raiseWithReason.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+raiseWithReason.h"; path = "Expecta/Matchers/EXPMatchers+raiseWithReason.h"; sourceTree = ""; }; - EDA4A2B3B114188422B10D28F81B226A /* libSpecta.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libSpecta.a; path = libSpecta.a; sourceTree = BUILT_PRODUCTS_DIR; }; - EE370723C19DF7804BC8E9006DDAA7E5 /* DGActivityIndicatorCookieTerminatorAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorCookieTerminatorAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorCookieTerminatorAnimation.m; sourceTree = ""; }; - EEEBD26C484268FF0F6D44F610A010BF /* DGActivityIndicatorAnimationProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorAnimationProtocol.h; path = DGActivityIndicatorView/DGActivityIndicatorAnimationProtocol.h; sourceTree = ""; }; - F098E37DC8CF2AC49ADACBF9B5135BE8 /* DGActivityIndicatorTriangleSkewSpinAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTriangleSkewSpinAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriangleSkewSpinAnimation.h; sourceTree = ""; }; - F4116B2FC44E257E4E81DECF45D1475C /* DGActivityIndicatorBallZigZagAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallZigZagAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallZigZagAnimation.h; sourceTree = ""; }; - F5A92B987F5614CCA4ABCAAF36F7B7BB /* SpectaDSL.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SpectaDSL.h; path = Specta/Specta/SpectaDSL.h; sourceTree = ""; }; - F627224DEF87B902F0FE117E62365247 /* Pods-PNImagePickerViewController_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PNImagePickerViewController_Example-acknowledgements.markdown"; sourceTree = ""; }; - F78A56FA1663821E3B729346A31D11E7 /* PureLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PureLayout.xcconfig; sourceTree = ""; }; - F7BD1DBB61EDD7F336F4A21B67B0B27F /* DGActivityIndicatorView-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "DGActivityIndicatorView-dummy.m"; sourceTree = ""; }; - F7CC758FF7A51797080A968859DB841E /* DGActivityIndicatorCookieTerminatorAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorCookieTerminatorAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorCookieTerminatorAnimation.h; sourceTree = ""; }; - F7FFB8D223B0E1989708F0B39CF317F3 /* SPTExcludeGlobalBeforeAfterEach.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTExcludeGlobalBeforeAfterEach.h; path = Specta/Specta/SPTExcludeGlobalBeforeAfterEach.h; sourceTree = ""; }; - F89362F2451A13B64AE32C67DF4CA1C3 /* UIImage+Diff.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "UIImage+Diff.m"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.m"; sourceTree = ""; }; - FB6FA9F1190576BB11ADF678F5A46655 /* EXPMatchers+beLessThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m"; sourceTree = ""; }; - FB899888391C6218F5C3963CA824654D /* DGActivityIndicatorThreeDotsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorThreeDotsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorThreeDotsAnimation.h; sourceTree = ""; }; - FFD02234451C20BC55DA34624EC4673B /* EXPDoubleTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPDoubleTuple.m; path = Expecta/EXPDoubleTuple.m; sourceTree = ""; }; + E4D4F34920624E0884D5575B93F8E377 /* DGActivityIndicatorAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorAnimation.h; sourceTree = ""; }; + E65BF46FB72C62A4A77AE3BFF51C30E1 /* EXPDoubleTuple.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = EXPDoubleTuple.m; path = Expecta/EXPDoubleTuple.m; sourceTree = ""; }; + E6905CBF81EE4A986E3E14A14BCB668B /* Pods-PNImagePickerViewController_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-PNImagePickerViewController_Tests.release.xcconfig"; sourceTree = ""; }; + E703CA2A8534BF873B6C84ABC2F13173 /* EXPMatchers+beInstanceOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beInstanceOf.h"; path = "Expecta/Matchers/EXPMatchers+beInstanceOf.h"; sourceTree = ""; }; + E777358E38AFE8E510F10B8DEA46F7FC /* DGActivityIndicatorTriangleSkewSpinAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTriangleSkewSpinAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTriangleSkewSpinAnimation.h; sourceTree = ""; }; + E79558241A0D3DC4DB49B6FEBFD991CC /* SPTCompiledExample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = SPTCompiledExample.h; path = Specta/Specta/SPTCompiledExample.h; sourceTree = ""; }; + E82BF6614529AD45CDDA91FA4CECC65E /* DGActivityIndicatorRotatingSquaresAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorRotatingSquaresAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorRotatingSquaresAnimation.h; sourceTree = ""; }; + E8C2858F93DC90103D21FA84AF2928E7 /* CLTextLabel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLTextLabel.h; path = OptionalImageTools/CLTextTool/CLTextLabel.h; sourceTree = ""; }; + E98D48313BD9AB830895320034E34FB3 /* ALView+PureLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "ALView+PureLayout.h"; path = "PureLayout/PureLayout/ALView+PureLayout.h"; sourceTree = ""; }; + EB6BAD15DE1148ECE09C9C1AE42720CF /* CLImageToolProtocol.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLImageToolProtocol.h; path = CLImageEditor/ImageTools/ToolSettings/CLImageToolProtocol.h; sourceTree = ""; }; + EC1D8898DFADDA6F8786FF83009D746B /* DGActivityIndicatorAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorAnimation.m; sourceTree = ""; }; + EE653EF70CEA1C8BECED9D12DB391DD4 /* ExpectaSupport.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ExpectaSupport.h; path = Expecta/ExpectaSupport.h; sourceTree = ""; }; + EEC75972270FCCA49DDA7585648E2224 /* DGActivityIndicatorView-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "DGActivityIndicatorView-prefix.pch"; sourceTree = ""; }; + EFD88D10C8D64DC7C489CC9EA8C145E6 /* CLImageToolInfo+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "CLImageToolInfo+Private.h"; path = "CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.h"; sourceTree = ""; }; + F086BDADACFDDE1FBBD63E2E9F4B41E0 /* Specta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Specta.xcconfig; sourceTree = ""; }; + F0F23811297E8DAE2C693B7330A18292 /* FBSnapshotTestCase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FBSnapshotTestCase.h; path = FBSnapshotTestCase/FBSnapshotTestCase.h; sourceTree = ""; }; + F0F77449F785ECA2602DD68835779A75 /* DGActivityIndicatorBallClipRotateAnimation.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = DGActivityIndicatorBallClipRotateAnimation.m; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallClipRotateAnimation.m; sourceTree = ""; }; + F183AA6C6A1EC8329AA7D8FB366AE4FC /* PureLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = PureLayout.xcconfig; sourceTree = ""; }; + F4858AFC3AB0CB701B77DBE2ECF9CC7D /* CLImageEditor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLImageEditor.m; path = CLImageEditor/CLImageEditor.m; sourceTree = ""; }; + F49DF3440FBD2F6A8D75F3D4618879E0 /* CLRotateTool.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLRotateTool.m; path = CLImageEditor/ImageTools/CLRotateTool/CLRotateTool.m; sourceTree = ""; }; + F61D704BEF61268ECB476DC662AB4BF1 /* EXPMatchers+FBSnapshotTest.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "EXPMatchers+FBSnapshotTest.m"; sourceTree = ""; }; + F646007BDE5F05FD4E88AA271C7D7470 /* EXPExpect.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = EXPExpect.h; path = Expecta/EXPExpect.h; sourceTree = ""; }; + F65772CF61391F8452BA654F26A65AC2 /* Pods-PNImagePickerViewController_Tests-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-PNImagePickerViewController_Tests-resources.sh"; sourceTree = ""; }; + F6704BD3B6C3FD6FAB30D81AC4EB1D05 /* EXPMatchers+beInTheRangeOf.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beInTheRangeOf.m"; path = "Expecta/Matchers/EXPMatchers+beInTheRangeOf.m"; sourceTree = ""; }; + F6B4C0D9754C72F1F7E1F22F73667C8C /* DGActivityIndicatorBallRotateAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorBallRotateAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorBallRotateAnimation.h; sourceTree = ""; }; + F72B8583F161538EE39E8C877BD3807E /* DGActivityIndicatorTripleRingsAnimation.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = DGActivityIndicatorTripleRingsAnimation.h; path = DGActivityIndicatorView/Animations/DGActivityIndicatorTripleRingsAnimation.h; sourceTree = ""; }; + F7AF85E776B7292D5CAAA4CE356D8D1C /* CLImageEditorTheme+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CLImageEditorTheme+Private.m"; path = "CLImageEditor/ImageTools/ToolSettings/CLImageEditorTheme+Private.m"; sourceTree = ""; }; + F85A067AB9BE3D06CCE158B3036C66CD /* Pods-PNImagePickerViewController_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-PNImagePickerViewController_Tests-acknowledgements.markdown"; sourceTree = ""; }; + F8C577A973E16687543B68FE4C8FC814 /* EXPMatchers+beSupersetOf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "EXPMatchers+beSupersetOf.h"; path = "Expecta/Matchers/EXPMatchers+beSupersetOf.h"; sourceTree = ""; }; + FA8BD040A9E5AE22C774C4526E4E4A6E /* CLToneCurveTool.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = CLToneCurveTool.h; path = CLImageEditor/ImageTools/CLToneCurveTool/CLToneCurveTool.h; sourceTree = ""; }; + FB32FA05195E6BE1334FAEF3FFDD4E30 /* UIImage+Diff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "UIImage+Diff.h"; path = "FBSnapshotTestCase/Categories/UIImage+Diff.h"; sourceTree = ""; }; + FD1845E4402BE5F87CE0A45A40FEA17F /* CLImageToolInfo+Private.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "CLImageToolInfo+Private.m"; path = "CLImageEditor/ImageTools/ToolSettings/CLImageToolInfo+Private.m"; sourceTree = ""; }; + FD899D37593889596B2C128AD17BB481 /* libCLImageEditor.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; name = libCLImageEditor.a; path = libCLImageEditor.a; sourceTree = BUILT_PRODUCTS_DIR; }; + FDA28C1C37135B401CB9BAF4BDCE435E /* Expecta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = Expecta.xcconfig; sourceTree = ""; }; + FE368F5E1331B59B0E89FE430EF2A4C9 /* CLSpotEffect.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = CLSpotEffect.m; path = CLImageEditor/ImageTools/CLEffectTool/CLEffect/CLSpotEffect.m; sourceTree = ""; }; + FED9FC36901CB064F1A6BB419F87D9B2 /* EXPMatchers+beLessThanOrEqualTo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "EXPMatchers+beLessThanOrEqualTo.m"; path = "Expecta/Matchers/EXPMatchers+beLessThanOrEqualTo.m"; sourceTree = ""; }; + FFE46FDB6FBC1C769BE70FFE27E6D187 /* NSValue+Expecta.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "NSValue+Expecta.m"; path = "Expecta/NSValue+Expecta.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 027A764A354E980459F52FE6AB8C0F7F /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; 066AB953CB193CCA56DADDAC5B850316 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -606,6 +804,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 26FAC697B44885CE7F68B8FE89277E87 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2E6AE886A53581B0B7CFD5CC1FA9FBEA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BE39E613006B7A9797EDF29D0CC8D46 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 53F204B2A0170BD54E9C556EDADA16FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -613,21 +832,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7497B5BF65F8AD06010BF31284F2BD70 /* Frameworks */ = { + 6DD3A347B5F592481B9985F80BBCC899 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; - A767C0B827912500EE8B348933A9681E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C246278EA893A8F76EF2E319C8E0766C /* Frameworks */ = { + 8C7F6FEC9CBAC9ACD0F19A5EADCA0536 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( @@ -644,42 +856,127 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0B4E64FD22D2C888127C68C6F1CE29B6 /* Support Files */ = { + 04D7DF141136B264C3289882C1946F6E /* Expecta+Snapshots */ = { isa = PBXGroup; children = ( - 733F7D2BF1F10720986043F8F70CED3D /* Expecta.xcconfig */, - C6A0DFA69CA61B3B10109B0D5FD8F97C /* Expecta-dummy.m */, - 663D81FE55B7DCF682A679FF8E75F7E9 /* Expecta-prefix.pch */, + 70C62B6745FCFFAEA5330E1386AA9ABD /* ExpectaObject+FBSnapshotTest.h */, + B26922B47CC86901E841F8F9CACF8A66 /* ExpectaObject+FBSnapshotTest.m */, + AA1236E595013C545E40DDF9FA9E72A3 /* EXPMatchers+FBSnapshotTest.h */, + F61D704BEF61268ECB476DC662AB4BF1 /* EXPMatchers+FBSnapshotTest.m */, + C227DC43AF9F6B5AF24AB735BF899831 /* Support Files */, + ); + name = "Expecta+Snapshots"; + path = "Expecta+Snapshots"; + sourceTree = ""; + }; + 0D46A812196ACA85953B3B07C9FD4A0C /* Support Files */ = { + isa = PBXGroup; + children = ( + 58AED4B8164892CBAE70990656DCDFD2 /* CLImageEditor.xcconfig */, + E32AAE0F79BEC3497AB674E6E51CA514 /* CLImageEditor-dummy.m */, + 8FFB04A73E27045D16B23AEB87A7D8F4 /* CLImageEditor-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Expecta"; + path = "../Target Support Files/CLImageEditor"; sourceTree = ""; }; - 0C4CD26FEC77AE7C52823AB9D939A89D /* Targets Support Files */ = { + 0E369556B2DB3C30909FF63BBA2BFCCE /* Products */ = { isa = PBXGroup; children = ( - BBF0AB1A3761DB6E77C6D12481C2DE89 /* Pods-PNImagePickerViewController_Example */, - 18CA439D58595BD1BD9809B3F064317C /* Pods-PNImagePickerViewController_Tests */, + FD899D37593889596B2C128AD17BB481 /* libCLImageEditor.a */, + 8B1DF3AA48602242D1957DED664F6165 /* libDGActivityIndicatorView.a */, + 88A1A56FC7B637942215FBD46FAA72F1 /* libExpecta.a */, + CB6C88770592088B5F9F11F3339EB2F4 /* libExpecta+Snapshots.a */, + C63AB2F5F01BD95AFE85FE06DADA0E12 /* libFBSnapshotTestCase.a */, + 1BF69C957475843F38DA2D54D61812FD /* libPNImagePickerViewController.a */, + 07A458A20D9A15CB671325CEDC301DF5 /* libPods-PNImagePickerViewController_Example.a */, + A93B96B32644DE5554738638C8BDF48D /* libPods-PNImagePickerViewController_Tests.a */, + A2F779887CE15D223B10592B7D5B97A5 /* libPureLayout.a */, + 319EB9863A0D72FD4EFA7B1A031B81AA /* libSpecta.a */, ); - name = "Targets Support Files"; + name = Products; sourceTree = ""; }; - 0FCF9CA5D0DCDC09BA15CA660603FFCA /* PureLayout */ = { + 1130872DE5F85E8A929447F67171A367 /* Expecta */ = { isa = PBXGroup; children = ( - 10388F3FDCF8037C5696BC6E48AF93C6 /* ALView+PureLayout.h */, - 4E122446AA583E5DF5171E199924040D /* ALView+PureLayout.m */, - 8A15F60B4D82339861ADA171A6B48890 /* NSArray+PureLayout.h */, - D2E5AA027920FEFC6501EDBD7927549C /* NSArray+PureLayout.m */, - 688ADDCBE42993718E3E0BE21CD34F88 /* NSLayoutConstraint+PureLayout.h */, - 97B59947B5CDD647744634C51303C68F /* NSLayoutConstraint+PureLayout.m */, - 43A77050EE412E799E68240DA53D491F /* PureLayout.h */, - A191716885879336C1E252D2CCFBBD0B /* PureLayout+Internal.h */, - 15F399540B02FB4D17F7CCE7FDF80587 /* PureLayoutDefines.h */, - E5EEB1324B84C594EAE57AB6E9DB3C44 /* Support Files */, + 96589DDD298104A3B4B2A7BCA888C180 /* EXPBlockDefinedMatcher.h */, + 1C48D9E13BAA6A1AA78A3FB5332CD8C8 /* EXPBlockDefinedMatcher.m */, + 59312FB6D907BF42678B932173CCA1BB /* EXPDefines.h */, + C15CCDB05DFE9779572C25206DC94363 /* EXPDoubleTuple.h */, + E65BF46FB72C62A4A77AE3BFF51C30E1 /* EXPDoubleTuple.m */, + D1A0DC335AD2642469F5DA529765A85C /* Expecta.h */, + 6268404F5B58208C948BE43B12A34428 /* ExpectaObject.h */, + 099B59808274FFA5256015C96BE35934 /* ExpectaObject.m */, + EE653EF70CEA1C8BECED9D12DB391DD4 /* ExpectaSupport.h */, + DF04A0C5AF176E7AE21FC4198A1BB8F8 /* ExpectaSupport.m */, + F646007BDE5F05FD4E88AA271C7D7470 /* EXPExpect.h */, + 028C504F01FF398BD4595A3C6231CD9D /* EXPExpect.m */, + C285BC26A5315E6C01AB41E33F1010D0 /* EXPFloatTuple.h */, + 8061F80C45453B06E7D1FAFA2572CE24 /* EXPFloatTuple.m */, + AC2ED7C283181306CF2EACB7110AD237 /* EXPMatcher.h */, + 72082F71B6DA5CB722F58425C51BB119 /* EXPMatcherHelpers.h */, + 5AC6B865F6E57305C1973C4E0E93E134 /* EXPMatcherHelpers.m */, + 9A3BF5E8639956A74303A23977618597 /* EXPMatchers.h */, + 76496175DF8CC917D5C624EDBAA996D8 /* EXPMatchers+beCloseTo.h */, + 4890329971CC5A7F8151247982F480E2 /* EXPMatchers+beCloseTo.m */, + 2C4FC1F27C15ECAF779C925EB118EC05 /* EXPMatchers+beFalsy.h */, + 6879984937F965B06F94B56C999239CE /* EXPMatchers+beFalsy.m */, + 29DF95AD5C35B2584B738A5C4B89CE88 /* EXPMatchers+beginWith.h */, + 0079408D99F7B0D9C718823C7C67B65D /* EXPMatchers+beginWith.m */, + 721EA652CD526E38EBE8B7DA19133B6F /* EXPMatchers+beGreaterThan.h */, + 55F41591899D4449DA70C1B62D27B020 /* EXPMatchers+beGreaterThan.m */, + B4585AA2AE022BCFD772B38179C94EA5 /* EXPMatchers+beGreaterThanOrEqualTo.h */, + 75CE5363483109F5FE8818A5F2042C46 /* EXPMatchers+beGreaterThanOrEqualTo.m */, + 5A3F8880A97D49801CDD86B12735DE32 /* EXPMatchers+beIdenticalTo.h */, + B92025E31C1C80C908E6387ABE8B49F6 /* EXPMatchers+beIdenticalTo.m */, + E703CA2A8534BF873B6C84ABC2F13173 /* EXPMatchers+beInstanceOf.h */, + 24489B149F1552CF10A774DC6CFDE1EC /* EXPMatchers+beInstanceOf.m */, + 3DD57A7D9BF67727B3D47F2CE0A768C8 /* EXPMatchers+beInTheRangeOf.h */, + F6704BD3B6C3FD6FAB30D81AC4EB1D05 /* EXPMatchers+beInTheRangeOf.m */, + 8CA19A6800D528F1AF2A6E912AEAB458 /* EXPMatchers+beKindOf.h */, + A7BC89760CEB19A9840CA44064687905 /* EXPMatchers+beKindOf.m */, + 7D08C699AFD4D8AD09238B2DE9064293 /* EXPMatchers+beLessThan.h */, + 9771937E6AD121D992F85088533FA1C9 /* EXPMatchers+beLessThan.m */, + 4FAEF891219180A1F1C484EAFDB05A3B /* EXPMatchers+beLessThanOrEqualTo.h */, + FED9FC36901CB064F1A6BB419F87D9B2 /* EXPMatchers+beLessThanOrEqualTo.m */, + 6C595E33D1F34612F99655D3F65CADEF /* EXPMatchers+beNil.h */, + 8C937FE31F35E5D428801CE0108E3D2A /* EXPMatchers+beNil.m */, + B92F0728667FB2155162429D638F47A9 /* EXPMatchers+beSubclassOf.h */, + 3CDC709AD35E7449CEC00A5D76EFD280 /* EXPMatchers+beSubclassOf.m */, + F8C577A973E16687543B68FE4C8FC814 /* EXPMatchers+beSupersetOf.h */, + 164E059379200B76F8A44B16A43BA72C /* EXPMatchers+beSupersetOf.m */, + 42CB25CA081FBC4A63EFFFB20334120B /* EXPMatchers+beTruthy.h */, + D7C44CE829A51109A9491A48D04D9954 /* EXPMatchers+beTruthy.m */, + 8FCE3F9E1165582A12D4BE2B10187213 /* EXPMatchers+conformTo.h */, + B7A6D8EAA9F4CF23796EEEF15426095C /* EXPMatchers+conformTo.m */, + 0F7814B74C453D919E0F04ED997CB3E0 /* EXPMatchers+contain.h */, + D05E5A1410A3A2EB847250DB4B27E36E /* EXPMatchers+contain.m */, + 6EEF2B464E2854886600B18E5EC7110A /* EXPMatchers+endWith.h */, + AE10882DB2A4667E3EEED8012C4B7F81 /* EXPMatchers+endWith.m */, + 102788316CE4DD732E943BCF54B1C12F /* EXPMatchers+equal.h */, + 10571A323F9CAEC308554EF69AE90573 /* EXPMatchers+equal.m */, + 182F9B1FB4EAD604E281F0E091CAEE0B /* EXPMatchers+haveCountOf.h */, + 1E5F0349A4594BCA8E28494708D65556 /* EXPMatchers+haveCountOf.m */, + 44A82E1BD23AADF135D2358DB126290E /* EXPMatchers+match.h */, + 4FCCEE2CA9C2862A44911B761AAEE7BD /* EXPMatchers+match.m */, + C850598DB3A0399C224AF6F3239A7371 /* EXPMatchers+postNotification.h */, + 94306BA3B0A7FDCC8CAE586BBF76F0B0 /* EXPMatchers+postNotification.m */, + D942985B510E2E377497175CA4D40343 /* EXPMatchers+raise.h */, + 7A58F44B55A781827780C66FEF68C074 /* EXPMatchers+raise.m */, + 231081C326FCBDE867B534A081A1CD5A /* EXPMatchers+raiseWithReason.h */, + 916A6D7BA05C1458EAC460A0C01B904C /* EXPMatchers+raiseWithReason.m */, + 020CFAA90BAF3FDF2EEEB06B3085DA85 /* EXPMatchers+respondTo.h */, + 4CA8AFCCDD8B190011AE6C229DD56A47 /* EXPMatchers+respondTo.m */, + D11561C93FD86FAA6D823549229750F7 /* EXPUnsupportedObject.h */, + 8BC8C5E811C7C9577BE5668873B10590 /* EXPUnsupportedObject.m */, + 1BBACF5E878ABE08D69F473853B4ABC8 /* NSObject+Expecta.h */, + 106EC411F1BB7A127B3C814E07BAFDCF /* NSValue+Expecta.h */, + FFE46FDB6FBC1C769BE70FFE27E6D187 /* NSValue+Expecta.m */, + 46735E37DD74708600D23BA6BCD87A49 /* Support Files */, ); - name = PureLayout; - path = PureLayout; + name = Expecta; + path = Expecta; sourceTree = ""; }; 1672451D9F2B2D34A45DB9CFD1396406 /* Colors */ = { @@ -692,17 +989,37 @@ path = Pod/Classes/Colors; sourceTree = ""; }; - 18CA439D58595BD1BD9809B3F064317C /* Pods-PNImagePickerViewController_Tests */ = { + 1A1C5E0666DB335C73A3E108325A00C7 /* Pods */ = { isa = PBXGroup; children = ( - 0262713C498991992DBB25D0647A1E87 /* Pods-PNImagePickerViewController_Tests-acknowledgements.markdown */, - 47160C72333BBB6F801CB41562C1620A /* Pods-PNImagePickerViewController_Tests-acknowledgements.plist */, - CB53272766B326AFED0717E9DBEFF871 /* Pods-PNImagePickerViewController_Tests-dummy.m */, - D96EC89C072B942B96AACCFD08D4162A /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */, - B585EA8F8736D10BFBB2A3B9671FA968 /* Pods-PNImagePickerViewController_Tests.release.xcconfig */, + C8121E82D99A0B3DE23FCF2219ED2E6A /* CLImageEditor */, + 98F81623650A1CA1EF11819C63DF3648 /* DGActivityIndicatorView */, + 1130872DE5F85E8A929447F67171A367 /* Expecta */, + 04D7DF141136B264C3289882C1946F6E /* Expecta+Snapshots */, + 86364BBAF9C5EA3A3D2F35558CB18D84 /* FBSnapshotTestCase */, + 89F0F40C84F581CD2A688695A1934D63 /* PureLayout */, + C4E59DD12CC7FAFF2AD33D7803C7FAF1 /* Specta */, ); - name = "Pods-PNImagePickerViewController_Tests"; - path = "Target Support Files/Pods-PNImagePickerViewController_Tests"; + name = Pods; + sourceTree = ""; + }; + 1ED72FD8CE179444C1839B7CA59C38E9 /* TextTool */ = { + isa = PBXGroup; + children = ( + 55BE7A18C828E1C337F432D628B8D38A /* CLFontPickerView.h */, + 4624E9D28BA9D09E381668D04B3B62C1 /* CLFontPickerView.m */, + B1867EC23AFC111BEBE7684DA440A86C /* CLPickerDrum.h */, + 60F29CE7B3C013F5A3A6F3B7B33656C5 /* CLPickerDrum.m */, + 70E1A9A0B1E02A42A44EA9A77D4D0610 /* CLPickerView.h */, + 52ADC9A998C968EB7C8468BA2A594D77 /* CLPickerView.m */, + E8C2858F93DC90103D21FA84AF2928E7 /* CLTextLabel.h */, + 28FD4825476889B70215A8C46FB5C864 /* CLTextLabel.m */, + 70DC4D3B887F91D5DD09F251D699627A /* CLTextSettingView.h */, + B118848C126610D3D81D4CD3620E035E /* CLTextSettingView.m */, + 9578D857DF98B16C199C682AA06F2150 /* CLTextTool.h */, + A28D9B967F851A2F4820DA8B312E422C /* CLTextTool.m */, + ); + name = TextTool; sourceTree = ""; }; 27220DA7953C3D4D24D04FEBDEBECCFA /* Support Files */ = { @@ -716,97 +1033,15 @@ path = "Example/Pods/Target Support Files/PNImagePickerViewController"; sourceTree = ""; }; - 2A7CA50B65CEBD0F99059D30EBE4ABED /* Expecta */ = { + 42B303D8AA5E2D87B32AD875A51A492F /* Support Files */ = { isa = PBXGroup; children = ( - 8167B36F49B90C5CF522D693F4E6CCBE /* EXPBlockDefinedMatcher.h */, - A198E8B5473803670E04622EECB0BA4B /* EXPBlockDefinedMatcher.m */, - 0FD772BBF1C19F20856556B753A7A0C8 /* EXPDefines.h */, - 9F57D3E380552F1C512A0BD5DA735CDA /* EXPDoubleTuple.h */, - FFD02234451C20BC55DA34624EC4673B /* EXPDoubleTuple.m */, - 9AEEAD3E15294B9DAD060D01F30957A9 /* Expecta.h */, - 5FF0446102A0F6A6989D41B51DB4C3F7 /* ExpectaObject.h */, - B59B0A5AA79E9C81F13D18852D9755F5 /* ExpectaObject.m */, - 32FCF38F326C4E9FB34B0EE2163D99D2 /* ExpectaSupport.h */, - BF8D56777CAB61E60ABE5169B3257975 /* ExpectaSupport.m */, - 62FEE9BEDEDB62AEC56AC8BF396D704A /* EXPExpect.h */, - 58CBD375903D52C733603B13F3B9FD75 /* EXPExpect.m */, - EBFAC8BA979908F739576B7354E1FDA8 /* EXPFloatTuple.h */, - 1C1F29BADB09B2DBD35EE4B0F35AA9DE /* EXPFloatTuple.m */, - D2BF444E62A1BF778634544CE47F974A /* EXPMatcher.h */, - 08324062150C42273AC21DD6FD100E2E /* EXPMatcherHelpers.h */, - 4AA91518BEA6CD1CB6F913AFAB4E5407 /* EXPMatcherHelpers.m */, - 4DEDB9500182D56C311D639BBA4B4AC9 /* EXPMatchers.h */, - 6E6F83B96D10933170B381722B6F94CE /* EXPMatchers+beCloseTo.h */, - 7F09BF8543BE98A75DF08FBE5DA7749D /* EXPMatchers+beCloseTo.m */, - 11B6330FFF7F7E3D0E0D055667627C39 /* EXPMatchers+beFalsy.h */, - C9006F52DD6059B7910C6A9B948D008F /* EXPMatchers+beFalsy.m */, - E8B35690475813D750553F708E232440 /* EXPMatchers+beginWith.h */, - 50C51B444293D19FE5A444BE84CC95B0 /* EXPMatchers+beginWith.m */, - 05E6C8C12E1F8760CA2666CEA583327A /* EXPMatchers+beGreaterThan.h */, - 63116EE0063C84EE0E38B293DD6C15D0 /* EXPMatchers+beGreaterThan.m */, - 979DD3CB93F4490B3615CB12F3E0A9EF /* EXPMatchers+beGreaterThanOrEqualTo.h */, - E567E1CFDD566EA01E1A143FFD774953 /* EXPMatchers+beGreaterThanOrEqualTo.m */, - 1A9F34644F7D3C6AE77F265C69CD3893 /* EXPMatchers+beIdenticalTo.h */, - 7F92B138E265179C54CBC1E6E80F9F6B /* EXPMatchers+beIdenticalTo.m */, - BE241C92B3673E71452B186D973D8B99 /* EXPMatchers+beInstanceOf.h */, - 9A3683C5658C1F8670B3D5917BB9703A /* EXPMatchers+beInstanceOf.m */, - A476E9C3796F0A16A0BCC278451A5887 /* EXPMatchers+beInTheRangeOf.h */, - 8B1CDBADA96A60A6CD6E44CF8DCDF045 /* EXPMatchers+beInTheRangeOf.m */, - 00B65B647667F1863CF7F97BC49BDAB6 /* EXPMatchers+beKindOf.h */, - 48ABB3B17ABA5349AA2490F7F0199698 /* EXPMatchers+beKindOf.m */, - 7DF0F550079093157BD0E331A1B12F88 /* EXPMatchers+beLessThan.h */, - 7050DE2AC3EE5077F6C38C241FBCA941 /* EXPMatchers+beLessThan.m */, - 9CB173AF16A4149C470E1B32C67FE6B0 /* EXPMatchers+beLessThanOrEqualTo.h */, - FB6FA9F1190576BB11ADF678F5A46655 /* EXPMatchers+beLessThanOrEqualTo.m */, - 2CB598BE99DDCB82DF8545991C3DFB42 /* EXPMatchers+beNil.h */, - 1DED8B42C6394D9F7362325DB10CBD0B /* EXPMatchers+beNil.m */, - A20DBC0C903E53D990DF826B885AE08C /* EXPMatchers+beSubclassOf.h */, - E47379262AE52F59F1D1FDF1D47ADAD3 /* EXPMatchers+beSubclassOf.m */, - 1FE5BFE1B82A4328F9542EDA31BFB877 /* EXPMatchers+beSupersetOf.h */, - 0B8C1B6E0AD80C1DC53B309AEA8E2CAD /* EXPMatchers+beSupersetOf.m */, - A882930B1B557522A5440C42B1B67904 /* EXPMatchers+beTruthy.h */, - 81B2F4395F985F110B12E3D592269BB3 /* EXPMatchers+beTruthy.m */, - E2BF5B06A69C2878C3A51825998F15AE /* EXPMatchers+conformTo.h */, - A37F6EE49DE93B85607D36F96BD35450 /* EXPMatchers+conformTo.m */, - 4EE8745F8C822127F4F15C813259EC3F /* EXPMatchers+contain.h */, - E3E5246E179E90A9260ED4FB4E8F3E1E /* EXPMatchers+contain.m */, - 61B7B7D74911BF1E22A6D82FA9A0D024 /* EXPMatchers+endWith.h */, - AC1556429910AF9D7A5C104820460362 /* EXPMatchers+endWith.m */, - A894372807AEBE5B8C379CE2DF1003AA /* EXPMatchers+equal.h */, - 5500DEB3B1B37E089B180FFF2177B440 /* EXPMatchers+equal.m */, - D6C77F0C15A2163E404CF29B5500E6A3 /* EXPMatchers+haveCountOf.h */, - 84E1D8318F87F2F59C78E51856A44682 /* EXPMatchers+haveCountOf.m */, - 7A4C544A7D61E9914B46C9315CE2450B /* EXPMatchers+match.h */, - C2A01990D424165AF7F7272B05391885 /* EXPMatchers+match.m */, - 5D0903E79E56B300AB7CDA304C8E65AB /* EXPMatchers+postNotification.h */, - 1FA15D878D8EBA456903F0BA083082C0 /* EXPMatchers+postNotification.m */, - C850E4119FC6A751D2F900C85D446694 /* EXPMatchers+raise.h */, - CC2B05BBB0C6B65FC67DB06D9A5D6184 /* EXPMatchers+raise.m */, - EC82E83F0F1ADD40100BBA02B5AEEA76 /* EXPMatchers+raiseWithReason.h */, - 340AC250370DEFE01DC4672A8D88912A /* EXPMatchers+raiseWithReason.m */, - CFD00093D4CE466822FB65B7632B2C98 /* EXPMatchers+respondTo.h */, - 1C13D985E199B6606EC19D0B9D660D78 /* EXPMatchers+respondTo.m */, - 8CFCFD6A7A6749E103F46BC78D57AF4A /* EXPUnsupportedObject.h */, - D11B1EFC74CE1980AE638AECACF9C974 /* EXPUnsupportedObject.m */, - 3041B454B2F3FBE0BC88787C8205D429 /* NSObject+Expecta.h */, - 2DF748CF65727745E3EC958A1383DABA /* NSValue+Expecta.h */, - 82D85B82E08D2AB5F0DE12827636AE39 /* NSValue+Expecta.m */, - 0B4E64FD22D2C888127C68C6F1CE29B6 /* Support Files */, - ); - name = Expecta; - path = Expecta; - sourceTree = ""; - }; - 436231193C0FA0EE332D7B5AEEB8C2B5 /* Support Files */ = { - isa = PBXGroup; - children = ( - 6504BCAB77EE793DB38CDADAE500596A /* DGActivityIndicatorView.xcconfig */, - F7BD1DBB61EDD7F336F4A21B67B0B27F /* DGActivityIndicatorView-dummy.m */, - 2F8DA6F4540FE9ADD9C3AF78A64764D7 /* DGActivityIndicatorView-prefix.pch */, + F183AA6C6A1EC8329AA7D8FB366AE4FC /* PureLayout.xcconfig */, + 12D294D67030D643D0B52EA6C1D31979 /* PureLayout-dummy.m */, + 035AA0D35DC3C96D88C68BDCE814F4C1 /* PureLayout-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/DGActivityIndicatorView"; + path = "../Target Support Files/PureLayout"; sourceTree = ""; }; 44F08B5A10CE9AC220C1EE7B2039ACA6 /* PNImagePickerViewController */ = { @@ -824,129 +1059,32 @@ path = ../..; sourceTree = ""; }; - 4601A6F7800DCAECF0C31BA992B95BA2 /* DGActivityIndicatorView */ = { + 46735E37DD74708600D23BA6BCD87A49 /* Support Files */ = { isa = PBXGroup; children = ( - 93AA1AAE1542ABEC84B5AEF48EA3F1F6 /* DGActivityIndicatorAnimation.h */, - 87FF64502AF6AFB5CD5DF7E1FC428797 /* DGActivityIndicatorAnimation.m */, - EEEBD26C484268FF0F6D44F610A010BF /* DGActivityIndicatorAnimationProtocol.h */, - B08F1B2A72B66B20EDC43ED8E2E16932 /* DGActivityIndicatorBallBeatAnimation.h */, - DAA40938C9E29CBC060588AF424FBDDC /* DGActivityIndicatorBallBeatAnimation.m */, - E8B21017D962491FD4EB7B1374EEAEB4 /* DGActivityIndicatorBallClipRotateAnimation.h */, - 77A9BDDCD05BC18CE09F76B9E829B064 /* DGActivityIndicatorBallClipRotateAnimation.m */, - 2E6BDD6BDE5BE5B36A1ED5ACF8852C49 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */, - 6B520EE033269E818A119BBD7EF94ABC /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */, - 5C736319C6C57EA826839D881C13FE25 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */, - C47305E86BCE08B135933CFE8B015712 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */, - 20408733ABDE4A511D02524731CC0E87 /* DGActivityIndicatorBallGridBeatAnimation.h */, - 3A593BD1D7AFF0D2985324CBCECCAE23 /* DGActivityIndicatorBallGridBeatAnimation.m */, - 0DFAE1B12397D48FD8F58243043DBADE /* DGActivityIndicatorBallGridPulseAnimation.h */, - 1E30496B7608B1C380CF9A07A89FE25A /* DGActivityIndicatorBallGridPulseAnimation.m */, - 0B17048967E86B6F88FE3760E061CAAC /* DGActivityIndicatorBallPulseAnimation.h */, - 20D5AF212112217B9D819DDFA5022F99 /* DGActivityIndicatorBallPulseAnimation.m */, - 6F00ED288A8C5F6FC49AC29142BEDBDF /* DGActivityIndicatorBallPulseSyncAnimation.h */, - 63B3E7DDDD6AAA8E26798EF8D7EE14F3 /* DGActivityIndicatorBallPulseSyncAnimation.m */, - ACC4C82E9336F709DF3A6A9D4F046E51 /* DGActivityIndicatorBallRotateAnimation.h */, - 3D22976DF5930D258F8D0CD43C34E0A0 /* DGActivityIndicatorBallRotateAnimation.m */, - 38E76EA65E32ED08A8892DDFE7785DFE /* DGActivityIndicatorBallScaleAnimation.h */, - 8A05315F30184FBB74EF2E8D408C0329 /* DGActivityIndicatorBallScaleAnimation.m */, - A8986D5B3683E751BBCB38F9D3E745E9 /* DGActivityIndicatorBallScaleMultipleAnimation.h */, - 1379B55756ECF1ADF7EF2943EBAE87DE /* DGActivityIndicatorBallScaleMultipleAnimation.m */, - 9FFA621D2AFC60333CB094F5F9B7A0F4 /* DGActivityIndicatorBallScaleRippleAnimation.h */, - 540BD55DE87739E33BEBFC00A131941D /* DGActivityIndicatorBallScaleRippleAnimation.m */, - 8DAE39110C161CD4116FB3748B10B635 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */, - 09632C0914372467E37C5D3F0A2D2FA0 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */, - 584C16CAD342AB77F9166FB9E5A82DF2 /* DGActivityIndicatorBallSpinFadeLoader.h */, - B8B9BA86A6F882B2F2D33561B48FCCE2 /* DGActivityIndicatorBallSpinFadeLoader.m */, - 345A4875D2470550A613D350ED101F8F /* DGActivityIndicatorBallTrianglePathAnimation.h */, - 5A432C1EB254758D26FEA0508968652C /* DGActivityIndicatorBallTrianglePathAnimation.m */, - F4116B2FC44E257E4E81DECF45D1475C /* DGActivityIndicatorBallZigZagAnimation.h */, - 127BCD869F399CC2D26DB2A825276751 /* DGActivityIndicatorBallZigZagAnimation.m */, - 4FE1D46581B55DF807E66708E165096F /* DGActivityIndicatorBallZigZagDeflectAnimation.h */, - 9B5E8BC33C445C284FF1AD2DB5A4B826 /* DGActivityIndicatorBallZigZagDeflectAnimation.m */, - F7CC758FF7A51797080A968859DB841E /* DGActivityIndicatorCookieTerminatorAnimation.h */, - EE370723C19DF7804BC8E9006DDAA7E5 /* DGActivityIndicatorCookieTerminatorAnimation.m */, - 2274B65099CC808B6918054841DA2D64 /* DGActivityIndicatorDoubleBounceAnimation.h */, - 653E1D04B5C42953BE49583834B88195 /* DGActivityIndicatorDoubleBounceAnimation.m */, - 3B6E2D9BA249CF515E17ACA8E171DD28 /* DGActivityIndicatorFiveDotsAnimation.h */, - 5AAC704390D1003A4706DEEB7AD9E712 /* DGActivityIndicatorFiveDotsAnimation.m */, - 44026A095B9B6969B90CFAB82A55E28C /* DGActivityIndicatorLineScaleAnimation.h */, - CF9877BE0055CEA7454DF31C84ABF10C /* DGActivityIndicatorLineScaleAnimation.m */, - E72689157E3B261C8DD620BA95A3644C /* DGActivityIndicatorLineScalePartyAnimation.h */, - B71F9769375E8E2218692E0A955A90E9 /* DGActivityIndicatorLineScalePartyAnimation.m */, - E900B62E26E87ED9E367ED337DECB00F /* DGActivityIndicatorLineScalePulseOutAnimation.h */, - 19B271D38A7BB4A14DA2B34E6C694698 /* DGActivityIndicatorLineScalePulseOutAnimation.m */, - ADD8BC79468CDD9E764D6F1EA496B4F7 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */, - 01493E6E259777EA76017D828C38F9DF /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */, - C079324BD4564637742D2363D7235B39 /* DGActivityIndicatorNineDotsAnimation.h */, - B29331DBF52D38CDA41515F9C1D0F8FD /* DGActivityIndicatorNineDotsAnimation.m */, - 53B0122054FB8DCEC4B219E6B1ACBF6F /* DGActivityIndicatorRotatingSandglassAnimation.h */, - 5218758C2C26EB32D2DB63974EE24985 /* DGActivityIndicatorRotatingSandglassAnimation.m */, - E1206B1BCA502C8211B190211467F547 /* DGActivityIndicatorRotatingSquaresAnimation.h */, - 891D18912E498329CFA4AA880138180D /* DGActivityIndicatorRotatingSquaresAnimation.m */, - 343AAF28393979C4181639EC54E45BAE /* DGActivityIndicatorRotatingTrigonAnimation.h */, - A18F9B8AD3DD0F98F7B30230CA47AE74 /* DGActivityIndicatorRotatingTrigonAnimation.m */, - FB899888391C6218F5C3963CA824654D /* DGActivityIndicatorThreeDotsAnimation.h */, - A8CF38D63EC176579E09FEC0430CE737 /* DGActivityIndicatorThreeDotsAnimation.m */, - F098E37DC8CF2AC49ADACBF9B5135BE8 /* DGActivityIndicatorTriangleSkewSpinAnimation.h */, - 2B0ADCD49CB97055862DB1453BDFD8E4 /* DGActivityIndicatorTriangleSkewSpinAnimation.m */, - 0CD0B8CD41E5272E748A22109A27CD68 /* DGActivityIndicatorTriplePulseAnimation.h */, - A5927D0FB8A21F422200F6D0EC3F9350 /* DGActivityIndicatorTriplePulseAnimation.m */, - E3C6071E73445BFA9A2DDC213B0127C3 /* DGActivityIndicatorTripleRingsAnimation.h */, - 542396F01EAD6F9FC1563EA619D76BF9 /* DGActivityIndicatorTripleRingsAnimation.m */, - 99587234E58AD47D94EEF33EE5593CCB /* DGActivityIndicatorTwoDotsAnimation.h */, - 196AAAFF899EED6ECB64BBF8FA18617B /* DGActivityIndicatorTwoDotsAnimation.m */, - 527718B4621BCDE71BEA55AF9B7391A5 /* DGActivityIndicatorView.h */, - 1D60CFC4AB33F01A4104ED78E755EF2B /* DGActivityIndicatorView.m */, - 436231193C0FA0EE332D7B5AEEB8C2B5 /* Support Files */, - ); - name = DGActivityIndicatorView; - path = DGActivityIndicatorView; - sourceTree = ""; - }; - 479447B095BEF2A7F322A413B78FD601 /* Core */ = { - isa = PBXGroup; - children = ( - 789BCDD75B28A5DA925EC45071CD892C /* FBSnapshotTestCase.h */, - 7FBD26F8A36473565444B78F0014ACBD /* FBSnapshotTestCase.m */, - 3E6FBD1D02A3ACAF9A744FC0A3C3EE49 /* FBSnapshotTestCasePlatform.h */, - AD2C88560277830873F0B4F9A1AA5A6A /* FBSnapshotTestCasePlatform.m */, - 30045B2304111FBD90CF8ED689520EB5 /* FBSnapshotTestController.h */, - EBF3212F66C1845FCB74C7BB3D8605F5 /* FBSnapshotTestController.m */, - 42A031D21A30160D067D4F5047A361CF /* UIApplication+StrictKeyWindow.h */, - 56B0FAE8AF56DE36B7F41D22E3CFBA2C /* UIApplication+StrictKeyWindow.m */, - 7CDF8B46279229C6A6B77BFF1863618E /* UIImage+Compare.h */, - 438A1C4EFD72411CB5E4708982182333 /* UIImage+Compare.m */, - D1E62DAB191F6C2415F9D3213AF28AA0 /* UIImage+Diff.h */, - F89362F2451A13B64AE32C67DF4CA1C3 /* UIImage+Diff.m */, - 54DA03431C7C3296667AE784520FE4FD /* UIImage+Snapshot.h */, - B0DFB3411CDD6190D6885F20F3F39752 /* UIImage+Snapshot.m */, - ); - name = Core; - sourceTree = ""; - }; - 4ADE1B8A7CCEF3C091AD2C45373FF463 /* Support Files */ = { - isa = PBXGroup; - children = ( - A94A3856C16EA41451831CFA66381B74 /* Specta.xcconfig */, - ABEEEB75B318BDDBD3FFAB8FCFE9D008 /* Specta-dummy.m */, - 34C347E7A8DD1681F1194B7F7135A78A /* Specta-prefix.pch */, + FDA28C1C37135B401CB9BAF4BDCE435E /* Expecta.xcconfig */, + 08279B166C8C8EBABAEF43E786A718B0 /* Expecta-dummy.m */, + 736EAD20C00312AD70A9CC51C242554C /* Expecta-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Specta"; + path = "../Target Support Files/Expecta"; sourceTree = ""; }; - 4C84B4290E732A20EC82414D4F01E988 /* Pods */ = { + 598A7A28B23806B4EE905FD7FB23DD27 /* StickerTool */ = { isa = PBXGroup; children = ( - 4601A6F7800DCAECF0C31BA992B95BA2 /* DGActivityIndicatorView */, - 2A7CA50B65CEBD0F99059D30EBE4ABED /* Expecta */, - AF4F7AB810CFE6BFE4C2C88500139D31 /* Expecta+Snapshots */, - D665144637527B7513484BD01690BFAE /* FBSnapshotTestCase */, - 0FCF9CA5D0DCDC09BA15CA660603FFCA /* PureLayout */, - EA63369340335E34849FEB05CA628F72 /* Specta */, + D591D391B594D5B186CE8E0560CBCDD2 /* CLStickerTool.h */, + DF2B0175206E908CE38D20F24C38A7B3 /* CLStickerTool.m */, ); - name = Pods; + name = StickerTool; + sourceTree = ""; + }; + 5F57E625FC9DDA1D8390CA28B5A89DF6 /* Resources */ = { + isa = PBXGroup; + children = ( + 3081AED4A1DBC8558F95C1B3A3E8AED3 /* CLImageEditor.bundle */, + ); + name = Resources; sourceTree = ""; }; 623101AA97FCFF51DA1E83576BEAD705 /* Development Pods */ = { @@ -957,57 +1095,337 @@ name = "Development Pods"; sourceTree = ""; }; - AF4F7AB810CFE6BFE4C2C88500139D31 /* Expecta+Snapshots */ = { + 6C5DB811A4620C0F7F4F25700B98D4F5 /* EmoticonTool */ = { isa = PBXGroup; children = ( - C3E7E7FEC55D09C690F84929B08CF5C6 /* ExpectaObject+FBSnapshotTest.h */, - 5AD5A8553307E67F16BB37F904C5600F /* ExpectaObject+FBSnapshotTest.m */, - AFDA1D435FFCB12E08C11D72F10B3A2A /* EXPMatchers+FBSnapshotTest.h */, - 4B267F7099E5F667D61B49082AE9B00A /* EXPMatchers+FBSnapshotTest.m */, - FCA221450D3AB016D76F982B0C5C2359 /* Support Files */, + 7C8DE19CD4997F4782787005FFAF55B2 /* CLEmoticonTool.h */, + 48E294762ABAA5DB574F586DEB5D6C75 /* CLEmoticonTool.m */, ); - name = "Expecta+Snapshots"; - path = "Expecta+Snapshots"; + name = EmoticonTool; sourceTree = ""; }; - BBF0AB1A3761DB6E77C6D12481C2DE89 /* Pods-PNImagePickerViewController_Example */ = { + 77E8BCAC69409C1FD65760BE290BB5CB /* Core */ = { isa = PBXGroup; children = ( - F627224DEF87B902F0FE117E62365247 /* Pods-PNImagePickerViewController_Example-acknowledgements.markdown */, - 9C1B6D063F9ACD6190D867E2C5456AFD /* Pods-PNImagePickerViewController_Example-acknowledgements.plist */, - 313B777032AF94534B4B2ADECF32763C /* Pods-PNImagePickerViewController_Example-dummy.m */, - A2B27404C0C2694965DC43E52B70DB5D /* Pods-PNImagePickerViewController_Example.debug.xcconfig */, - 28480F6ECEB473466932618C209FDAAD /* Pods-PNImagePickerViewController_Example.release.xcconfig */, + 41A18D18EA08AC2DF69D99908922A648 /* _CLImageEditorViewController.h */, + 469EFF4318DC88D4451C345CFE2BE405 /* _CLImageEditorViewController.m */, + BA1F8B5F708B205B24C6E1B9779B248F /* CLAdjustmentTool.h */, + D8E5CAA106726ECF05AC28347AE4BEDA /* CLAdjustmentTool.m */, + 7258D3B1D96C6F0D9E4EFD887220DF55 /* CLBloomEffect.h */, + 4D48DF2DA815F9F474B9B1B999DAC921 /* CLBloomEffect.m */, + A4607800FA988EF76030C7E1CCD348F5 /* CLBlurTool.h */, + 788A22E2CCADE31EEE2A6CA2711B7D7F /* CLBlurTool.m */, + 0595E83F4861DD113C23F0E9875164A7 /* CLCircleView.h */, + 531D67C216660BC7748E4453B7B7DEB5 /* CLCircleView.m */, + AAC180603C8BDADF466249E633C0B0BF /* CLClassList.h */, + B0555E281173F434DE321A6980EB4B7D /* CLClassList.m */, + 51269A77524BB72ACDBD0ED41896797F /* CLClippingTool.h */, + 66429114168E24B2BA67CF8636FBA3B1 /* CLClippingTool.m */, + 40C293AAC1644A7E47D60EB77B145304 /* CLColorPickerView.h */, + 6B27A6B764F3A5C28C3C0FA783A6EBEE /* CLColorPickerView.m */, + CA06417863EAA8D1843B71986CE3A826 /* CLDrawTool.h */, + 7C62907F7D1A03C1056766D44F3D7499 /* CLDrawTool.m */, + 8B141E3FD47FD261CC9A84EF0DE865CE /* CLEffectBase.h */, + CD3DE0425E48597ED3E92311287C26AD /* CLEffectBase.m */, + 831A35ECC7BAB1B917AA09005F00EB4A /* CLEffectTool.h */, + 9BF5D22A38139D6A8E755AB67850A2F2 /* CLEffectTool.m */, + 75B37F8110BD82F3A493BD34FB303490 /* CLFilterBase.h */, + 14EDDE77DA9F7FB24FA3BA6840D6A352 /* CLFilterBase.m */, + A7F66FD07FA222ED6DF93D114777B5A8 /* CLFilterTool.h */, + 3526F2D300801B08DF64003DD7F0CC72 /* CLFilterTool.m */, + AEF45465A5731643CD6447386FE4BDA7 /* CLGloomEffect.h */, + 8515A9CC81F305BA42E310417FC8B80A /* CLGloomEffect.m */, + 8F4E853ECF336C3ACB246B1FEA2700AF /* CLHighlightShadowEffect.h */, + D669478AD880197C28B93809E5AF3A08 /* CLHighlightShadowEffect.m */, + E279EA7686537CE1762904E7AA29BBD5 /* CLHueEffect.h */, + 7D78CF607DED161F7960D8EC865A12B9 /* CLHueEffect.m */, + 1074EDB09BB377F782E2A5AC8F7A439C /* CLImageEditor.h */, + F4858AFC3AB0CB701B77DBE2ECF9CC7D /* CLImageEditor.m */, + 6F9E4017B544531E3DD3CFAE985A2939 /* CLImageEditorTheme.h */, + 582FAA969B5B203CF0C271A0AF437E61 /* CLImageEditorTheme.m */, + 3A9B0A9E17181101ABDBE61F3EA9711B /* CLImageEditorTheme+Private.h */, + F7AF85E776B7292D5CAAA4CE356D8D1C /* CLImageEditorTheme+Private.m */, + 5C7AD82E7ABA19FC174534AF689B81EF /* CLImageToolBase.h */, + 2D4CCAE2D625E14AE3AB2C181F160334 /* CLImageToolBase.m */, + 55FCA17E765BBF60EEE7E77148A4D75B /* CLImageToolInfo.h */, + 5AFBDB75FF4633E291F58D3A4E844130 /* CLImageToolInfo.m */, + EFD88D10C8D64DC7C489CC9EA8C145E6 /* CLImageToolInfo+Private.h */, + FD1845E4402BE5F87CE0A45A40FEA17F /* CLImageToolInfo+Private.m */, + EB6BAD15DE1148ECE09C9C1AE42720CF /* CLImageToolProtocol.h */, + C105333441308C1AEDBBD40FC9462B8E /* CLImageToolSettings.h */, + 86B5E3FF8856E095E344F5FC6C60410B /* CLPixellateEffect.h */, + 92B92FECD5D6793B5D0E0BAA90F5EB8F /* CLPixellateEffect.m */, + A8BF4E5EA50EB4A42945C866F8872A89 /* CLPosterizeEffect.h */, + 7A6F8BB79E9380C389EA0D0BBEC297BD /* CLPosterizeEffect.m */, + 72F8E1690BB299F62B8BFE961F219587 /* CLRotateTool.h */, + F49DF3440FBD2F6A8D75F3D4618879E0 /* CLRotateTool.m */, + 6EC41D2D28D58016DF52592F740A9FA4 /* CLSplineInterpolator.h */, + 79626C8499A4C34DAB3B0F7C796060CE /* CLSplineInterpolator.m */, + 2D3DCEFA6FA1C45840E93790995AAA85 /* CLSpotEffect.h */, + FE368F5E1331B59B0E89FE430EF2A4C9 /* CLSpotEffect.m */, + FA8BD040A9E5AE22C774C4526E4E4A6E /* CLToneCurveTool.h */, + 29ADD60249AFD1F958E131A7B7F78E13 /* CLToneCurveTool.m */, + 4282396C07BCBBBCDA54A0BFD02F1361 /* CLToolbarMenuItem.h */, + AE51D2E46A0E183AAE2D26B9E73F6BBF /* CLToolbarMenuItem.m */, + CD44816E58CE60EF66EF1091E7D3A813 /* UIDevice+SystemVersion.h */, + E3303664105630330B21FF55C00CA666 /* UIDevice+SystemVersion.m */, + A52CACBF6D0995217565C4712230F1E1 /* UIImage+Utility.h */, + 8987F415C3207E2F4FADF5AA411533D3 /* UIImage+Utility.m */, + 501C4A539FC9B570D95F7DF8C00A947F /* UIView+CLImageToolInfo.h */, + C17CE7BD2F8350F362203907202BE472 /* UIView+CLImageToolInfo.m */, + 7D51FA6E00A5A8C56E7BDF6DDCFB4A13 /* UIView+Frame.h */, + 8E8BB1C3EA002A126F30A227CB3A5F2E /* UIView+Frame.m */, + 5F57E625FC9DDA1D8390CA28B5A89DF6 /* Resources */, ); - name = "Pods-PNImagePickerViewController_Example"; - path = "Target Support Files/Pods-PNImagePickerViewController_Example"; + name = Core; sourceTree = ""; }; - BF92EFFAF41982309D3B99C26E6C9E41 /* Support Files */ = { + 7952F9E6B625DF388021292A9950D683 /* Support Files */ = { isa = PBXGroup; children = ( - 8CEAD24182BD2092A6D68BBFA2EDE382 /* FBSnapshotTestCase.xcconfig */, - CE42F6BFFC31F81D9E491D65E3F2DA0D /* FBSnapshotTestCase-dummy.m */, - 246EEDB046A72DCCF14BBAFBEA1D1881 /* FBSnapshotTestCase-prefix.pch */, + 527F6698D88773757C9DB0307C7DBE1E /* FBSnapshotTestCase.xcconfig */, + C76EFFD07FF6C6F01899F2D2D0859C48 /* FBSnapshotTestCase-dummy.m */, + B635529C8778441A6F819EFFB4A55998 /* FBSnapshotTestCase-prefix.pch */, ); name = "Support Files"; path = "../Target Support Files/FBSnapshotTestCase"; sourceTree = ""; }; - C06EF9F4AB1D6EADA846B13F8FD72514 /* Products */ = { + 85938B5F5E053D9CD2ED03A870EBC758 /* Pods-PNImagePickerViewController_Tests */ = { isa = PBXGroup; children = ( - 537A0DC1392B02762BC4844F210E00AD /* libDGActivityIndicatorView.a */, - 8F551D8377A64B4D1C29B251C43C1B52 /* libExpecta.a */, - AB1C242792F17FE04FC406467160C69F /* libExpecta+Snapshots.a */, - 62FAD1139FE57B2854585CEB80C743B9 /* libFBSnapshotTestCase.a */, - CFF1D95B9CB69CC0C8A003255887B864 /* libPNImagePickerViewController.a */, - 3715C965FB0AE977C8CB14B50B5A377E /* libPods-PNImagePickerViewController_Example.a */, - 457F5A8ED48B68CA96D7DA28A0DFB99E /* libPods-PNImagePickerViewController_Tests.a */, - 146931ABEC2A21E93DD406F60D9988B3 /* libPureLayout.a */, - EDA4A2B3B114188422B10D28F81B226A /* libSpecta.a */, + F85A067AB9BE3D06CCE158B3036C66CD /* Pods-PNImagePickerViewController_Tests-acknowledgements.markdown */, + DD05A4AF76763585C7ABC6910F9D360E /* Pods-PNImagePickerViewController_Tests-acknowledgements.plist */, + C1E3D9293F8A53EE20D093D52FBD7A94 /* Pods-PNImagePickerViewController_Tests-dummy.m */, + F65772CF61391F8452BA654F26A65AC2 /* Pods-PNImagePickerViewController_Tests-resources.sh */, + 7C4F3FE816FBC048C49C66A0431DFEC7 /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */, + E6905CBF81EE4A986E3E14A14BCB668B /* Pods-PNImagePickerViewController_Tests.release.xcconfig */, ); - name = Products; + name = "Pods-PNImagePickerViewController_Tests"; + path = "Target Support Files/Pods-PNImagePickerViewController_Tests"; + sourceTree = ""; + }; + 86364BBAF9C5EA3A3D2F35558CB18D84 /* FBSnapshotTestCase */ = { + isa = PBXGroup; + children = ( + B26B2E823E1181AEB51CCE69308BCA17 /* Core */, + 7952F9E6B625DF388021292A9950D683 /* Support Files */, + ); + name = FBSnapshotTestCase; + path = FBSnapshotTestCase; + sourceTree = ""; + }; + 89F0F40C84F581CD2A688695A1934D63 /* PureLayout */ = { + isa = PBXGroup; + children = ( + E98D48313BD9AB830895320034E34FB3 /* ALView+PureLayout.h */, + D27EBDBE6AE2015FA9C4C9CF716E35EC /* ALView+PureLayout.m */, + BCC64FC0CED02F74463BDAAFAC0EDB7C /* NSArray+PureLayout.h */, + 3791C20B45450AB4026BFFC01F234B9E /* NSArray+PureLayout.m */, + BED15B0227699510790422026A7A6DA9 /* NSLayoutConstraint+PureLayout.h */, + 43F80604401C1D7C6D62A3E3AF0688DB /* NSLayoutConstraint+PureLayout.m */, + 730BF7F3B1B42CD3C4F5E553F870DDCA /* PureLayout.h */, + 1A1B9CB8EC28910CB0762A5A1BAAF6C1 /* PureLayout+Internal.h */, + D9DDCE4F298E28A79FD61C22BF64750F /* PureLayoutDefines.h */, + 42B303D8AA5E2D87B32AD875A51A492F /* Support Files */, + ); + name = PureLayout; + path = PureLayout; + sourceTree = ""; + }; + 8F900505041FE1E8FFB00A7CD5CE8BA1 /* Support Files */ = { + isa = PBXGroup; + children = ( + F086BDADACFDDE1FBBD63E2E9F4B41E0 /* Specta.xcconfig */, + BFA46E0F96D4A99A6CFF63CF74F8485D /* Specta-dummy.m */, + CD64CD2FC9F19617DEF0F4AD52387B4A /* Specta-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Specta"; + sourceTree = ""; + }; + 9432A165BED7319A9624F8749C158EA7 /* Pods-PNImagePickerViewController_Example */ = { + isa = PBXGroup; + children = ( + A20838E96960B0EE3E5E9AAC4F11765F /* Pods-PNImagePickerViewController_Example-acknowledgements.markdown */, + 988AB59335AFA839E9B498EFF7191E40 /* Pods-PNImagePickerViewController_Example-acknowledgements.plist */, + CA3BAE5B1E70E8A22A6F7122F6324DEE /* Pods-PNImagePickerViewController_Example-dummy.m */, + 4DEA1CB372545AA4261BD3A77A23C120 /* Pods-PNImagePickerViewController_Example-resources.sh */, + 1F116938FF4A43A4B75595A2D2DD390A /* Pods-PNImagePickerViewController_Example.debug.xcconfig */, + 9F6C4F21E38B3C8722BF2000C3D2DC1A /* Pods-PNImagePickerViewController_Example.release.xcconfig */, + ); + name = "Pods-PNImagePickerViewController_Example"; + path = "Target Support Files/Pods-PNImagePickerViewController_Example"; + sourceTree = ""; + }; + 98F81623650A1CA1EF11819C63DF3648 /* DGActivityIndicatorView */ = { + isa = PBXGroup; + children = ( + E4D4F34920624E0884D5575B93F8E377 /* DGActivityIndicatorAnimation.h */, + EC1D8898DFADDA6F8786FF83009D746B /* DGActivityIndicatorAnimation.m */, + 0BB74377CDCB3224BD62413E93027CBC /* DGActivityIndicatorAnimationProtocol.h */, + 87125D88D19A6D31347503B8674587B2 /* DGActivityIndicatorBallBeatAnimation.h */, + 02EBC4C8E0408C6906CFA0B6D99B0A65 /* DGActivityIndicatorBallBeatAnimation.m */, + 300EC21FF8DE7EA70EFF64B595FB69B2 /* DGActivityIndicatorBallClipRotateAnimation.h */, + F0F77449F785ECA2602DD68835779A75 /* DGActivityIndicatorBallClipRotateAnimation.m */, + 6878FD408657C1D433D8235CC28D9688 /* DGActivityIndicatorBallClipRotateMultipleAnimation.h */, + 81E24007FA72146EF5FF3BA73FE81D26 /* DGActivityIndicatorBallClipRotateMultipleAnimation.m */, + 12F1AF2A9AE00A26508721D91B6BA3B2 /* DGActivityIndicatorBallClipRotatePulseAnimation.h */, + B995E30EE66A1EA0C7CB08EB76072D74 /* DGActivityIndicatorBallClipRotatePulseAnimation.m */, + 2688F6134F0298A15A73B0C4CA38C00B /* DGActivityIndicatorBallGridBeatAnimation.h */, + 7CC96C5D73036E814C3470CBFEAACA2C /* DGActivityIndicatorBallGridBeatAnimation.m */, + D90279F5D9C5FBFC4C2CB527594E92A6 /* DGActivityIndicatorBallGridPulseAnimation.h */, + D1F2097EAE7937FC52B2076224AC7D67 /* DGActivityIndicatorBallGridPulseAnimation.m */, + C19C5A5C17B304CB0284D9B16406B33A /* DGActivityIndicatorBallPulseAnimation.h */, + C8917D5C82931582EB00713E20C23132 /* DGActivityIndicatorBallPulseAnimation.m */, + DD61AD67EF3C6B150379836386E34923 /* DGActivityIndicatorBallPulseSyncAnimation.h */, + 597B1BFCB4C430D82828ABE5A9E2C2C6 /* DGActivityIndicatorBallPulseSyncAnimation.m */, + F6B4C0D9754C72F1F7E1F22F73667C8C /* DGActivityIndicatorBallRotateAnimation.h */, + 158A9D6EFC9C30F8C3194E06FB8FFB4F /* DGActivityIndicatorBallRotateAnimation.m */, + 7C3EA3E908C5CCE65D3ADAA6D4E9E73F /* DGActivityIndicatorBallScaleAnimation.h */, + 0F0E98133B2A03EDB9B93888DDE4E333 /* DGActivityIndicatorBallScaleAnimation.m */, + 74BDBCCCFC0848FD8C1591C42ADC36CE /* DGActivityIndicatorBallScaleMultipleAnimation.h */, + 9C53AE5DA16C84F320993822893E7211 /* DGActivityIndicatorBallScaleMultipleAnimation.m */, + 55D5D063DD50507C2008293BC3ED7DFA /* DGActivityIndicatorBallScaleRippleAnimation.h */, + 3FB2FB769897E6A6A65F3D99E58D9FA8 /* DGActivityIndicatorBallScaleRippleAnimation.m */, + A567C863A2F932B9EA8A0F1D3EAC4536 /* DGActivityIndicatorBallScaleRippleMultipleAnimation.h */, + 707AD70CDA31A488EA94F41E1A8C3F5D /* DGActivityIndicatorBallScaleRippleMultipleAnimation.m */, + D1A8D5FB1A671829925C55199833A87D /* DGActivityIndicatorBallSpinFadeLoader.h */, + DF9C9C643D839AC15E9F157678474895 /* DGActivityIndicatorBallSpinFadeLoader.m */, + ABA50EF8736D9D71678E92DE894271F0 /* DGActivityIndicatorBallTrianglePathAnimation.h */, + 1A956470C32647ADA50A887EBEA3CEAB /* DGActivityIndicatorBallTrianglePathAnimation.m */, + D9916A98B0C56DB95CD79ED2A15B31A8 /* DGActivityIndicatorBallZigZagAnimation.h */, + 0DDCEE576BC6A1B69F72C0889B094BCD /* DGActivityIndicatorBallZigZagAnimation.m */, + 87C774635F731C01F21B33BAEDBFB830 /* DGActivityIndicatorBallZigZagDeflectAnimation.h */, + 61530153FF9C4AB84CB5828DBDD8F6CF /* DGActivityIndicatorBallZigZagDeflectAnimation.m */, + 4568CFFF5D70E9938AABF62320A0056E /* DGActivityIndicatorCookieTerminatorAnimation.h */, + AC24CC61265DA9CCB626B3E6677FE892 /* DGActivityIndicatorCookieTerminatorAnimation.m */, + E078B715EA674E13B26FB2FCC5A072BD /* DGActivityIndicatorDoubleBounceAnimation.h */, + 8C3CBF34D7AB5A63464D2968901D5D88 /* DGActivityIndicatorDoubleBounceAnimation.m */, + DD14738C6B77C0B2B2ABB957A39B19BF /* DGActivityIndicatorFiveDotsAnimation.h */, + 6E8DC91B05F6658A558C8C99D0B3349F /* DGActivityIndicatorFiveDotsAnimation.m */, + D7B2890298DB765B6F9E30965A8F4CB2 /* DGActivityIndicatorLineScaleAnimation.h */, + 3A921A92DADD3F428BEDDC7C6D546C8D /* DGActivityIndicatorLineScaleAnimation.m */, + 9DE84474D5129A2B209499663474E7B6 /* DGActivityIndicatorLineScalePartyAnimation.h */, + B60C4D8B577F0FBBC44267D4463082C2 /* DGActivityIndicatorLineScalePartyAnimation.m */, + DDF3CCE9146E25A842E8665C96D556C3 /* DGActivityIndicatorLineScalePulseOutAnimation.h */, + CDB0C1F86A601FAA57DC356A35E53A0C /* DGActivityIndicatorLineScalePulseOutAnimation.m */, + 0A7C6EBB538B88A74E6880B457D0C574 /* DGActivityIndicatorLineScalePulseOutRapidAnimation.h */, + 6D5F652102EE76239FD9DA73FE75418C /* DGActivityIndicatorLineScalePulseOutRapidAnimation.m */, + 4B056E408F75D61C8183DA2B245156CC /* DGActivityIndicatorNineDotsAnimation.h */, + 3EA2A47777F6739B2B470B5207A09637 /* DGActivityIndicatorNineDotsAnimation.m */, + 0137732B346BD1F820CE861483EBA4A8 /* DGActivityIndicatorRotatingSandglassAnimation.h */, + C0711DB77BA304BD6910D12F28E5F892 /* DGActivityIndicatorRotatingSandglassAnimation.m */, + E82BF6614529AD45CDDA91FA4CECC65E /* DGActivityIndicatorRotatingSquaresAnimation.h */, + 63A6E4540D786D2B8D247AC3472CA19B /* DGActivityIndicatorRotatingSquaresAnimation.m */, + 92953EBFCE0589BD75174229B79C00E3 /* DGActivityIndicatorRotatingTrigonAnimation.h */, + 0198C5993492AA3EF6F40B5BD04CBFB8 /* DGActivityIndicatorRotatingTrigonAnimation.m */, + 377AEA6F7610CA0D7E436BD74B5A9255 /* DGActivityIndicatorThreeDotsAnimation.h */, + AC5567FA3EE4586D4B42422B43830F54 /* DGActivityIndicatorThreeDotsAnimation.m */, + E777358E38AFE8E510F10B8DEA46F7FC /* DGActivityIndicatorTriangleSkewSpinAnimation.h */, + 238E9D8D5B0EAFF1C400C579134EBC7B /* DGActivityIndicatorTriangleSkewSpinAnimation.m */, + 413607BAF712422432DBAF0B48D4961C /* DGActivityIndicatorTriplePulseAnimation.h */, + 90176BD845094FA5B80755B4160B997F /* DGActivityIndicatorTriplePulseAnimation.m */, + F72B8583F161538EE39E8C877BD3807E /* DGActivityIndicatorTripleRingsAnimation.h */, + A2432AA6D4EC0BEA306AD1697A788079 /* DGActivityIndicatorTripleRingsAnimation.m */, + 5018367D2EC3CE9EA99DD3891488E5D9 /* DGActivityIndicatorTwoDotsAnimation.h */, + 2ED07AE2DF7B55B6FC518A5B802518B9 /* DGActivityIndicatorTwoDotsAnimation.m */, + 58BD53DBD5B68A85C61220B4F37AC981 /* DGActivityIndicatorView.h */, + A44680CD3E6D054D9D98424787089D2C /* DGActivityIndicatorView.m */, + F308FF72A6465A34966A7B0CC97D19D3 /* Support Files */, + ); + name = DGActivityIndicatorView; + path = DGActivityIndicatorView; + sourceTree = ""; + }; + B26B2E823E1181AEB51CCE69308BCA17 /* Core */ = { + isa = PBXGroup; + children = ( + F0F23811297E8DAE2C693B7330A18292 /* FBSnapshotTestCase.h */, + 6D79C1450ABF18B9FACD1D09B3F25B70 /* FBSnapshotTestCase.m */, + 52F4856EC3DB0B6DFE3048EA40E34AFF /* FBSnapshotTestCasePlatform.h */, + B101D9E07BA927ED510FE57505BE9706 /* FBSnapshotTestCasePlatform.m */, + 6511D4FCAAFCAF5F889190FFDC43545A /* FBSnapshotTestController.h */, + 287979869D8C3B19ADA5D41E4AD4C381 /* FBSnapshotTestController.m */, + E3755B329118E995A24A2473A8EC91C0 /* UIApplication+StrictKeyWindow.h */, + 5E61D53B581AD78E96FE48B9B710B030 /* UIApplication+StrictKeyWindow.m */, + A7D7B4997104B4C9DA1D9DB08A7EFDDF /* UIImage+Compare.h */, + 52FCCBF89D83F65DA4CEC1B51BF16AFE /* UIImage+Compare.m */, + FB32FA05195E6BE1334FAEF3FFDD4E30 /* UIImage+Diff.h */, + CEEDD713872289DF0CE78A7D9F4E35FE /* UIImage+Diff.m */, + 8426A7AE3F1A954B70A50BEDF3CC2C85 /* UIImage+Snapshot.h */, + 8EE7515614472F7D1DA2AFB8FCB8B513 /* UIImage+Snapshot.m */, + ); + name = Core; + sourceTree = ""; + }; + BBAB624F3B14C79332840569EFDF15F8 /* ResizeTool */ = { + isa = PBXGroup; + children = ( + 2395E0400EE4CE23BF5E632EDEF84CFB /* CLResizeTool.h */, + 5178E203C17975145D60CC7A1049F6B8 /* CLResizeTool.m */, + ); + name = ResizeTool; + sourceTree = ""; + }; + C227DC43AF9F6B5AF24AB735BF899831 /* Support Files */ = { + isa = PBXGroup; + children = ( + 8F2B0970FB87319B16DDA18C6CC74785 /* Expecta+Snapshots.xcconfig */, + D2ABBB4CC5B354DF4CF54C437F0184C4 /* Expecta+Snapshots-dummy.m */, + 9AA009B2C02A39829E14FB009467EE13 /* Expecta+Snapshots-prefix.pch */, + ); + name = "Support Files"; + path = "../Target Support Files/Expecta+Snapshots"; + sourceTree = ""; + }; + C4E59DD12CC7FAFF2AD33D7803C7FAF1 /* Specta */ = { + isa = PBXGroup; + children = ( + 4EAE8B75F4A3738527DCDE0990FCB1A8 /* Specta.h */, + 5B3D30B97D48C65172549D829F9E7886 /* SpectaDSL.h */, + 38659EF7BEFE1636B4312C4BAB9256DD /* SpectaDSL.m */, + 02391CE84BAADBC23043CBC7122EA5F0 /* SpectaTypes.h */, + CFB5ECDC557ACE506A8D437416CB2429 /* SpectaUtility.h */, + A16E37AD1F0511F083ADCB708C46DA1B /* SpectaUtility.m */, + AE53BE2F4CA712777D2C9E4DED28AF80 /* SPTCallSite.h */, + C54D448DE0718FF6643247D95D86A7DE /* SPTCallSite.m */, + E79558241A0D3DC4DB49B6FEBFD991CC /* SPTCompiledExample.h */, + 86F3CFC4CCD398B2222B0775536C0C71 /* SPTCompiledExample.m */, + 4C34FA2FB9974AE2E93275C491EBC329 /* SPTExample.h */, + 4A0936B3D25DB8FB1E210C4597B21D76 /* SPTExample.m */, + BE773F15A1A9C2C4F456F860360D6C70 /* SPTExampleGroup.h */, + 467E8BF6B8440EAC10D35FFBA13BD008 /* SPTExampleGroup.m */, + D0B46660DBCE36D3B4F6BDA5A97F51B8 /* SPTExcludeGlobalBeforeAfterEach.h */, + 0A8A9D90CEA18D79C07FBE70410FAA58 /* SPTGlobalBeforeAfterEach.h */, + 079383233F814C53417D899EF44F3E0E /* SPTSharedExampleGroups.h */, + 1607D6A502380169DB869165C8781ADF /* SPTSharedExampleGroups.m */, + C14779D3F8BC70BF5714331574CE44BA /* SPTSpec.h */, + 470322E06DD432C0E4078A0EBE64E738 /* SPTSpec.m */, + 64A0107C28C2C93E1C5E2C6579B5785A /* SPTTestSuite.h */, + C471AA6E10291AA9DBECC6BE191AD31B /* SPTTestSuite.m */, + 34CF5E05E97E55ABDE153F8B69575A1A /* XCTest+Private.h */, + DACDBF8ADBD30F9EA4997180B224AA36 /* XCTestCase+Specta.h */, + 28EC635DBC4EC7BD19B04E7D18F43DD1 /* XCTestCase+Specta.m */, + 8F900505041FE1E8FFB00A7CD5CE8BA1 /* Support Files */, + ); + name = Specta; + path = Specta; + sourceTree = ""; + }; + C8121E82D99A0B3DE23FCF2219ED2E6A /* CLImageEditor */ = { + isa = PBXGroup; + children = ( + 77E8BCAC69409C1FD65760BE290BB5CB /* Core */, + 6C5DB811A4620C0F7F4F25700B98D4F5 /* EmoticonTool */, + BBAB624F3B14C79332840569EFDF15F8 /* ResizeTool */, + E62619CE55BC9B204F49AC2827EC3EEC /* SplashTool */, + 598A7A28B23806B4EE905FD7FB23DD27 /* StickerTool */, + 0D46A812196ACA85953B3B07C9FD4A0C /* Support Files */, + 1ED72FD8CE179444C1839B7CA59C38E9 /* TextTool */, + ); + name = CLImageEditor; + path = CLImageEditor; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { @@ -1016,22 +1434,12 @@ 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 623101AA97FCFF51DA1E83576BEAD705 /* Development Pods */, D89477F20FB1DE18A04690586D7808C4 /* Frameworks */, - 4C84B4290E732A20EC82414D4F01E988 /* Pods */, - C06EF9F4AB1D6EADA846B13F8FD72514 /* Products */, - 0C4CD26FEC77AE7C52823AB9D939A89D /* Targets Support Files */, + 1A1C5E0666DB335C73A3E108325A00C7 /* Pods */, + 0E369556B2DB3C30909FF63BBA2BFCCE /* Products */, + F33EC8FA4E70C7AE6460BF2434904AAE /* Targets Support Files */, ); sourceTree = ""; }; - D665144637527B7513484BD01690BFAE /* FBSnapshotTestCase */ = { - isa = PBXGroup; - children = ( - 479447B095BEF2A7F322A413B78FD601 /* Core */, - BF92EFFAF41982309D3B99C26E6C9E41 /* Support Files */, - ); - name = FBSnapshotTestCase; - path = FBSnapshotTestCase; - sourceTree = ""; - }; D73E8808085BE98AB520C081D7084A64 /* Pod */ = { isa = PBXGroup; children = ( @@ -1049,60 +1457,33 @@ name = Frameworks; sourceTree = ""; }; - E5EEB1324B84C594EAE57AB6E9DB3C44 /* Support Files */ = { + E62619CE55BC9B204F49AC2827EC3EEC /* SplashTool */ = { isa = PBXGroup; children = ( - F78A56FA1663821E3B729346A31D11E7 /* PureLayout.xcconfig */, - 9405B80774B52E7F63F79E305C0E1B6D /* PureLayout-dummy.m */, - 65E422734AE5C96CA2C536045219E0ED /* PureLayout-prefix.pch */, + 6E7A06B53A03B1AAC348D7184F3F2283 /* CLSplashTool.h */, + 202F3AA6B86B0D1FD4180CF8EAE86702 /* CLSplashTool.m */, ); - name = "Support Files"; - path = "../Target Support Files/PureLayout"; + name = SplashTool; sourceTree = ""; }; - EA63369340335E34849FEB05CA628F72 /* Specta */ = { + F308FF72A6465A34966A7B0CC97D19D3 /* Support Files */ = { isa = PBXGroup; children = ( - 2ACDC414CD8D02F1CD1C7F6A45DBDEB6 /* Specta.h */, - F5A92B987F5614CCA4ABCAAF36F7B7BB /* SpectaDSL.h */, - 11F5321913FE795A88F3C15A0E4804FE /* SpectaDSL.m */, - 47D5461A0482ACCE07AB5C6A4432722A /* SpectaTypes.h */, - 44342D65C652BFEE364AA3618727EA53 /* SpectaUtility.h */, - 6A1245ACF63C01A89B6C833478A3754A /* SpectaUtility.m */, - 9EA9DEEE31D71ADE5316274427501DFA /* SPTCallSite.h */, - 4FA70EFF180FC1428130AFED3E0644ED /* SPTCallSite.m */, - 6C437140653DEEB438731F2F5EC68707 /* SPTCompiledExample.h */, - D1138C8D47C1A4DFA2388E211621D193 /* SPTCompiledExample.m */, - B2672ADBFEB22938D2F91C5FEF78478B /* SPTExample.h */, - 3CB1AC9638BEE4A7F0BB1D4803C22396 /* SPTExample.m */, - E8A75F4242E289782C970422FCC33D30 /* SPTExampleGroup.h */, - E6FF11399A79E70C1A1DC2325DE93734 /* SPTExampleGroup.m */, - F7FFB8D223B0E1989708F0B39CF317F3 /* SPTExcludeGlobalBeforeAfterEach.h */, - 20AC5714C1010B8B3F085AEAD0D53DE8 /* SPTGlobalBeforeAfterEach.h */, - 1254B4CBF3BC43A4AA14130C9D994552 /* SPTSharedExampleGroups.h */, - E0F3260E26F55C1FB0CC3EA9EEE00A78 /* SPTSharedExampleGroups.m */, - 5A4EFB81AEAAA8CB7DF710CD30A47FE1 /* SPTSpec.h */, - 3E55C7C509ADC9496A00C582F1054DDF /* SPTSpec.m */, - 07FD6F4D0A9DDB89C41C1056507591FB /* SPTTestSuite.h */, - B62BCAB6786FC92CF3515157811AF7CB /* SPTTestSuite.m */, - A0EA618ABA1FEFE300B2C8912EAD2880 /* XCTest+Private.h */, - D9AF3C7412855FEC35496E5C1F6946DA /* XCTestCase+Specta.h */, - 0735607C9210AD484C6B809578F3DA9F /* XCTestCase+Specta.m */, - 4ADE1B8A7CCEF3C091AD2C45373FF463 /* Support Files */, - ); - name = Specta; - path = Specta; - sourceTree = ""; - }; - FCA221450D3AB016D76F982B0C5C2359 /* Support Files */ = { - isa = PBXGroup; - children = ( - E0C56FBF5CDF85B7F9F029D50FCD1193 /* Expecta+Snapshots.xcconfig */, - 6E417D5C6DF24AC4524F9CE87642ED85 /* Expecta+Snapshots-dummy.m */, - 0C5C43F0FF7E6E3D02794151C9B4EBC5 /* Expecta+Snapshots-prefix.pch */, + 922382F5DFD953122E9240B15F3AD03B /* DGActivityIndicatorView.xcconfig */, + 807D7BDCF1C13D72AA31648880964FA7 /* DGActivityIndicatorView-dummy.m */, + EEC75972270FCCA49DDA7585648E2224 /* DGActivityIndicatorView-prefix.pch */, ); name = "Support Files"; - path = "../Target Support Files/Expecta+Snapshots"; + path = "../Target Support Files/DGActivityIndicatorView"; + sourceTree = ""; + }; + F33EC8FA4E70C7AE6460BF2434904AAE /* Targets Support Files */ = { + isa = PBXGroup; + children = ( + 9432A165BED7319A9624F8749C158EA7 /* Pods-PNImagePickerViewController_Example */, + 85938B5F5E053D9CD2ED03A870EBC758 /* Pods-PNImagePickerViewController_Tests */, + ); + name = "Targets Support Files"; sourceTree = ""; }; /* End PBXGroup section */ @@ -1122,36 +1503,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 2F89B3C5BB0023DDE6EC7B0C9EF2F245 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 3B7B130C746084034B068D1161998C78 /* NSString+HexColor.h in Headers */, - 64944DDD778FD0A450BB2A16BB75807E /* PNCollectionViewCell.h in Headers */, - 2F329D973FA7238383FF5468D1E1D978 /* PNImagePickerViewController.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 4B7E03B0A9377E558D68D4D13C39BD01 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 505B2A2906CAEEB7BC739C612FB19886 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - A39F7144EBB2E7A25F077D6DF19C8FBB /* ALView+PureLayout.h in Headers */, - BED913166CB3BA83A2A40EFD7443FEA9 /* NSArray+PureLayout.h in Headers */, - 9A07800C82BD27AA95F92F5C64A0D8D9 /* NSLayoutConstraint+PureLayout.h in Headers */, - D1E6D4FE575333F502B2C4A777FBD6F1 /* PureLayout+Internal.h in Headers */, - D098A602C7372879DBD37B0386841FD9 /* PureLayout.h in Headers */, - 00C7A118E2009066833E66AC0214E0E7 /* PureLayoutDefines.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 532BD69C8F456BA4E11E54C362503546 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1195,6 +1546,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 838D22C0F769D2E52976D2FFBC8564E4 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 8C52FC8A3EC69026F9EB153F80F57475 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; @@ -1204,10 +1562,13 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 97D49B8C14DD6ED152DA169AE66FC155 /* Headers */ = { + 8E4496011D9D17923763F10E2FCFFD1F /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 04E846CF358070C5AA71DF8D31F26E54 /* NSString+HexColor.h in Headers */, + 57313253F158E282404FE2FEB616885B /* PNCollectionViewCell.h in Headers */, + 1895CC17C64B718D1511C03E7DA1AB2E /* PNImagePickerViewController.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1279,6 +1640,78 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + D6BF287514DE5DE3C696001E5EDB6B94 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DA132ED8D16E070FFB6908E8E122011B /* _CLImageEditorViewController.h in Headers */, + E7AB5F476A5058580A0A7D4C77E94CD2 /* CLAdjustmentTool.h in Headers */, + B4C8F77057C7217E84DBD51B79A9B6DB /* CLBloomEffect.h in Headers */, + 048DA29BB34827EA7D04BD4A782EACF0 /* CLBlurTool.h in Headers */, + 4F30B46C05B9CB353107358582E3F4F3 /* CLCircleView.h in Headers */, + 813B8313368F3AD21E07DEA525DB8741 /* CLClassList.h in Headers */, + 63CDBBDA223F06E37A66BE5715D3399E /* CLClippingTool.h in Headers */, + 59F74C5A20254EE4CC03E35DE786BA47 /* CLColorPickerView.h in Headers */, + 9796E792438DCA2F899AAB821E1D19EA /* CLDrawTool.h in Headers */, + 7CF775ADF2952A3AEC382FECE95DB4BD /* CLEffectBase.h in Headers */, + 4905230A27F686915A04B6A1FE25E91E /* CLEffectTool.h in Headers */, + 31A9BD3FAC0DE284BD77D0A39F50C54D /* CLEmoticonTool.h in Headers */, + 29A4095610EC7DC26E6323D33948445C /* CLFilterBase.h in Headers */, + 9A3574E5EE4BAAA210A0C6E25A5E67B3 /* CLFilterTool.h in Headers */, + 45296A993068CAF03962072EA350EBBB /* CLFontPickerView.h in Headers */, + 327A9D75514418F28F838BF0961D1E42 /* CLGloomEffect.h in Headers */, + 5F58BE295B439AE293AE300CAA08C623 /* CLHighlightShadowEffect.h in Headers */, + 0B0E3471BF50D94CF2BB69A165EF0A9C /* CLHueEffect.h in Headers */, + 6D84F6FEC9FE0CFDA7C60064420C841F /* CLImageEditor.h in Headers */, + 4E8DEE1BE9AD755F3F20258D60929CDC /* CLImageEditorTheme+Private.h in Headers */, + 8696D5E7D3E9083CE72DDA7D02868EF2 /* CLImageEditorTheme.h in Headers */, + 60CECE85274E23DB88339FFBB894E09E /* CLImageToolBase.h in Headers */, + 36AE54D079A1489A9E693C7CA2E73DDE /* CLImageToolInfo+Private.h in Headers */, + 3CF7A95B5CD898F95274BF0913A1FBE5 /* CLImageToolInfo.h in Headers */, + F32EA9D1BC88C1DBB86BDE441008B6DA /* CLImageToolProtocol.h in Headers */, + 5D8761CA7A85DC70AA91E03BFB2E97B3 /* CLImageToolSettings.h in Headers */, + A0EF7376F1362787C16B90C5FF899586 /* CLPickerDrum.h in Headers */, + AD6EB97D7A7C32F1FCAEB83586125CF6 /* CLPickerView.h in Headers */, + 4275CC9B13BD59049F977DF0488619E3 /* CLPixellateEffect.h in Headers */, + 336BA6CBE9719C93B761679BBA823809 /* CLPosterizeEffect.h in Headers */, + 94700CA476F0DAA844A6080ED1CD6CFB /* CLResizeTool.h in Headers */, + 752A471B21B20EB65318DCB8482BA936 /* CLRotateTool.h in Headers */, + A5028DC2BAFFC6C4A669E3F0D1C10E34 /* CLSplashTool.h in Headers */, + 62E36E05E578A8C04944DA47A360D7A8 /* CLSplineInterpolator.h in Headers */, + 5DCAA85A0454D2C5E4AF8C27D53A4937 /* CLSpotEffect.h in Headers */, + 12571912A3803C7C82758E058DDA5139 /* CLStickerTool.h in Headers */, + 0EF4B9FB8BE45EECD1EB41FA33079878 /* CLTextLabel.h in Headers */, + 87F076C17C5D88092789219ECCD74D6F /* CLTextSettingView.h in Headers */, + 7C2A24D4CC2CB4B60FD471F2C6E9AF02 /* CLTextTool.h in Headers */, + BF798886AEAEEBF9DA22FFBA2E2535F4 /* CLToneCurveTool.h in Headers */, + BB39687FFC5BECD547971759FA75BA36 /* CLToolbarMenuItem.h in Headers */, + 2A73E6C7559F8CF9ADC25947AE0C480A /* UIDevice+SystemVersion.h in Headers */, + 4ABF8FC65E759FD6C9486681B11358A3 /* UIImage+Utility.h in Headers */, + 86D621D02BC005F9AC73FD78D13EA75A /* UIView+CLImageToolInfo.h in Headers */, + 4D939F77A07A87CE3BAA6167D511F070 /* UIView+Frame.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E532AA0E6906E2F29D33D05BF01C2066 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DCBD49C22876A9157D2598BDA82C2E52 /* ALView+PureLayout.h in Headers */, + C753F1F1CA75C277473C1A5F858F471B /* NSArray+PureLayout.h in Headers */, + B32121405276F6C8D93E6DAE71A09972 /* NSLayoutConstraint+PureLayout.h in Headers */, + F80E657D6327865E053C609656BAA3BB /* PureLayout+Internal.h in Headers */, + E15EA1A544FB7BA34C34F45FC6761997 /* PureLayout.h in Headers */, + 7CE46F821D7694C1EB1D8DFA50967AF3 /* PureLayoutDefines.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F7E079574213D8AC2979961F3B6F0AA0 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -1299,68 +1732,32 @@ ); name = "Expecta+Snapshots"; productName = "Expecta+Snapshots"; - productReference = AB1C242792F17FE04FC406467160C69F /* libExpecta+Snapshots.a */; + productReference = CB6C88770592088B5F9F11F3339EB2F4 /* libExpecta+Snapshots.a */; productType = "com.apple.product-type.library.static"; }; - 36C61F8732974DAADDA72AF6A0AEE0CB /* Pods-PNImagePickerViewController_Tests */ = { + 68C2C5B91A202C91BB264507D1038E6C /* Pods-PNImagePickerViewController_Tests */ = { isa = PBXNativeTarget; - buildConfigurationList = D6D70A241462F797F77F66C9EA3A1C32 /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Tests" */; + buildConfigurationList = 8F437CC2E35A24F5E88A82451579D12C /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Tests" */; buildPhases = ( - 97D49B8C14DD6ED152DA169AE66FC155 /* Headers */, - 0144FFC79A0821248C58AC2EBAD76664 /* Sources */, - 027A764A354E980459F52FE6AB8C0F7F /* Frameworks */, + F7E079574213D8AC2979961F3B6F0AA0 /* Headers */, + F1E2CA71C5F9B4C1B22A4DF268736BA1 /* Sources */, + 26FAC697B44885CE7F68B8FE89277E87 /* Frameworks */, ); buildRules = ( ); dependencies = ( - D9C2EB23CCC2078B3426E39CBDE17A86 /* PBXTargetDependency */, - C5173F1B6B6C6574464F7A3A928A97F9 /* PBXTargetDependency */, - F2305D4CC939543CDD13F9BF6992EBF9 /* PBXTargetDependency */, - 86B3256A93DFB81E176FCD9D4A70332A /* PBXTargetDependency */, - 69929B2EC8279B8EFAC783343678FB1A /* PBXTargetDependency */, - 4C29DCC47A2A368E73A369E0E3C0FB8A /* PBXTargetDependency */, - CFA0EE680BFE9DAF2E299E3F27F5F46C /* PBXTargetDependency */, + 20AC273C1CCEF96DA788A0C199F8073A /* PBXTargetDependency */, + 37143BF20D11FD130228DD340136684F /* PBXTargetDependency */, + 779D51C46D8835DFB64422D8C1A17956 /* PBXTargetDependency */, + AF640D537011ED71B24BFB275066E8DB /* PBXTargetDependency */, + EAD1ADA470E5DBD3ED551A72FF835619 /* PBXTargetDependency */, + 0375CE7437D343BBDCBC063BEAF70C26 /* PBXTargetDependency */, + D4FDBC7FB5FE20392AE34A331D6391DD /* PBXTargetDependency */, + D2DEB417A39F5B67B6DCB4665689C6CC /* PBXTargetDependency */, ); name = "Pods-PNImagePickerViewController_Tests"; productName = "Pods-PNImagePickerViewController_Tests"; - productReference = 457F5A8ED48B68CA96D7DA28A0DFB99E /* libPods-PNImagePickerViewController_Tests.a */; - productType = "com.apple.product-type.library.static"; - }; - 3C20716BF09D52CA4D6A13B41301831E /* Pods-PNImagePickerViewController_Example */ = { - isa = PBXNativeTarget; - buildConfigurationList = 84E97E6C023022F89720491CD3CF6020 /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Example" */; - buildPhases = ( - 4B7E03B0A9377E558D68D4D13C39BD01 /* Headers */, - 2C8E79730B8D4CF6987C42D9998D07D1 /* Sources */, - 7497B5BF65F8AD06010BF31284F2BD70 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - 988F9AE63A65962DAA80CCB1165E5E41 /* PBXTargetDependency */, - 17EBC2CF5929FA57B8C6509EF35C5FDA /* PBXTargetDependency */, - D18150397EF79C0C0A380B3600FEE503 /* PBXTargetDependency */, - ); - name = "Pods-PNImagePickerViewController_Example"; - productName = "Pods-PNImagePickerViewController_Example"; - productReference = 3715C965FB0AE977C8CB14B50B5A377E /* libPods-PNImagePickerViewController_Example.a */; - productType = "com.apple.product-type.library.static"; - }; - 5089EEAF8DD991A0A25FF85B1C893293 /* PureLayout */ = { - isa = PBXNativeTarget; - buildConfigurationList = AA8FAC119350FF447B7BDED27290875F /* Build configuration list for PBXNativeTarget "PureLayout" */; - buildPhases = ( - 505B2A2906CAEEB7BC739C612FB19886 /* Headers */, - D3CE4D7668DC9E6B7407F4ED4CD4FC65 /* Sources */, - C246278EA893A8F76EF2E319C8E0766C /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = PureLayout; - productName = PureLayout; - productReference = 146931ABEC2A21E93DD406F60D9988B3 /* libPureLayout.a */; + productReference = A93B96B32644DE5554738638C8BDF48D /* libPods-PNImagePickerViewController_Tests.a */; productType = "com.apple.product-type.library.static"; }; 7C5E09F14C77A34CDDBE3B135E42F0A5 /* FBSnapshotTestCase */ = { @@ -1377,26 +1774,27 @@ ); name = FBSnapshotTestCase; productName = FBSnapshotTestCase; - productReference = 62FAD1139FE57B2854585CEB80C743B9 /* libFBSnapshotTestCase.a */; + productReference = C63AB2F5F01BD95AFE85FE06DADA0E12 /* libFBSnapshotTestCase.a */; productType = "com.apple.product-type.library.static"; }; - 7CBB10AF4B08239BA0363FE1240EEAEA /* PNImagePickerViewController */ = { + 8620FA4E4760D950B62AECE570F385FF /* PNImagePickerViewController */ = { isa = PBXNativeTarget; - buildConfigurationList = C7E38FC36B3914CE1A5A7AA95DBB4701 /* Build configuration list for PBXNativeTarget "PNImagePickerViewController" */; + buildConfigurationList = 0A022A13C0188C2659CF45451404F609 /* Build configuration list for PBXNativeTarget "PNImagePickerViewController" */; buildPhases = ( - 2F89B3C5BB0023DDE6EC7B0C9EF2F245 /* Headers */, - 6F03D3AEE07783496FFFA7678517D127 /* Sources */, - A767C0B827912500EE8B348933A9681E /* Frameworks */, + 8E4496011D9D17923763F10E2FCFFD1F /* Headers */, + 6AE17334F5B31BB4871A6253D13DB3A8 /* Sources */, + 6DD3A347B5F592481B9985F80BBCC899 /* Frameworks */, ); buildRules = ( ); dependencies = ( - 31B45546D09C7732899AFACF5675DDAA /* PBXTargetDependency */, - 660EFD89A5480827E2B854671B8556EC /* PBXTargetDependency */, + 0F8D00DB0FF02E42BC1609D3E14BFF82 /* PBXTargetDependency */, + EE8A79520E08D00BDE8EE07524430872 /* PBXTargetDependency */, + 17CE348953A8E2E56A0557C2CBA24053 /* PBXTargetDependency */, ); name = PNImagePickerViewController; productName = PNImagePickerViewController; - productReference = CFF1D95B9CB69CC0C8A003255887B864 /* libPNImagePickerViewController.a */; + productReference = 1BF69C957475843F38DA2D54D61812FD /* libPNImagePickerViewController.a */; productType = "com.apple.product-type.library.static"; }; 9C59561051F1403A293E0B943DB4E71F /* Expecta */ = { @@ -1413,7 +1811,7 @@ ); name = Expecta; productName = Expecta; - productReference = 8F551D8377A64B4D1C29B251C43C1B52 /* libExpecta.a */; + productReference = 88A1A56FC7B637942215FBD46FAA72F1 /* libExpecta.a */; productType = "com.apple.product-type.library.static"; }; A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */ = { @@ -1430,7 +1828,7 @@ ); name = DGActivityIndicatorView; productName = DGActivityIndicatorView; - productReference = 537A0DC1392B02762BC4844F210E00AD /* libDGActivityIndicatorView.a */; + productReference = 8B1DF3AA48602242D1957DED664F6165 /* libDGActivityIndicatorView.a */; productType = "com.apple.product-type.library.static"; }; C0139FF721A043F8132011DB99D22114 /* Specta */ = { @@ -1447,7 +1845,62 @@ ); name = Specta; productName = Specta; - productReference = EDA4A2B3B114188422B10D28F81B226A /* libSpecta.a */; + productReference = 319EB9863A0D72FD4EFA7B1A031B81AA /* libSpecta.a */; + productType = "com.apple.product-type.library.static"; + }; + CB2883F6F8461C2BDD61E0BA2A1728FA /* CLImageEditor */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7A4BBFFEA731855828813D2727D87740 /* Build configuration list for PBXNativeTarget "CLImageEditor" */; + buildPhases = ( + D6BF287514DE5DE3C696001E5EDB6B94 /* Headers */, + BE80D0001586D923E795A4EE1F4527AC /* Sources */, + 4BE39E613006B7A9797EDF29D0CC8D46 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = CLImageEditor; + productName = CLImageEditor; + productReference = FD899D37593889596B2C128AD17BB481 /* libCLImageEditor.a */; + productType = "com.apple.product-type.library.static"; + }; + DC6FB698E27041FDE837C952A3C0849B /* Pods-PNImagePickerViewController_Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F82521CD465F26A27BCB392804CA698E /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Example" */; + buildPhases = ( + 838D22C0F769D2E52976D2FFBC8564E4 /* Headers */, + 77B0881B16880B8851ED86A38B359F7D /* Sources */, + 8C7F6FEC9CBAC9ACD0F19A5EADCA0536 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + A0946EFE71A4D7695F7D67EA6D0BE0F3 /* PBXTargetDependency */, + 6ED3F970263D6630C0AB76B7588855EF /* PBXTargetDependency */, + 5699C302D41FEB11B7E88EE6FFACDF10 /* PBXTargetDependency */, + 98EC1CC90DC2F0DBE1DF8EB6DBA755B0 /* PBXTargetDependency */, + ); + name = "Pods-PNImagePickerViewController_Example"; + productName = "Pods-PNImagePickerViewController_Example"; + productReference = 07A458A20D9A15CB671325CEDC301DF5 /* libPods-PNImagePickerViewController_Example.a */; + productType = "com.apple.product-type.library.static"; + }; + FC4407CD05467A90650F0588CF53A16F /* PureLayout */ = { + isa = PBXNativeTarget; + buildConfigurationList = 21CA06BD534009872922F63590C80C30 /* Build configuration list for PBXNativeTarget "PureLayout" */; + buildPhases = ( + E532AA0E6906E2F29D33D05BF01C2066 /* Headers */, + 585B39763B6ADAD2B7A4396A9BD47982 /* Sources */, + 2E6AE886A53581B0B7CFD5CC1FA9FBEA /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = PureLayout; + productName = PureLayout; + productReference = A2F779887CE15D223B10592B7D5B97A5 /* libPureLayout.a */; productType = "com.apple.product-type.library.static"; }; /* End PBXNativeTarget section */ @@ -1467,40 +1920,25 @@ en, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; - productRefGroup = C06EF9F4AB1D6EADA846B13F8FD72514 /* Products */; + productRefGroup = 0E369556B2DB3C30909FF63BBA2BFCCE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( + CB2883F6F8461C2BDD61E0BA2A1728FA /* CLImageEditor */, A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */, 9C59561051F1403A293E0B943DB4E71F /* Expecta */, 0D6EC326E1174CBD1052C8A16C109576 /* Expecta+Snapshots */, 7C5E09F14C77A34CDDBE3B135E42F0A5 /* FBSnapshotTestCase */, - 7CBB10AF4B08239BA0363FE1240EEAEA /* PNImagePickerViewController */, - 3C20716BF09D52CA4D6A13B41301831E /* Pods-PNImagePickerViewController_Example */, - 36C61F8732974DAADDA72AF6A0AEE0CB /* Pods-PNImagePickerViewController_Tests */, - 5089EEAF8DD991A0A25FF85B1C893293 /* PureLayout */, + 8620FA4E4760D950B62AECE570F385FF /* PNImagePickerViewController */, + DC6FB698E27041FDE837C952A3C0849B /* Pods-PNImagePickerViewController_Example */, + 68C2C5B91A202C91BB264507D1038E6C /* Pods-PNImagePickerViewController_Tests */, + FC4407CD05467A90650F0588CF53A16F /* PureLayout */, C0139FF721A043F8132011DB99D22114 /* Specta */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 0144FFC79A0821248C58AC2EBAD76664 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 86F15087CAB1E3329958ED6E5D5AA6F6 /* Pods-PNImagePickerViewController_Tests-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2C8E79730B8D4CF6987C42D9998D07D1 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 3FE6B4A7835A59EBBA77FCBAD0FD7868 /* Pods-PNImagePickerViewController_Example-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; 41F36EA98D58AA8F247B1B237E23D289 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1571,14 +2009,25 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6F03D3AEE07783496FFFA7678517D127 /* Sources */ = { + 585B39763B6ADAD2B7A4396A9BD47982 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 728DEA58139FC1FE0AA6A6B82743974C /* NSString+HexColor.m in Sources */, - 90DC4427B8EA4546FC7A309226D414C5 /* PNCollectionViewCell.m in Sources */, - 427418E691958DFAA35164CB1D4C7947 /* PNImagePickerViewController-dummy.m in Sources */, - 1733DD89268EB4AC274F3F6E69ECD83D /* PNImagePickerViewController.m in Sources */, + 2851196CD48734A9A80E22A88B2BD2D8 /* ALView+PureLayout.m in Sources */, + C091F797DC6970E4487BF8E53875E0A9 /* NSArray+PureLayout.m in Sources */, + ADEB9454AF4F1034BB694E32AA0240C3 /* NSLayoutConstraint+PureLayout.m in Sources */, + 3DCC48803F8ECB0F4E5D2CA6B73B16CC /* PureLayout-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6AE17334F5B31BB4871A6253D13DB3A8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 369C3E9FBA8238F55D1375CA9F38280D /* NSString+HexColor.m in Sources */, + 2702DFA974D36A4909CC1C39F3E640EF /* PNCollectionViewCell.m in Sources */, + 6DCFD7561DD936111DC32A27C47BD02B /* PNImagePickerViewController-dummy.m in Sources */, + 2C6D625E6162D4DF0ECC2FE5338F78C7 /* PNImagePickerViewController.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1625,14 +2074,70 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - D3CE4D7668DC9E6B7407F4ED4CD4FC65 /* Sources */ = { + 77B0881B16880B8851ED86A38B359F7D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E6BB5738024B2A6191623B14C85B7622 /* ALView+PureLayout.m in Sources */, - 95A32BB687CB2A964BCEF31421B63EA9 /* NSArray+PureLayout.m in Sources */, - B681483BFE6373308BC20BCA4B57E556 /* NSLayoutConstraint+PureLayout.m in Sources */, - A1E5DF8FF288877C4E57358D476D2E1E /* PureLayout-dummy.m in Sources */, + FCF20479A3948F9A189B1412F541BE8F /* Pods-PNImagePickerViewController_Example-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BE80D0001586D923E795A4EE1F4527AC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A1A5F083BC47E65F7520998CD6BD2F5 /* _CLImageEditorViewController.m in Sources */, + 8BBEF0BEA3F418FC09D01A5D0FFD299B /* CLAdjustmentTool.m in Sources */, + 69687305F424D2B9E960EBC3E21109DE /* CLBloomEffect.m in Sources */, + 7DAC8A07997F689FED1A3F11E09A065B /* CLBlurTool.m in Sources */, + 65893908F4F4D279DD7C04C9A9E77BAA /* CLCircleView.m in Sources */, + FB0BC7E80499DEE2E89A5EDE8010DD86 /* CLClassList.m in Sources */, + CFE24B4207C88A3F18891A646536982D /* CLClippingTool.m in Sources */, + CD1CC3F95B92A730F529A9D44558AD27 /* CLColorPickerView.m in Sources */, + F05F3A28AB2A96A0278ED7CC69DBA153 /* CLDrawTool.m in Sources */, + 276F389BAD32BCCE9FEC9116E18F3D56 /* CLEffectBase.m in Sources */, + A89A2584A04C370F909879341B1B3281 /* CLEffectTool.m in Sources */, + 79F34AE4E22F36303D12151C4307D30D /* CLEmoticonTool.m in Sources */, + 49AD05F0898FFDAAE370F2952D457726 /* CLFilterBase.m in Sources */, + 2AC28995656F775595E31AF17F5DAB55 /* CLFilterTool.m in Sources */, + 950C0711BBD4011101306033F6BC2DC5 /* CLFontPickerView.m in Sources */, + 98501F5FAD998C6E3982E969D805F7A4 /* CLGloomEffect.m in Sources */, + B247EBDEBB795F5E24E15A7810038D77 /* CLHighlightShadowEffect.m in Sources */, + 5D9C0245FE8B6C68CAFF219B4A83AECB /* CLHueEffect.m in Sources */, + 2A6859D2F54CA6924725606921E82E35 /* CLImageEditor-dummy.m in Sources */, + BC0F19555CEE819953448F8C41D67CC3 /* CLImageEditor.m in Sources */, + E66A2D4F953BA58A7D5EE2D5F280EA5F /* CLImageEditorTheme+Private.m in Sources */, + C85E94E48062E5D50B294C06771B2305 /* CLImageEditorTheme.m in Sources */, + 9B54F8625B69F02716168FC3D4DEFDA2 /* CLImageToolBase.m in Sources */, + CC0F62559E50AB49531D1CDDFF67FD7B /* CLImageToolInfo+Private.m in Sources */, + 4BEF7C22B1E31D5787D427E08AD4F0FD /* CLImageToolInfo.m in Sources */, + 1D5803680D9F742D06EEC77FA0411472 /* CLPickerDrum.m in Sources */, + 3771DF23947091210CB0F123814D2966 /* CLPickerView.m in Sources */, + 49EEC4B67E08459276BAC2723E377151 /* CLPixellateEffect.m in Sources */, + B1621C2B88133E96207D34D17B18DAF8 /* CLPosterizeEffect.m in Sources */, + E9DE6F51A09993C1E1D94A2405802E0F /* CLResizeTool.m in Sources */, + 1D0D77FBF03422DE800EEA9034C7C6EB /* CLRotateTool.m in Sources */, + 71CFE3DCF2E2A5A8FBD5F42F516B933C /* CLSplashTool.m in Sources */, + 9CA46D87D37CADF0EE049EBCF7081930 /* CLSplineInterpolator.m in Sources */, + 624E25D48BF1830D16075EC12B187609 /* CLSpotEffect.m in Sources */, + 188B96BE83AD23FE3753487F49CFB659 /* CLStickerTool.m in Sources */, + 2B4E9B5C24728522F976B953BC48F246 /* CLTextLabel.m in Sources */, + 1B84B2CC958180D4D81297B3DE2B9E1B /* CLTextSettingView.m in Sources */, + C4C38CEB092882B8D6237C82C5A32AF8 /* CLTextTool.m in Sources */, + 30944CEE6991E72532885F93DA3B42F1 /* CLToneCurveTool.m in Sources */, + 406C27D498FD55C59A819D90B75DCE9C /* CLToolbarMenuItem.m in Sources */, + 27E06DBCB00A1CC391187FFF2878D1A2 /* UIDevice+SystemVersion.m in Sources */, + 09BD3AD4DA5CB2BC9CAD807CED69B752 /* UIImage+Utility.m in Sources */, + 17828CDFCD8B745F3410E0679A1C436B /* UIView+CLImageToolInfo.m in Sources */, + 3EAF1061BB87AAFB38B29CAB628664C9 /* UIView+Frame.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F1E2CA71C5F9B4C1B22A4DF268736BA1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A54966A88D97C926897BB8A63A1B899D /* Pods-PNImagePickerViewController_Tests-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1654,23 +2159,41 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 0375CE7437D343BBDCBC063BEAF70C26 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PNImagePickerViewController; + target = 8620FA4E4760D950B62AECE570F385FF /* PNImagePickerViewController */; + targetProxy = 06E50FEEA1BBD341F012111A77C9AD82 /* PBXContainerItemProxy */; + }; 0DFE30EDE3B0C5F75B6F23C27B5F3D0A /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = FBSnapshotTestCase; target = 7C5E09F14C77A34CDDBE3B135E42F0A5 /* FBSnapshotTestCase */; targetProxy = 0D675C893C43BF9B2CF16E3DFB9B559B /* PBXContainerItemProxy */; }; - 17EBC2CF5929FA57B8C6509EF35C5FDA /* PBXTargetDependency */ = { + 0F8D00DB0FF02E42BC1609D3E14BFF82 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = PNImagePickerViewController; - target = 7CBB10AF4B08239BA0363FE1240EEAEA /* PNImagePickerViewController */; - targetProxy = FA318A12E182D5048FB009641C9906C2 /* PBXContainerItemProxy */; + name = CLImageEditor; + target = CB2883F6F8461C2BDD61E0BA2A1728FA /* CLImageEditor */; + targetProxy = 5C0B32BA20B461197D1D1A5D3DF23036 /* PBXContainerItemProxy */; }; - 31B45546D09C7732899AFACF5675DDAA /* PBXTargetDependency */ = { + 17CE348953A8E2E56A0557C2CBA24053 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PureLayout; + target = FC4407CD05467A90650F0588CF53A16F /* PureLayout */; + targetProxy = 0C87808A0864D6442613961BB3B4C966 /* PBXContainerItemProxy */; + }; + 20AC273C1CCEF96DA788A0C199F8073A /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = CLImageEditor; + target = CB2883F6F8461C2BDD61E0BA2A1728FA /* CLImageEditor */; + targetProxy = BE9C373042FEFA14D4002095A810F1D1 /* PBXContainerItemProxy */; + }; + 37143BF20D11FD130228DD340136684F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DGActivityIndicatorView; target = A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */; - targetProxy = 96C770FFF170913C631ECE42C5D1EC8C /* PBXContainerItemProxy */; + targetProxy = 31DDFC27AC995BDCD1B51789A6474D68 /* PBXContainerItemProxy */; }; 427890F2051C084AA9A8C94C59EE1ECF /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -1678,35 +2201,29 @@ target = 9C59561051F1403A293E0B943DB4E71F /* Expecta */; targetProxy = AB5E46A2666FD81EF932A7BA5EBEB48F /* PBXContainerItemProxy */; }; - 4C29DCC47A2A368E73A369E0E3C0FB8A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PureLayout; - target = 5089EEAF8DD991A0A25FF85B1C893293 /* PureLayout */; - targetProxy = EB45BEADFD2057E6279FA61CC5DF3D0A /* PBXContainerItemProxy */; - }; - 660EFD89A5480827E2B854671B8556EC /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PureLayout; - target = 5089EEAF8DD991A0A25FF85B1C893293 /* PureLayout */; - targetProxy = 0D4DEA010D2ACDB67C79B5D763371D4D /* PBXContainerItemProxy */; - }; - 69929B2EC8279B8EFAC783343678FB1A /* PBXTargetDependency */ = { + 5699C302D41FEB11B7E88EE6FFACDF10 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = PNImagePickerViewController; - target = 7CBB10AF4B08239BA0363FE1240EEAEA /* PNImagePickerViewController */; - targetProxy = 35D0B4436C6951B14E44E41AD8694E0C /* PBXContainerItemProxy */; + target = 8620FA4E4760D950B62AECE570F385FF /* PNImagePickerViewController */; + targetProxy = 83AC680987438B4ACAB463503C39F066 /* PBXContainerItemProxy */; }; - 86B3256A93DFB81E176FCD9D4A70332A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = FBSnapshotTestCase; - target = 7C5E09F14C77A34CDDBE3B135E42F0A5 /* FBSnapshotTestCase */; - targetProxy = 29C11130AE79891FA6F064CA60FCB6E5 /* PBXContainerItemProxy */; - }; - 988F9AE63A65962DAA80CCB1165E5E41 /* PBXTargetDependency */ = { + 6ED3F970263D6630C0AB76B7588855EF /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = DGActivityIndicatorView; target = A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */; - targetProxy = 2D0EE54079FE2E5CD5CC95B3D3BB7561 /* PBXContainerItemProxy */; + targetProxy = 0880495973453532CAC391605BA537D7 /* PBXContainerItemProxy */; + }; + 779D51C46D8835DFB64422D8C1A17956 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Expecta; + target = 9C59561051F1403A293E0B943DB4E71F /* Expecta */; + targetProxy = D263E71AF9D2C347017E5126F8EAB163 /* PBXContainerItemProxy */; + }; + 98EC1CC90DC2F0DBE1DF8EB6DBA755B0 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PureLayout; + target = FC4407CD05467A90650F0588CF53A16F /* PureLayout */; + targetProxy = 82D3CFB26A0AF5CD8733D8BFCEA9D297 /* PBXContainerItemProxy */; }; 9F4A4FD4C9537CD5BC75CFA35A4DCD85 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -1714,35 +2231,41 @@ target = C0139FF721A043F8132011DB99D22114 /* Specta */; targetProxy = 5C6334597CD2CC5B57F162A37BD8C90C /* PBXContainerItemProxy */; }; - C5173F1B6B6C6574464F7A3A928A97F9 /* PBXTargetDependency */ = { + A0946EFE71A4D7695F7D67EA6D0BE0F3 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = Expecta; - target = 9C59561051F1403A293E0B943DB4E71F /* Expecta */; - targetProxy = 49C8F39BFAED4296B755D736E92550BE /* PBXContainerItemProxy */; + name = CLImageEditor; + target = CB2883F6F8461C2BDD61E0BA2A1728FA /* CLImageEditor */; + targetProxy = 148B10BB5C07DD7DB2038A1EB3947CBA /* PBXContainerItemProxy */; }; - CFA0EE680BFE9DAF2E299E3F27F5F46C /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = Specta; - target = C0139FF721A043F8132011DB99D22114 /* Specta */; - targetProxy = 6E38667BB2D1003703FA57F4D7697C2C /* PBXContainerItemProxy */; - }; - D18150397EF79C0C0A380B3600FEE503 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = PureLayout; - target = 5089EEAF8DD991A0A25FF85B1C893293 /* PureLayout */; - targetProxy = 5232E883E4D1F8737E3E7168BE52F955 /* PBXContainerItemProxy */; - }; - D9C2EB23CCC2078B3426E39CBDE17A86 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = DGActivityIndicatorView; - target = A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */; - targetProxy = 7AE6879D2A7ABE0FC5AA605209616B5C /* PBXContainerItemProxy */; - }; - F2305D4CC939543CDD13F9BF6992EBF9 /* PBXTargetDependency */ = { + AF640D537011ED71B24BFB275066E8DB /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Expecta+Snapshots"; target = 0D6EC326E1174CBD1052C8A16C109576 /* Expecta+Snapshots */; - targetProxy = F3536E6D84F5140F4657D6E835ECE101 /* PBXContainerItemProxy */; + targetProxy = DEDA556ED10AE729BFF9F15E006AE6A4 /* PBXContainerItemProxy */; + }; + D2DEB417A39F5B67B6DCB4665689C6CC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Specta; + target = C0139FF721A043F8132011DB99D22114 /* Specta */; + targetProxy = 2E7B26A0585145D93A99A90B622E18C4 /* PBXContainerItemProxy */; + }; + D4FDBC7FB5FE20392AE34A331D6391DD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = PureLayout; + target = FC4407CD05467A90650F0588CF53A16F /* PureLayout */; + targetProxy = 62AF0E6C853742DDAFAB444440617ABF /* PBXContainerItemProxy */; + }; + EAD1ADA470E5DBD3ED551A72FF835619 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = FBSnapshotTestCase; + target = 7C5E09F14C77A34CDDBE3B135E42F0A5 /* FBSnapshotTestCase */; + targetProxy = 214C77C1E0B71B7B28530F158425CE99 /* PBXContainerItemProxy */; + }; + EE8A79520E08D00BDE8EE07524430872 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DGActivityIndicatorView; + target = A075EF8F6759743C8B06CCC6D7B7961D /* DGActivityIndicatorView */; + targetProxy = 18B4725471EE73D7F471ABD332A951AA /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -1811,31 +2334,32 @@ }; name = Debug; }; - 1BE68D6053E0C86B7437A8C9919853DB /* Release */ = { + 38776EC397F88C20CEC4CE1497BBE994 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B585EA8F8736D10BFBB2A3B9671FA968 /* Pods-PNImagePickerViewController_Tests.release.xcconfig */; + baseConfigurationReference = 922382F5DFD953122E9240B15F3AD03B /* DGActivityIndicatorView.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACH_O_TYPE = staticlib; + GCC_PREFIX_HEADER = "Target Support Files/DGActivityIndicatorView/DGActivityIndicatorView-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = DGActivityIndicatorView; + PRODUCT_NAME = DGActivityIndicatorView; + PUBLIC_HEADERS_FOLDER_PATH = ""; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; }; - name = Release; + name = Debug; }; - 266EA7E66657A2D5ADA62235FFD59FA1 /* Release */ = { + 576D66776FA22008D9742E8D5352F2DE /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F78A56FA1663821E3B729346A31D11E7 /* PureLayout.xcconfig */; + baseConfigurationReference = F183AA6C6A1EC8329AA7D8FB366AE4FC /* PureLayout.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1857,9 +2381,9 @@ }; name = Release; }; - 32055684535A78051E9FD4D022077A28 /* Debug */ = { + 5F41A4D12266DB13F59BED4B53BB8C24 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D96EC89C072B942B96AACCFD08D4162A /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */; + baseConfigurationReference = 7C4F3FE816FBC048C49C66A0431DFEC7 /* Pods-PNImagePickerViewController_Tests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -1878,32 +2402,9 @@ }; name = Debug; }; - 38776EC397F88C20CEC4CE1497BBE994 /* Debug */ = { + 609AEFF4205F26E4E272A49B642CE45C /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6504BCAB77EE793DB38CDADAE500596A /* DGActivityIndicatorView.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/DGActivityIndicatorView/DGActivityIndicatorView-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = DGActivityIndicatorView; - PRODUCT_NAME = DGActivityIndicatorView; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 39A372AB55A5B1793CF507AABF6ACA7E /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A2B27404C0C2694965DC43E52B70DB5D /* Pods-PNImagePickerViewController_Example.debug.xcconfig */; + baseConfigurationReference = 1F116938FF4A43A4B75595A2D2DD390A /* Pods-PNImagePickerViewController_Example.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -1922,32 +2423,9 @@ }; name = Debug; }; - 3E7FF74B4E673EDECF2CD9893B055ADA /* Debug */ = { + 6AB88A564562E2D3500CAE93A347FEF1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = D58FC251349EEAC93129F3C78EBF0B0B /* PNImagePickerViewController.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/PNImagePickerViewController/PNImagePickerViewController-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = PNImagePickerViewController; - PRODUCT_NAME = PNImagePickerViewController; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 4061BFB8376E17B24883DEB5B1A347AC /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 28480F6ECEB473466932618C209FDAAD /* Pods-PNImagePickerViewController_Example.release.xcconfig */; + baseConfigurationReference = E6905CBF81EE4A986E3E14A14BCB668B /* Pods-PNImagePickerViewController_Tests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = "iPhone Developer"; @@ -1967,9 +2445,31 @@ }; name = Release; }; - 44D43A0352CE8FA69FC1EFA94B4458AF /* Debug */ = { + 6FA6175039F5B722F740A8025745E294 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = F78A56FA1663821E3B729346A31D11E7 /* PureLayout.xcconfig */; + baseConfigurationReference = 9F6C4F21E38B3C8722BF2000C3D2DC1A /* Pods-PNImagePickerViewController_Example.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + IPHONEOS_DEPLOYMENT_TARGET = 9.0; + MACH_O_TYPE = staticlib; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 74CCB7E01E981DDCEAEAA9C859C0C7E5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F183AA6C6A1EC8329AA7D8FB366AE4FC /* PureLayout.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -1992,7 +2492,7 @@ }; 762F7FCB16E22F48593ACB06FC656E4E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 733F7D2BF1F10720986043F8F70CED3D /* Expecta.xcconfig */; + baseConfigurationReference = FDA28C1C37135B401CB9BAF4BDCE435E /* Expecta.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2015,7 +2515,7 @@ }; 7764A14497C98C6689A88796D04C5624 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E0C56FBF5CDF85B7F9F029D50FCD1193 /* Expecta+Snapshots.xcconfig */; + baseConfigurationReference = 8F2B0970FB87319B16DDA18C6CC74785 /* Expecta+Snapshots.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2037,9 +2537,55 @@ }; name = Release; }; + 7B5021885A5B665895FAD2B5CE8B75E1 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 58AED4B8164892CBAE70990656DCDFD2 /* CLImageEditor.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/CLImageEditor/CLImageEditor-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = CLImageEditor; + PRODUCT_NAME = CLImageEditor; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 844E2EA719E7A0C9C5A7D909B20EE160 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D58FC251349EEAC93129F3C78EBF0B0B /* PNImagePickerViewController.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/PNImagePickerViewController/PNImagePickerViewController-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = PNImagePickerViewController; + PRODUCT_NAME = PNImagePickerViewController; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; 87BEEFF8F2CED78AC6801BE4D3178FF5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A94A3856C16EA41451831CFA66381B74 /* Specta.xcconfig */; + baseConfigurationReference = F086BDADACFDDE1FBBD63E2E9F4B41E0 /* Specta.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2062,7 +2608,7 @@ }; 8C74A44B8558434FE99E8EF322B1288F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6504BCAB77EE793DB38CDADAE500596A /* DGActivityIndicatorView.xcconfig */; + baseConfigurationReference = 922382F5DFD953122E9240B15F3AD03B /* DGActivityIndicatorView.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2086,7 +2632,7 @@ }; 904202B091A41077BBA4D19323F53613 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8CEAD24182BD2092A6D68BBFA2EDE382 /* FBSnapshotTestCase.xcconfig */; + baseConfigurationReference = 527F6698D88773757C9DB0307C7DBE1E /* FBSnapshotTestCase.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2168,55 +2714,7 @@ }; name = Release; }; - C7ADE8370A110F77EA702AAEA81C8DB3 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = A94A3856C16EA41451831CFA66381B74 /* Specta.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Specta; - PRODUCT_NAME = Specta; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - EBDF3D745E9FEFB502D4CE82D7E3B97D /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 733F7D2BF1F10720986043F8F70CED3D /* Expecta.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Developer"; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - GCC_PREFIX_HEADER = "Target Support Files/Expecta/Expecta-prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PRIVATE_HEADERS_FOLDER_PATH = ""; - PRODUCT_MODULE_NAME = Expecta; - PRODUCT_NAME = Expecta; - PUBLIC_HEADERS_FOLDER_PATH = ""; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - F4050FD3AA949577347EB2681DCFC408 /* Release */ = { + A401D854ED4CFC5594B7B9C32B815B74 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = D58FC251349EEAC93129F3C78EBF0B0B /* PNImagePickerViewController.xcconfig */; buildSettings = { @@ -2240,9 +2738,81 @@ }; name = Release; }; + C7ADE8370A110F77EA702AAEA81C8DB3 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F086BDADACFDDE1FBBD63E2E9F4B41E0 /* Specta.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Specta/Specta-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Specta; + PRODUCT_NAME = Specta; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + C9586ECC62A93CCD566BDDCE330EC95B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 58AED4B8164892CBAE70990656DCDFD2 /* CLImageEditor.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/CLImageEditor/CLImageEditor-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = CLImageEditor; + PRODUCT_NAME = CLImageEditor; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + EBDF3D745E9FEFB502D4CE82D7E3B97D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FDA28C1C37135B401CB9BAF4BDCE435E /* Expecta.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + GCC_PREFIX_HEADER = "Target Support Files/Expecta/Expecta-prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PRIVATE_HEADERS_FOLDER_PATH = ""; + PRODUCT_MODULE_NAME = Expecta; + PRODUCT_NAME = Expecta; + PUBLIC_HEADERS_FOLDER_PATH = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; F55F5AECB177B396F1B1746574C2C336 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E0C56FBF5CDF85B7F9F029D50FCD1193 /* Expecta+Snapshots.xcconfig */; + baseConfigurationReference = 8F2B0970FB87319B16DDA18C6CC74785 /* Expecta+Snapshots.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2265,7 +2835,7 @@ }; F78F641FB99E33427447C490424CAD8B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8CEAD24182BD2092A6D68BBFA2EDE382 /* FBSnapshotTestCase.xcconfig */; + baseConfigurationReference = 527F6698D88773757C9DB0307C7DBE1E /* FBSnapshotTestCase.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -2289,6 +2859,24 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 0A022A13C0188C2659CF45451404F609 /* Build configuration list for PBXNativeTarget "PNImagePickerViewController" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 844E2EA719E7A0C9C5A7D909B20EE160 /* Debug */, + A401D854ED4CFC5594B7B9C32B815B74 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 21CA06BD534009872922F63590C80C30 /* Build configuration list for PBXNativeTarget "PureLayout" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 74CCB7E01E981DDCEAEAA9C859C0C7E5 /* Debug */, + 576D66776FA22008D9742E8D5352F2DE /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2E4B826AA2979B4E297821C1C6C827BD /* Build configuration list for PBXNativeTarget "DGActivityIndicatorView" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -2325,20 +2913,20 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 84E97E6C023022F89720491CD3CF6020 /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Example" */ = { + 7A4BBFFEA731855828813D2727D87740 /* Build configuration list for PBXNativeTarget "CLImageEditor" */ = { isa = XCConfigurationList; buildConfigurations = ( - 39A372AB55A5B1793CF507AABF6ACA7E /* Debug */, - 4061BFB8376E17B24883DEB5B1A347AC /* Release */, + 7B5021885A5B665895FAD2B5CE8B75E1 /* Debug */, + C9586ECC62A93CCD566BDDCE330EC95B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - AA8FAC119350FF447B7BDED27290875F /* Build configuration list for PBXNativeTarget "PureLayout" */ = { + 8F437CC2E35A24F5E88A82451579D12C /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Tests" */ = { isa = XCConfigurationList; buildConfigurations = ( - 44D43A0352CE8FA69FC1EFA94B4458AF /* Debug */, - 266EA7E66657A2D5ADA62235FFD59FA1 /* Release */, + 5F41A4D12266DB13F59BED4B53BB8C24 /* Debug */, + 6AB88A564562E2D3500CAE93A347FEF1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -2361,20 +2949,11 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C7E38FC36B3914CE1A5A7AA95DBB4701 /* Build configuration list for PBXNativeTarget "PNImagePickerViewController" */ = { + F82521CD465F26A27BCB392804CA698E /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Example" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3E7FF74B4E673EDECF2CD9893B055ADA /* Debug */, - F4050FD3AA949577347EB2681DCFC408 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D6D70A241462F797F77F66C9EA3A1C32 /* Build configuration list for PBXNativeTarget "Pods-PNImagePickerViewController_Tests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 32055684535A78051E9FD4D022077A28 /* Debug */, - 1BE68D6053E0C86B7437A8C9919853DB /* Release */, + 609AEFF4205F26E4E272A49B642CE45C /* Debug */, + 6FA6175039F5B722F740A8025745E294 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-dummy.m b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-dummy.m new file mode 100644 index 0000000..1634546 --- /dev/null +++ b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_CLImageEditor : NSObject +@end +@implementation PodsDummy_CLImageEditor +@end diff --git a/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-prefix.pch b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-prefix.pch new file mode 100644 index 0000000..beb2a24 --- /dev/null +++ b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor-prefix.pch @@ -0,0 +1,12 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + diff --git a/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor.xcconfig b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor.xcconfig new file mode 100644 index 0000000..e19033c --- /dev/null +++ b/Example/Pods/Target Support Files/CLImageEditor/CLImageEditor.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/CLImageEditor +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/CLImageEditor" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/CLImageEditor +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/Example/Pods/Target Support Files/PNImagePickerViewController/PNImagePickerViewController.xcconfig b/Example/Pods/Target Support Files/PNImagePickerViewController/PNImagePickerViewController.xcconfig index 441be5b..89b1fba 100644 --- a/Example/Pods/Target Support Files/PNImagePickerViewController/PNImagePickerViewController.xcconfig +++ b/Example/Pods/Target Support Files/PNImagePickerViewController/PNImagePickerViewController.xcconfig @@ -1,6 +1,6 @@ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.markdown index 688a251..6af70fa 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.markdown @@ -1,6 +1,30 @@ # Acknowledgements This application makes use of the following third party libraries: +## CLImageEditor + +The MIT License (MIT) + +Copyright (c) 2013 Sho Yakushiji, CALACULU Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + ## DGActivityIndicatorView The MIT License (MIT) diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.plist index c3335b5..e1fd3cd 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-acknowledgements.plist @@ -16,6 +16,36 @@ FooterText The MIT License (MIT) +Copyright (c) 2013 Sho Yakushiji, CALACULU Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + CLImageEditor + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + Copyright (c) 2015 Danil Gontovnik Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-resources.sh b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-resources.sh new file mode 100755 index 0000000..cb45c85 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example-resources.sh @@ -0,0 +1,129 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi +fi diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.debug.xcconfig b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.debug.xcconfig index e5a66f6..2469efe 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.debug.xcconfig @@ -1,7 +1,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" -OTHER_LDFLAGS = $(inherited) -ObjC -l"DGActivityIndicatorView" -l"PNImagePickerViewController" -l"PureLayout" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "UIKit" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLImageEditor" "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CLImageEditor" -l"DGActivityIndicatorView" -l"PNImagePickerViewController" -l"PureLayout" -framework "Accelerate" -framework "CoreGraphics" -framework "CoreImage" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.release.xcconfig b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.release.xcconfig index e5a66f6..2469efe 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Example/Pods-PNImagePickerViewController_Example.release.xcconfig @@ -1,7 +1,7 @@ GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" -OTHER_LDFLAGS = $(inherited) -ObjC -l"DGActivityIndicatorView" -l"PNImagePickerViewController" -l"PureLayout" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "UIKit" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLImageEditor" "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CLImageEditor" -l"DGActivityIndicatorView" -l"PNImagePickerViewController" -l"PureLayout" -framework "Accelerate" -framework "CoreGraphics" -framework "CoreImage" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "UIKit" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.markdown b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.markdown index d3dd2d2..92d0926 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.markdown +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.markdown @@ -1,6 +1,30 @@ # Acknowledgements This application makes use of the following third party libraries: +## CLImageEditor + +The MIT License (MIT) + +Copyright (c) 2013 Sho Yakushiji, CALACULU Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + ## DGActivityIndicatorView The MIT License (MIT) diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.plist b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.plist index 595b949..a22b63b 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.plist +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-acknowledgements.plist @@ -16,6 +16,36 @@ FooterText The MIT License (MIT) +Copyright (c) 2013 Sho Yakushiji, CALACULU Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + License + MIT + Title + CLImageEditor + Type + PSGroupSpecifier + + + FooterText + The MIT License (MIT) + Copyright (c) 2015 Danil Gontovnik Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-resources.sh b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-resources.sh new file mode 100755 index 0000000..cb45c85 --- /dev/null +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests-resources.sh @@ -0,0 +1,129 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +function on_error { + echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" +} +trap 'on_error $LINENO' ERR + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_resource "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_resource "${PODS_ROOT}/CLImageEditor/CLImageEditor/CLImageEditor.bundle" +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" + fi +fi diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.debug.xcconfig b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.debug.xcconfig index 457b306..e0643df 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.debug.xcconfig +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.debug.xcconfig @@ -1,8 +1,8 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta+Snapshots" "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/Specta" -OTHER_LDFLAGS = $(inherited) -ObjC -l"DGActivityIndicatorView" -l"Expecta" -l"Expecta+Snapshots" -l"FBSnapshotTestCase" -l"PNImagePickerViewController" -l"PureLayout" -l"Specta" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLImageEditor" "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta+Snapshots" "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/Specta" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CLImageEditor" -l"DGActivityIndicatorView" -l"Expecta" -l"Expecta+Snapshots" -l"FBSnapshotTestCase" -l"PNImagePickerViewController" -l"PureLayout" -l"Specta" -framework "Accelerate" -framework "CoreGraphics" -framework "CoreImage" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.release.xcconfig b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.release.xcconfig index 457b306..e0643df 100644 --- a/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.release.xcconfig +++ b/Example/Pods/Target Support Files/Pods-PNImagePickerViewController_Tests/Pods-PNImagePickerViewController_Tests.release.xcconfig @@ -1,8 +1,8 @@ FRAMEWORK_SEARCH_PATHS = $(inherited) "$(PLATFORM_DIR)/Developer/Library/Frameworks" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" -LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta+Snapshots" "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/Specta" -OTHER_LDFLAGS = $(inherited) -ObjC -l"DGActivityIndicatorView" -l"Expecta" -l"Expecta+Snapshots" -l"FBSnapshotTestCase" -l"PNImagePickerViewController" -l"PureLayout" -l"Specta" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" +HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/CLImageEditor" "${PODS_ROOT}/Headers/Public/DGActivityIndicatorView" "${PODS_ROOT}/Headers/Public/Expecta" "${PODS_ROOT}/Headers/Public/Expecta+Snapshots" "${PODS_ROOT}/Headers/Public/FBSnapshotTestCase" "${PODS_ROOT}/Headers/Public/PNImagePickerViewController" "${PODS_ROOT}/Headers/Public/PureLayout" "${PODS_ROOT}/Headers/Public/Specta" +LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/CLImageEditor" "${PODS_CONFIGURATION_BUILD_DIR}/DGActivityIndicatorView" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta" "${PODS_CONFIGURATION_BUILD_DIR}/Expecta+Snapshots" "${PODS_CONFIGURATION_BUILD_DIR}/FBSnapshotTestCase" "${PODS_CONFIGURATION_BUILD_DIR}/PNImagePickerViewController" "${PODS_CONFIGURATION_BUILD_DIR}/PureLayout" "${PODS_CONFIGURATION_BUILD_DIR}/Specta" +OTHER_LDFLAGS = $(inherited) -ObjC -l"CLImageEditor" -l"DGActivityIndicatorView" -l"Expecta" -l"Expecta+Snapshots" -l"FBSnapshotTestCase" -l"PNImagePickerViewController" -l"PureLayout" -l"Specta" -framework "Accelerate" -framework "CoreGraphics" -framework "CoreImage" -framework "Foundation" -framework "Photos" -framework "PhotosUI" -framework "QuartzCore" -framework "UIKit" -framework "XCTest" PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. diff --git a/PNImagePickerViewController.podspec b/PNImagePickerViewController.podspec index 3445d42..4368347 100644 --- a/PNImagePickerViewController.podspec +++ b/PNImagePickerViewController.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "PNImagePickerViewController" - s.version = "1.0" + s.version = "1.0.1" s.summary = "PNImagePickerViewController is a fork of jacobsieradzki/JSImagePickerController with iOS8+ PhotoKit support." # This description is used to generate tags and improve search results. @@ -34,4 +34,5 @@ Pod::Spec.new do |s| s.frameworks = 'Photos', 'PhotosUI' s.dependency 'PureLayout' s.dependency 'DGActivityIndicatorView' + s.dependency 'CLImageEditor/AllTools' end diff --git a/Pod/Classes/PNImagePickerViewController.h b/Pod/Classes/PNImagePickerViewController.h index c1025a9..6de578a 100644 --- a/Pod/Classes/PNImagePickerViewController.h +++ b/Pod/Classes/PNImagePickerViewController.h @@ -49,6 +49,8 @@ @property (readonly) bool isVisible; +@property (nonatomic) bool enableEditMode; + @property (nonatomic, strong) UICollectionView *collectionView; @property (nonatomic, strong) UIButton *photoLibraryBtn; diff --git a/Pod/Classes/PNImagePickerViewController.m b/Pod/Classes/PNImagePickerViewController.m index 5f63695..33d223a 100644 --- a/Pod/Classes/PNImagePickerViewController.m +++ b/Pod/Classes/PNImagePickerViewController.m @@ -13,11 +13,12 @@ #import "PNCollectionViewCell.h" #import "NSString+HexColor.h" #import +#import #pragma mark - PNImagePickerViewController - -@interface PNImagePickerViewController () +@interface PNImagePickerViewController () #define imagePickerHeight 290.0f @@ -55,7 +56,7 @@ _targetSize = CGSizeMake(1024, 1024); _haveCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; _animationTime = 0.4; - + _enableEditMode = NO; } return self; @@ -327,11 +328,19 @@ } // Show the UIImageView and use it to display the requested image. - if ([self->delegate respondsToSelector:@selector(imagePicker:didSelectImage:)]) { - [self->delegate imagePicker:self didSelectImage:result]; + if (self->_enableEditMode) { + CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:result]; + editor.delegate = self; + + [self presentViewController:editor animated:YES completion:nil]; + } + else { + if ([self->delegate respondsToSelector:@selector(imagePicker:didSelectImage:)]) { + [self->delegate imagePicker:self didSelectImage:result]; + } + + [self dismissAnimated:YES]; } - - [self dismissAnimated:YES]; }]; } @@ -397,18 +406,31 @@ picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeImage, nil]; [self presentViewController:picker animated:YES completion:^{ - + }]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *chosenImage = info[UIImagePickerControllerOriginalImage]; - [self dismissAnimated:YES]; - [picker dismissViewControllerAnimated:YES completion:^{ - if ([self->delegate respondsToSelector:@selector(imagePicker:didSelectImage:)]) { - [self->delegate imagePicker:self didSelectImage:chosenImage]; - } - }]; + + if (self->_enableEditMode) { + [picker dismissViewControllerAnimated:YES completion:^{ + + CLImageEditor *editor = [[CLImageEditor alloc] initWithImage:chosenImage]; + editor.delegate = self; + + [self presentViewController:editor animated:YES completion:nil]; + }]; + } + else { + [self dismissAnimated:YES]; + [picker dismissViewControllerAnimated:YES completion:^{ + if ([self->delegate respondsToSelector:@selector(imagePicker:didSelectImage:)]) { + [self->delegate imagePicker:self didSelectImage:chosenImage]; + } + }]; + } + } - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { @@ -448,17 +470,17 @@ initialSpringVelocity:0 options:0 animations:^{ - //[_logoImage layoutIfNeeded]; - [self.view layoutIfNeeded]; + //[_logoImage layoutIfNeeded]; + [self.view layoutIfNeeded]; [self->_backgroundView setAlpha:1]; - + [self->_imagePickerView layoutIfNeeded]; - - } completion:^(BOOL finished) { - if ([self->delegate respondsToSelector:@selector(imagePickerDidOpen)]) { - [self->delegate imagePickerDidOpen]; - } - }]; + + } completion:^(BOOL finished) { + if ([self->delegate respondsToSelector:@selector(imagePickerDidOpen)]) { + [self->delegate imagePickerDidOpen]; + } + }]; } else { @@ -525,6 +547,17 @@ } } +#pragma mark- CLImageEditor delegate + +- (void)imageEditor:(CLImageEditor*)editor didFinishEditingWithImage:(UIImage*)image +{ + if ([delegate respondsToSelector:@selector(imagePicker:didSelectImage:)]) { + [delegate imagePicker:self didSelectImage:image]; + } + + [self dismissAnimated:YES]; +} + @end