+#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.
+
+
+
+
+
+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 = "