├── .gitignore
├── DemoMovie
└── SSBouncyButton.gif
├── LICENSE
├── README.md
├── SSBouncyButton.podspec
├── SSBouncyButton
├── SSBouncyButton.h
└── SSBouncyButton.m
└── SSBouncyButtonDemo
├── Podfile
├── Pods
├── BRYSerialAnimationQueue
│ ├── Classes
│ │ ├── BRYSerialAnimationQueue.h
│ │ └── BRYSerialAnimationQueue.m
│ ├── LICENSE
│ └── README.md
├── BuildHeaders
│ ├── BRYSerialAnimationQueue
│ │ └── BRYSerialAnimationQueue.h
│ ├── UIColor-Hex
│ │ └── UIColor+Hex.h
│ └── UIImage+BetterAdditions
│ │ └── UIImage+BetterAdditions.h
├── Headers
│ ├── BRYSerialAnimationQueue
│ │ └── BRYSerialAnimationQueue.h
│ ├── UIColor-Hex
│ │ └── UIColor+Hex.h
│ └── UIImage+BetterAdditions
│ │ └── UIImage+BetterAdditions.h
├── Manifest.lock
├── Pods-BRYSerialAnimationQueue-Private.xcconfig
├── Pods-BRYSerialAnimationQueue-dummy.m
├── Pods-BRYSerialAnimationQueue-prefix.pch
├── Pods-BRYSerialAnimationQueue.xcconfig
├── Pods-UIColor-Hex-Private.xcconfig
├── Pods-UIColor-Hex-dummy.m
├── Pods-UIColor-Hex-prefix.pch
├── Pods-UIColor-Hex.xcconfig
├── Pods-UIImage+BetterAdditions-Private.xcconfig
├── Pods-UIImage+BetterAdditions-dummy.m
├── Pods-UIImage+BetterAdditions-prefix.pch
├── Pods-UIImage+BetterAdditions.xcconfig
├── Pods-acknowledgements.markdown
├── Pods-acknowledgements.plist
├── Pods-dummy.m
├── Pods-environment.h
├── Pods-resources.sh
├── Pods.xcconfig
├── Pods.xcodeproj
│ └── project.pbxproj
├── UIColor-Hex
│ ├── Classes
│ │ ├── UIColor+Hex.h
│ │ └── UIColor+Hex.m
│ ├── LICENSE
│ └── README.md
└── UIImage+BetterAdditions
│ ├── LICENSE.txt
│ ├── README.md
│ ├── UIImage+BetterAdditions.h
│ └── UIImage+BetterAdditions.m
├── SSBouncyButtonDemo.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ └── contents.xcworkspacedata
├── SSBouncyButtonDemo.xcworkspace
└── contents.xcworkspacedata
└── SSBouncyButtonDemo
├── Images.xcassets
├── AppIcon.appiconset
│ └── Contents.json
└── LaunchImage.launchimage
│ └── Contents.json
├── SSAppDelegate.h
├── SSAppDelegate.m
├── SSBouncyButtonDemo-Info.plist
├── SSBouncyButtonDemo-Prefix.pch
└── main.m
/.gitignore:
--------------------------------------------------------------------------------
1 | *.xcuserstate
2 | *.xccheckout
3 | xcuserdata
4 | Podfile.lock
5 |
--------------------------------------------------------------------------------
/DemoMovie/SSBouncyButton.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StyleShare/SSBouncyButton/6ce37bae12e30d6325ea80969db82783dd14fee0/DemoMovie/SSBouncyButton.gif
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Suyeol Jeon (http://xoul.kr),
4 | StyleShare (https://stylesha.re)
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | SSBouncyButton
2 | ==============
3 |
4 | SSBouncyButton is simple button UI component with iOS 7-style bouncy animation.
5 |
6 | Take A Look
7 | -----------
8 |
9 |
10 |
11 |
12 | Try It!
13 | -------
14 |
15 | ```ruby
16 | pod 'SSBouncyButton', '~> 1.0'
17 | ```
18 |
19 | Use it just like using an UIButton. You can find [the sample code](https://github.com/StyleShare/SSBouncyButton/blob/master/SSBouncyButtonDemo/SSBouncyButtonDemo/SSAppDelegate.m#L44:L59).
20 |
21 |
22 | Author and License
23 | ------------------
24 |
25 | SSBouncyButton is written by [Suyeol Jeon](http://xoul.kr) and, Suyeol Jeon and [StyleShare](https://www.stylesha.re) maintain it. It is distributed under MIT License. The source code is available on [GitHub](https://github.com/StyleShare/SSBouncyButton).
26 |
--------------------------------------------------------------------------------
/SSBouncyButton.podspec:
--------------------------------------------------------------------------------
1 | Pod::Spec.new do |s|
2 | s.name = "SSBouncyButton"
3 | s.version = "1.0.7"
4 | s.summary = "iOS7-style bouncy button."
5 | s.homepage = "http://github.com/StyleShare/SSBouncyButton"
6 | s.license = { :type => 'MIT', :file => 'LICENSE' }
7 | s.author = { "devxoul" => "devxoul@gmail.com" }
8 | s.source = { :git => "https://github.com/StyleShare/SSBouncyButton.git",
9 | :tag => "#{s.version}" }
10 | s.platform = :ios, '7.0'
11 | s.frameworks = 'UIKit', 'Foundation', 'QuartzCore'
12 | s.source_files = 'SSBouncyButton/*.{h,m}'
13 | s.requires_arc = true
14 |
15 | s.dependency 'BRYSerialAnimationQueue', '~> 1.0'
16 | s.dependency 'UIColor-Hex', '~> 0.1'
17 | s.dependency 'UIImage+BetterAdditions', '~> 2.0'
18 | end
19 |
--------------------------------------------------------------------------------
/SSBouncyButton/SSBouncyButton.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2014 Suyeol Jeon (http://xoul.kr),
5 | // StyleShare (https://stylesha.re)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 | #import
27 |
28 | static unsigned int SSBouncyButtonDefaultTintColor = 0x4aca8a;
29 | static CGFloat SSBouncyButtonDefaultTitleLabelFontSize = 13;
30 | static CGFloat SSBouncyButtonDefaultBorderWidth = 1;
31 | static CGFloat SSBouncyButtonDefaultCornerRadius = 3;
32 |
33 | @interface SSBouncyButton : UIButton
34 |
35 | @property (nonatomic, assign) CGFloat cornerRadius;
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/SSBouncyButton/SSBouncyButton.m:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2014 Suyeol Jeon (http://xoul.kr),
5 | // StyleShare (https://stylesha.re)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 | #import
27 |
28 | #if __has_include()
29 | #import
30 | #endif
31 |
32 | #if __has_include()
33 | #import
34 | #endif
35 |
36 | #if __has_include()
37 | #import
38 | #endif
39 |
40 | #if __has_include()
41 | #import
42 | #endif
43 |
44 | #import "SSBouncyButton.h"
45 |
46 | @interface SSBouncyButton ()
47 |
48 | @property (nonatomic, strong) NSTimer *touchDelayTimer;
49 | @property (nonatomic, assign) BOOL isShrinking;
50 | @property (nonatomic, assign) BOOL isShrinked;
51 | @property (nonatomic, assign) BOOL touchEnded;
52 |
53 | @end
54 |
55 |
56 | @implementation SSBouncyButton
57 |
58 | - (id)init
59 | {
60 | return [self initWithFrame:CGRectZero];
61 | }
62 |
63 | -(id)initWithCoder:(NSCoder *)aDecoder{
64 | self = [super initWithCoder:aDecoder];
65 | if(self){
66 | self.adjustsImageWhenHighlighted = NO;
67 | self.cornerRadius = SSBouncyButtonDefaultCornerRadius;
68 | [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
69 | [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected | UIControlStateHighlighted];
70 | }
71 | return self;
72 | }
73 |
74 | - (id)initWithFrame:(CGRect)frame
75 | {
76 | self = [super initWithFrame:frame];
77 | if (self) {
78 | self.adjustsImageWhenHighlighted = NO;
79 | self.tintColor = [UIColor colorWithHex:SSBouncyButtonDefaultTintColor];
80 | self.cornerRadius = SSBouncyButtonDefaultCornerRadius;
81 | self.titleLabel.font = [UIFont systemFontOfSize:SSBouncyButtonDefaultTitleLabelFontSize];
82 | [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];
83 | [self setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected | UIControlStateHighlighted];
84 | }
85 | return self;
86 | }
87 |
88 |
89 | #pragma mark - Properties
90 |
91 | - (void)setTintColor:(UIColor *)tintColor
92 | {
93 | [super setTintColor:tintColor];
94 | [self setTitleColor:tintColor forState:UIControlStateNormal];
95 | [self updateBackgroundImage];
96 | }
97 |
98 | - (void)setCornerRadius:(CGFloat)cornerRadius
99 | {
100 | _cornerRadius = cornerRadius;
101 | [self updateBackgroundImage];
102 | }
103 |
104 | - (void)setTitle:(NSString *)title forState:(UIControlState)state
105 | {
106 | [super setTitle:title forState:state];
107 | if (state == UIControlStateSelected) {
108 | [self setTitle:title forState:UIControlStateSelected | UIControlStateHighlighted];
109 | }
110 | }
111 |
112 |
113 | #pragma mark - Draw
114 |
115 | - (void)updateBackgroundImage
116 | {
117 | NSDictionary *borderAttrs = @{NSStrokeColorAttributeName: self.tintColor,
118 | NSStrokeWidthAttributeName: @(SSBouncyButtonDefaultBorderWidth)};
119 |
120 | UIImage *normalBackgroundImage = [UIImage resizableImageWithColor:[UIColor clearColor]
121 | borderAttributes:borderAttrs
122 | cornerRadius:self.cornerRadius];
123 | UIImage *selectedBackgroundImage = [UIImage resizableImageWithColor:self.tintColor
124 | borderAttributes:borderAttrs
125 | cornerRadius:self.cornerRadius];
126 | [self setBackgroundImage:normalBackgroundImage forState:UIControlStateNormal];
127 | [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected];
128 | [self setBackgroundImage:selectedBackgroundImage forState:UIControlStateSelected | UIControlStateHighlighted];
129 | }
130 |
131 |
132 | #pragma mark - Touch Event
133 |
134 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
135 | {
136 | [super touchesBegan:touches withEvent:event];
137 |
138 | self.touchEnded = NO;
139 | self.touchDelayTimer = [NSTimer timerWithTimeInterval:0.15
140 | target:self
141 | selector:@selector(beginShrinkAnimation)
142 | userInfo:nil
143 | repeats:NO];
144 | [[NSRunLoop currentRunLoop] addTimer:self.touchDelayTimer forMode:NSRunLoopCommonModes];
145 | }
146 |
147 | - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
148 | {
149 | [super touchesEnded:touches withEvent:event];
150 |
151 | self.touchEnded = YES;
152 | [self.touchDelayTimer invalidate];
153 | [self beginEnlargeAnimation];
154 | }
155 |
156 | - (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
157 | {
158 | [super touchesCancelled:touches withEvent:event];
159 |
160 | self.touchEnded = YES;
161 | [self.touchDelayTimer invalidate];
162 |
163 | if (self.isShrinked) {
164 | [self beginEnlargeAnimation];
165 | }
166 | }
167 |
168 |
169 | #pragma mark - Animations
170 |
171 | - (void)beginShrinkAnimation
172 | {
173 | [self.touchDelayTimer invalidate];
174 | self.isShrinked = YES;
175 |
176 | BRYSerialAnimationQueue *queue = [[BRYSerialAnimationQueue alloc] init];
177 | [queue animateWithDuration:0.3 animations:^{
178 | self.isShrinking = YES;
179 | self.transform = CGAffineTransformMakeScale(0.83, 0.83);
180 | }];
181 | [queue animateWithDuration:0.2 animations:^{
182 | if (self.touchEnded) {
183 | self.isShrinking = NO;
184 | return;
185 | }
186 | self.transform = CGAffineTransformMakeScale(0.86, 0.86);
187 | }];
188 | [queue animateWithDuration:0.18 animations:^{
189 | if (self.touchEnded) {
190 | self.isShrinking = NO;
191 | return;
192 | }
193 | self.transform = CGAffineTransformMakeScale(0.85, 0.85);
194 | } completion:^(BOOL finished) {
195 | self.isShrinking = NO;
196 | }];
197 | }
198 |
199 | - (void)beginEnlargeAnimation
200 | {
201 | self.isShrinked = NO;
202 |
203 | BRYSerialAnimationQueue *queue = [[BRYSerialAnimationQueue alloc] init];
204 |
205 | // 롱터치를 하여 shrink 상태일 경우 중간값 사용
206 | if (self.isShrinking) {
207 | self.isShrinking = NO;
208 | CALayer *presentationLayer = self.layer.presentationLayer;
209 | self.transform = CATransform3DGetAffineTransform(presentationLayer.transform);
210 | [queue animateWithDuration:0.1 animations:^{
211 | self.transform = CGAffineTransformMakeScale(0.85, 0.85);
212 | }];
213 | } else {
214 | [queue animateWithDuration:0.1 animations:^{
215 | self.transform = CGAffineTransformMakeScale(0.85, 0.85);
216 | }];
217 | }
218 | [queue animateWithDuration:0.18 animations:^{
219 | self.transform = CGAffineTransformMakeScale(1.05, 1.05);
220 | }];
221 | [queue animateWithDuration:0.18 animations:^{
222 | self.transform = CGAffineTransformMakeScale(0.98, 0.98);
223 | }];
224 | [queue animateWithDuration:0.17 animations:^{
225 | self.transform = CGAffineTransformMakeScale(1.01, 1.01);
226 | }];
227 | [queue animateWithDuration:0.17 animations:^{
228 | self.transform = CGAffineTransformIdentity;
229 | }];
230 | }
231 |
232 | @end
233 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Podfile:
--------------------------------------------------------------------------------
1 | pod 'BRYSerialAnimationQueue', '~> 1.0'
2 | pod 'UIColor-Hex'
3 | pod 'UIImage+BetterAdditions', '~> 2.0'
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BRYSerialAnimationQueue/Classes/BRYSerialAnimationQueue.h:
--------------------------------------------------------------------------------
1 | //
2 | // BRYSerialAnimationQueue.h
3 | // BRYSerialAnimationQueue
4 | //
5 | // Created by Bryan Irace on 12/19/13.
6 | // Copyright (c) 2013 Bryan Irace. All rights reserved.
7 | //
8 |
9 | @import UIKit;
10 |
11 | /**
12 | Perform UIView animations serially without blocking the main thread, using the same APIs you already know and love.
13 |
14 | The main goal of the class is to make it easy to perform event-based animations (e.g. a user taps a button or a network callback completes). One perfect example is displaying banners inside of an application when push notifications are received. Simply add animation blocks to a `BRYSerialAnimationQueueInstance` and they'll be executed only once all of the previously queued animations have completed.
15 |
16 | An added benefit is that nested animation code like this:
17 |
18 | [UIView animateWithDuration:duration animations:^{
19 | label.alpha = 1;
20 |
21 | } completion:^(BOOL finished) {
22 | [UIView animateWithDuration:duration delay:delay animations:^{
23 | label.alpha = 0;
24 |
25 | } completion:^(BOOL finished) {
26 | [label removeFromSuperview];
27 | }];
28 | }];
29 |
30 | Can be replaced with something a little cleaner, like:
31 |
32 | [queue animateWithDuration:duration animations:^{
33 | label.alpha = 1;
34 | }];
35 |
36 | [queue animateWithDuration:duration delay:delay animations:^{
37 | label.alpha = 0;
38 |
39 | } completion:^(BOOL finished) {
40 | [label removeFromSuperview];
41 | }];
42 | */
43 | @interface BRYSerialAnimationQueue : NSObject
44 |
45 | - (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options
46 | animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion;
47 |
48 | - (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations
49 | completion:(void (^)(BOOL finished))completion;
50 |
51 | - (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations;
52 |
53 | - (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio
54 | initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations
55 | completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);
56 |
57 | @end
58 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BRYSerialAnimationQueue/Classes/BRYSerialAnimationQueue.m:
--------------------------------------------------------------------------------
1 | //
2 | // BRYSerialAnimationQueue.m
3 | // BRYSerialAnimationQueue
4 | //
5 | // Created by Bryan Irace on 12/19/13.
6 | // Copyright (c) 2013 Bryan Irace. All rights reserved.
7 | //
8 |
9 | #import "BRYSerialAnimationQueue.h"
10 |
11 | @interface BRYSerialAnimationQueue()
12 |
13 | @property (nonatomic) dispatch_queue_t queue;
14 | @property (nonatomic) dispatch_semaphore_t semaphore;
15 |
16 | @end
17 |
18 | @implementation BRYSerialAnimationQueue
19 |
20 | #pragma mark - NSObject
21 |
22 | - (id)init {
23 | if (self = [super init]) {
24 | _queue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);
25 | }
26 |
27 | return self;
28 | }
29 |
30 | #pragma mark - BRYSerialAnimationQueue
31 |
32 | - (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay options:(UIViewAnimationOptions)options
33 | animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion {
34 | [self performAnimationsSerially:^{
35 | [UIView animateWithDuration:duration delay:delay options:options animations:animations completion:^(BOOL finished) {
36 | [self runCompletionBlock:completion animationDidFinish:finished];
37 | }];
38 | }];
39 | }
40 |
41 | - (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations
42 | completion:(void (^)(BOOL finished))completion {
43 | [self performAnimationsSerially:^{
44 | [UIView animateWithDuration:duration animations:animations completion:^(BOOL finished) {
45 | [self runCompletionBlock:completion animationDidFinish:finished];
46 | }];
47 | }];
48 | }
49 |
50 | - (void)animateWithDuration:(NSTimeInterval)duration animations:(void (^)(void))animations {
51 | [self performAnimationsSerially:^{
52 | [UIView animateWithDuration:duration animations:animations completion:^(BOOL finished) {
53 | [self runCompletionBlock:nil animationDidFinish:YES];
54 | }];
55 | }];
56 | }
57 |
58 | - (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio
59 | initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations
60 | completion:(void (^)(BOOL finished))completion {
61 | [self performAnimationsSerially:^{
62 | [UIView animateWithDuration:duration delay:delay usingSpringWithDamping:dampingRatio initialSpringVelocity:velocity
63 | options:options animations:animations completion:^(BOOL finished) {
64 | [self runCompletionBlock:completion animationDidFinish:finished];
65 | }];
66 | }];
67 | }
68 |
69 | #pragma mark - Private
70 |
71 | - (void)performAnimationsSerially:(void (^)(void))animation {
72 | dispatch_async(self.queue, ^{
73 | self.semaphore = dispatch_semaphore_create(0);
74 |
75 | dispatch_async(dispatch_get_main_queue(), animation);
76 |
77 | dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);
78 | });
79 | }
80 |
81 | - (void)runCompletionBlock:(void (^)(BOOL finished))completion animationDidFinish:(BOOL)finished {
82 | if (completion) {
83 | completion(finished);
84 | }
85 |
86 | dispatch_semaphore_signal(self.semaphore);
87 | }
88 |
89 | @end
90 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BRYSerialAnimationQueue/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Bryan Irace
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BRYSerialAnimationQueue/README.md:
--------------------------------------------------------------------------------
1 | BRYSerialAnimationQueue
2 | =======================
3 |
4 | Perform UIView animations serially without blocking the main thread, using the same APIs you already know and love.
5 |
6 | The main goal of the class is to make it easy to perform event-based animations (e.g. a user taps a button or a network callback completes). One perfect example is displaying banners inside of an application when push notifications are received. Simply add animation blocks to a `BRYSerialAnimationQueueInstance` and they'll be executed only once all of the previously queued animations have completed.
7 |
8 | An added benefit is that nested animation code like this:
9 |
10 | [UIView animateWithDuration:duration animations:^{
11 | label.alpha = 1;
12 |
13 | } completion:^(BOOL finished) {
14 | [UIView animateWithDuration:duration delay:delay animations:^{
15 | label.alpha = 0;
16 |
17 | } completion:^(BOOL finished) {
18 | [label removeFromSuperview];
19 | }];
20 | }];
21 |
22 | Can be replaced with something a little cleaner, like:
23 |
24 | [queue animateWithDuration:duration animations:^{
25 | label.alpha = 1;
26 | }];
27 |
28 | [queue animateWithDuration:duration delay:delay animations:^{
29 | label.alpha = 0;
30 |
31 | } completion:^(BOOL finished) {
32 | [label removeFromSuperview];
33 | }];
34 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BuildHeaders/BRYSerialAnimationQueue/BRYSerialAnimationQueue.h:
--------------------------------------------------------------------------------
1 | ../../BRYSerialAnimationQueue/Classes/BRYSerialAnimationQueue.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BuildHeaders/UIColor-Hex/UIColor+Hex.h:
--------------------------------------------------------------------------------
1 | ../../UIColor-Hex/Classes/UIColor+Hex.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/BuildHeaders/UIImage+BetterAdditions/UIImage+BetterAdditions.h:
--------------------------------------------------------------------------------
1 | ../../UIImage+BetterAdditions/UIImage+BetterAdditions.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Headers/BRYSerialAnimationQueue/BRYSerialAnimationQueue.h:
--------------------------------------------------------------------------------
1 | ../../BRYSerialAnimationQueue/Classes/BRYSerialAnimationQueue.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Headers/UIColor-Hex/UIColor+Hex.h:
--------------------------------------------------------------------------------
1 | ../../UIColor-Hex/Classes/UIColor+Hex.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Headers/UIImage+BetterAdditions/UIImage+BetterAdditions.h:
--------------------------------------------------------------------------------
1 | ../../UIImage+BetterAdditions/UIImage+BetterAdditions.h
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - BRYSerialAnimationQueue (1.0.0)
3 | - UIColor-Hex (0.1.1)
4 | - UIImage+BetterAdditions (2.0.0)
5 |
6 | DEPENDENCIES:
7 | - BRYSerialAnimationQueue (~> 1.0)
8 | - UIColor-Hex
9 | - UIImage+BetterAdditions (~> 2.0)
10 |
11 | SPEC CHECKSUMS:
12 | BRYSerialAnimationQueue: 0b473cd08bb20b10155f1f8ee300028c10353ead
13 | UIColor-Hex: 658893617840e46ee5ac786e094b67786d9cb19d
14 | UIImage+BetterAdditions: c8692a2ad7a630127662f0b4beb82f9a6cbcffd6
15 |
16 | COCOAPODS: 0.33.1
17 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-BRYSerialAnimationQueue-Private.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods-BRYSerialAnimationQueue.xcconfig"
2 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/BRYSerialAnimationQueue" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/BRYSerialAnimationQueue" "${PODS_ROOT}/Headers/UIColor-Hex" "${PODS_ROOT}/Headers/UIImage+BetterAdditions"
4 | OTHER_LDFLAGS = -ObjC ${PODS_BRYSERIALANIMATIONQUEUE_OTHER_LDFLAGS}
5 | PODS_ROOT = ${SRCROOT}
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-BRYSerialAnimationQueue-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_BRYSerialAnimationQueue : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_BRYSerialAnimationQueue
5 | @end
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-BRYSerialAnimationQueue-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "Pods-environment.h"
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-BRYSerialAnimationQueue.xcconfig:
--------------------------------------------------------------------------------
1 | PODS_BRYSERIALANIMATIONQUEUE_OTHER_LDFLAGS = -framework Foundation -framework UIKit
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIColor-Hex-Private.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods-UIColor-Hex.xcconfig"
2 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/UIColor-Hex" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/BRYSerialAnimationQueue" "${PODS_ROOT}/Headers/UIColor-Hex" "${PODS_ROOT}/Headers/UIImage+BetterAdditions"
4 | OTHER_LDFLAGS = -ObjC
5 | PODS_ROOT = ${SRCROOT}
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIColor-Hex-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_UIColor_Hex : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_UIColor_Hex
5 | @end
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIColor-Hex-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "Pods-environment.h"
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIColor-Hex.xcconfig:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/StyleShare/SSBouncyButton/6ce37bae12e30d6325ea80969db82783dd14fee0/SSBouncyButtonDemo/Pods/Pods-UIColor-Hex.xcconfig
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIImage+BetterAdditions-Private.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods-UIImage+BetterAdditions.xcconfig"
2 | GCC_PREPROCESSOR_DEFINITIONS = COCOAPODS=1
3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/BuildHeaders" "${PODS_ROOT}/BuildHeaders/UIImage+BetterAdditions" "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/BRYSerialAnimationQueue" "${PODS_ROOT}/Headers/UIColor-Hex" "${PODS_ROOT}/Headers/UIImage+BetterAdditions"
4 | OTHER_LDFLAGS = -ObjC ${PODS_UIIMAGE_BETTERADDITIONS_OTHER_LDFLAGS}
5 | PODS_ROOT = ${SRCROOT}
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIImage+BetterAdditions-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_UIImage_BetterAdditions : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_UIImage_BetterAdditions
5 | @end
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIImage+BetterAdditions-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #endif
4 |
5 | #import "Pods-environment.h"
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-UIImage+BetterAdditions.xcconfig:
--------------------------------------------------------------------------------
1 | PODS_UIIMAGE_BETTERADDITIONS_OTHER_LDFLAGS = -framework UIKit
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## BRYSerialAnimationQueue
5 |
6 | The MIT License (MIT)
7 |
8 | Copyright (c) 2013 Bryan Irace
9 |
10 | Permission is hereby granted, free of charge, to any person obtaining a copy of
11 | this software and associated documentation files (the "Software"), to deal in
12 | the Software without restriction, including without limitation the rights to
13 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
14 | the Software, and to permit persons to whom the Software is furnished to do so,
15 | subject to the following conditions:
16 |
17 | The above copyright notice and this permission notice shall be included in all
18 | copies or substantial portions of the Software.
19 |
20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
22 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
23 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
24 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
25 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 |
27 |
28 | ## UIColor-Hex
29 |
30 | Copyright (c) 2014 nakajijapan
31 |
32 | Permission is hereby granted, free of charge, to any person obtaining a copy
33 | of this software and associated documentation files (the "Software"), to deal
34 | in the Software without restriction, including without limitation the rights
35 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
36 | copies of the Software, and to permit persons to whom the Software is
37 | furnished to do so, subject to the following conditions:
38 |
39 | The above copyright notice and this permission notice shall be included in
40 | all copies or substantial portions of the Software.
41 |
42 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
44 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
46 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
47 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
48 | THE SOFTWARE.
49 |
50 |
51 | ## UIImage+BetterAdditions
52 |
53 | The MIT License (MIT)
54 |
55 | Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
56 | 2014 Suyeol Jeon (http://xoul.kr)
57 |
58 | Permission is hereby granted, free of charge, to any person obtaining a copy
59 | of this software and associated documentation files (the "Software"), to deal
60 | in the Software without restriction, including without limitation the rights
61 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
62 | copies of the Software, and to permit persons to whom the Software is
63 | furnished to do so, subject to the following conditions:
64 |
65 | The above copyright notice and this permission notice shall be included in all
66 | copies or substantial portions of the Software.
67 |
68 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
69 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
70 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
72 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
73 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
74 | SOFTWARE.
75 |
76 | Generated by CocoaPods - http://cocoapods.org
77 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | The MIT License (MIT)
18 |
19 | Copyright (c) 2013 Bryan Irace
20 |
21 | Permission is hereby granted, free of charge, to any person obtaining a copy of
22 | this software and associated documentation files (the "Software"), to deal in
23 | the Software without restriction, including without limitation the rights to
24 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
25 | the Software, and to permit persons to whom the Software is furnished to do so,
26 | subject to the following conditions:
27 |
28 | The above copyright notice and this permission notice shall be included in all
29 | copies or substantial portions of the Software.
30 |
31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
33 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
34 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
35 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
36 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 |
38 | Title
39 | BRYSerialAnimationQueue
40 | Type
41 | PSGroupSpecifier
42 |
43 |
44 | FooterText
45 | Copyright (c) 2014 nakajijapan <pp.kupepo.gattyanmo@gmail.com>
46 |
47 | Permission is hereby granted, free of charge, to any person obtaining a copy
48 | of this software and associated documentation files (the "Software"), to deal
49 | in the Software without restriction, including without limitation the rights
50 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
51 | copies of the Software, and to permit persons to whom the Software is
52 | furnished to do so, subject to the following conditions:
53 |
54 | The above copyright notice and this permission notice shall be included in
55 | all copies or substantial portions of the Software.
56 |
57 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
58 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
59 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
60 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
61 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
62 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
63 | THE SOFTWARE.
64 |
65 | Title
66 | UIColor-Hex
67 | Type
68 | PSGroupSpecifier
69 |
70 |
71 | FooterText
72 | The MIT License (MIT)
73 |
74 | Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
75 | 2014 Suyeol Jeon (http://xoul.kr)
76 |
77 | Permission is hereby granted, free of charge, to any person obtaining a copy
78 | of this software and associated documentation files (the "Software"), to deal
79 | in the Software without restriction, including without limitation the rights
80 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
81 | copies of the Software, and to permit persons to whom the Software is
82 | furnished to do so, subject to the following conditions:
83 |
84 | The above copyright notice and this permission notice shall be included in all
85 | copies or substantial portions of the Software.
86 |
87 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
88 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
89 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
90 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
91 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
92 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
93 | SOFTWARE.
94 |
95 | Title
96 | UIImage+BetterAdditions
97 | Type
98 | PSGroupSpecifier
99 |
100 |
101 | FooterText
102 | Generated by CocoaPods - http://cocoapods.org
103 | Title
104 |
105 | Type
106 | PSGroupSpecifier
107 |
108 |
109 | StringsTable
110 | Acknowledgements
111 | Title
112 | Acknowledgements
113 |
114 |
115 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods : NSObject
3 | @end
4 | @implementation PodsDummy_Pods
5 | @end
6 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-environment.h:
--------------------------------------------------------------------------------
1 |
2 | // To check if a library is compiled with CocoaPods you
3 | // can use the `COCOAPODS` macro definition which is
4 | // defined in the xcconfigs so it is available in
5 | // headers also when they are imported in the client
6 | // project.
7 |
8 |
9 | // BRYSerialAnimationQueue
10 | #define COCOAPODS_POD_AVAILABLE_BRYSerialAnimationQueue
11 | #define COCOAPODS_VERSION_MAJOR_BRYSerialAnimationQueue 1
12 | #define COCOAPODS_VERSION_MINOR_BRYSerialAnimationQueue 0
13 | #define COCOAPODS_VERSION_PATCH_BRYSerialAnimationQueue 0
14 |
15 | // UIColor-Hex
16 | #define COCOAPODS_POD_AVAILABLE_UIColor_Hex
17 | #define COCOAPODS_VERSION_MAJOR_UIColor_Hex 0
18 | #define COCOAPODS_VERSION_MINOR_UIColor_Hex 1
19 | #define COCOAPODS_VERSION_PATCH_UIColor_Hex 1
20 |
21 | // UIImage+BetterAdditions
22 | #define COCOAPODS_POD_AVAILABLE_UIImage_BetterAdditions
23 | #define COCOAPODS_VERSION_MAJOR_UIImage_BetterAdditions 2
24 | #define COCOAPODS_VERSION_MINOR_UIImage_BetterAdditions 0
25 | #define COCOAPODS_VERSION_PATCH_UIImage_BetterAdditions 0
26 |
27 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 |
4 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
5 | > "$RESOURCES_TO_COPY"
6 |
7 | install_resource()
8 | {
9 | case $1 in
10 | *.storyboard)
11 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
12 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .storyboard`.storyboardc" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
13 | ;;
14 | *.xib)
15 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib ${PODS_ROOT}/$1 --sdk ${SDKROOT}"
16 | ibtool --reference-external-strings-file --errors --warnings --notices --output-format human-readable-text --compile "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$1\" .xib`.nib" "${PODS_ROOT}/$1" --sdk "${SDKROOT}"
17 | ;;
18 | *.framework)
19 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
20 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
21 | echo "rsync -av ${PODS_ROOT}/$1 ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
22 | rsync -av "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
23 | ;;
24 | *.xcdatamodel)
25 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1"`.mom\""
26 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodel`.mom"
27 | ;;
28 | *.xcdatamodeld)
29 | echo "xcrun momc \"${PODS_ROOT}/$1\" \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd\""
30 | xcrun momc "${PODS_ROOT}/$1" "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$1" .xcdatamodeld`.momd"
31 | ;;
32 | *.xcassets)
33 | ;;
34 | /*)
35 | echo "$1"
36 | echo "$1" >> "$RESOURCES_TO_COPY"
37 | ;;
38 | *)
39 | echo "${PODS_ROOT}/$1"
40 | echo "${PODS_ROOT}/$1" >> "$RESOURCES_TO_COPY"
41 | ;;
42 | esac
43 | }
44 |
45 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
46 | if [[ "${ACTION}" == "install" ]]; then
47 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
48 | fi
49 | rm -f "$RESOURCES_TO_COPY"
50 |
51 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ `xcrun --find actool` ] && [ `find . -name '*.xcassets' | wc -l` -ne 0 ]
52 | then
53 | case "${TARGETED_DEVICE_FAMILY}" in
54 | 1,2)
55 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
56 | ;;
57 | 1)
58 | TARGET_DEVICE_ARGS="--target-device iphone"
59 | ;;
60 | 2)
61 | TARGET_DEVICE_ARGS="--target-device ipad"
62 | ;;
63 | *)
64 | TARGET_DEVICE_ARGS="--target-device mac"
65 | ;;
66 | esac
67 | find "${PWD}" -name "*.xcassets" -print0 | xargs -0 actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${IPHONEOS_DEPLOYMENT_TARGET}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
68 | fi
69 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods.xcconfig:
--------------------------------------------------------------------------------
1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
2 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers" "${PODS_ROOT}/Headers/BRYSerialAnimationQueue" "${PODS_ROOT}/Headers/UIColor-Hex" "${PODS_ROOT}/Headers/UIImage+BetterAdditions"
3 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers" -isystem "${PODS_ROOT}/Headers/BRYSerialAnimationQueue" -isystem "${PODS_ROOT}/Headers/UIColor-Hex" -isystem "${PODS_ROOT}/Headers/UIImage+BetterAdditions"
4 | OTHER_LDFLAGS = -ObjC -framework Foundation -framework UIKit
5 | PODS_ROOT = ${SRCROOT}/Pods
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/Pods.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | archiveVersion
6 | 1
7 | classes
8 |
9 | objectVersion
10 | 46
11 | objects
12 |
13 | 011108B05FCF401DAFF0AFD9
14 |
15 | children
16 |
17 | 927CA7793F1944B7BD3C50BD
18 |
19 | isa
20 | PBXGroup
21 | name
22 | Targets Support Files
23 | sourceTree
24 | <group>
25 |
26 | 0B8DBE80AA8E40E5B46C88E8
27 |
28 | children
29 |
30 | 1CE48AC964CD46CB9ADD65B4
31 | CA4D7439DAEA4185854DC0B1
32 | 521A061D150E424282475310
33 | 97E35398A6434B71BF59B38C
34 |
35 | isa
36 | PBXGroup
37 | name
38 | Support Files
39 | sourceTree
40 | SOURCE_ROOT
41 |
42 | 0BA831436F70406BA19213E1
43 |
44 | includeInIndex
45 | 1
46 | isa
47 | PBXFileReference
48 | lastKnownFileType
49 | text
50 | path
51 | Pods-acknowledgements.markdown
52 | sourceTree
53 | <group>
54 |
55 | 0DE0B9642FD14588A811CBA3
56 |
57 | buildConfigurations
58 |
59 | 7009070A88EC4B99B72E6502
60 | D6DDC32836384BF6A91937B0
61 |
62 | defaultConfigurationIsVisible
63 | 0
64 | defaultConfigurationName
65 | Release
66 | isa
67 | XCConfigurationList
68 |
69 | 12F926C97DD548A8B4447C1E
70 |
71 | includeInIndex
72 | 1
73 | isa
74 | PBXFileReference
75 | lastKnownFileType
76 | text.xcconfig
77 | path
78 | Pods.xcconfig
79 | sourceTree
80 | <group>
81 |
82 | 133595F5E6564490AF5A5427
83 |
84 | includeInIndex
85 | 1
86 | isa
87 | PBXFileReference
88 | lastKnownFileType
89 | sourcecode.c.h
90 | path
91 | Pods-UIColor-Hex-prefix.pch
92 | sourceTree
93 | <group>
94 |
95 | 139B7F66DB12461ABF14A9E3
96 |
97 | fileRef
98 | B63C7D8908BA40F48A2BF0FD
99 | isa
100 | PBXBuildFile
101 |
102 | 1685F2960EB545BA81EDF1BB
103 |
104 | fileRef
105 | FE8F14D288DC488F985310EC
106 | isa
107 | PBXBuildFile
108 | settings
109 |
110 | COMPILER_FLAGS
111 | -fobjc-arc -DOS_OBJECT_USE_OBJC=0
112 |
113 |
114 | 19B3C714540445178A4CE227
115 |
116 | buildActionMask
117 | 2147483647
118 | files
119 |
120 | 53D1A28EDA7A419DB256A28B
121 | AFA67A6C36A64E1BB0784135
122 |
123 | isa
124 | PBXSourcesBuildPhase
125 | runOnlyForDeploymentPostprocessing
126 | 0
127 |
128 | 1CA9DE4094184462810A8E86
129 |
130 | fileRef
131 | 6A8064CFDE704FB79FEC1E25
132 | isa
133 | PBXBuildFile
134 |
135 | 1CE48AC964CD46CB9ADD65B4
136 |
137 | includeInIndex
138 | 1
139 | isa
140 | PBXFileReference
141 | lastKnownFileType
142 | text.xcconfig
143 | path
144 | Pods-BRYSerialAnimationQueue.xcconfig
145 | sourceTree
146 | <group>
147 |
148 | 1EABDBC04971436697F4CB0E
149 |
150 | fileRef
151 | 3F2BA51618204B9EB041D050
152 | isa
153 | PBXBuildFile
154 |
155 | 22354B15858B4F4783D16F77
156 |
157 | buildActionMask
158 | 2147483647
159 | files
160 |
161 | 59E3C554D7FE4A81BFD95B57
162 | C997B91B40514C08BEC06825
163 |
164 | isa
165 | PBXSourcesBuildPhase
166 | runOnlyForDeploymentPostprocessing
167 | 0
168 |
169 | 27BF5C5955494FF6BBBA4515
170 |
171 | includeInIndex
172 | 1
173 | isa
174 | PBXFileReference
175 | lastKnownFileType
176 | sourcecode.c.objc
177 | path
178 | Pods-UIImage+BetterAdditions-dummy.m
179 | sourceTree
180 | <group>
181 |
182 | 2B17AEBC9D464CE599FF0B89
183 |
184 | buildConfigurationList
185 | 2B4E8363395E412685B6029E
186 | buildPhases
187 |
188 | CA14832F4DAE4835B3E687A4
189 | 9BFE58C6F3D74ED2A1581723
190 | E837D37D25E5480FB27441CD
191 |
192 | buildRules
193 |
194 | dependencies
195 |
196 | isa
197 | PBXNativeTarget
198 | name
199 | Pods-UIColor-Hex
200 | productName
201 | Pods-UIColor-Hex
202 | productReference
203 | 66F993F26DEB481B99666F29
204 | productType
205 | com.apple.product-type.library.static
206 |
207 | 2B4E8363395E412685B6029E
208 |
209 | buildConfigurations
210 |
211 | ED133AE565E44F9F9B89D625
212 | C7A041E420614DBC9F1E1347
213 |
214 | defaultConfigurationIsVisible
215 | 0
216 | defaultConfigurationName
217 | Release
218 | isa
219 | XCConfigurationList
220 |
221 | 2E373D4331724ABE9117D417
222 |
223 | buildActionMask
224 | 2147483647
225 | files
226 |
227 | BB90EDA6FFB94A64B3C48181
228 | 55738DE42DF5474585DBC3A8
229 | 5BF16229D2D844E796C6859B
230 | 7A96C5BCED7D4948B88FA055
231 |
232 | isa
233 | PBXFrameworksBuildPhase
234 | runOnlyForDeploymentPostprocessing
235 | 0
236 |
237 | 35AD3D0A21B446E2A55F1D45
238 |
239 | buildConfigurations
240 |
241 | E2DBCF7EB3F340CEB88780BF
242 | D1B6C948E05144A4AC8086C2
243 |
244 | defaultConfigurationIsVisible
245 | 0
246 | defaultConfigurationName
247 | Release
248 | isa
249 | XCConfigurationList
250 |
251 | 38BCD81A4E8842F9A50D8599
252 |
253 | includeInIndex
254 | 1
255 | isa
256 | PBXFileReference
257 | lastKnownFileType
258 | text.xcconfig
259 | path
260 | Pods-UIImage+BetterAdditions-Private.xcconfig
261 | sourceTree
262 | <group>
263 |
264 | 3A2B09B8A66246BCA11F3898
265 |
266 | includeInIndex
267 | 1
268 | isa
269 | PBXFileReference
270 | lastKnownFileType
271 | sourcecode.c.h
272 | name
273 | BRYSerialAnimationQueue.h
274 | path
275 | Classes/BRYSerialAnimationQueue.h
276 | sourceTree
277 | <group>
278 |
279 | 3AEFBB8DBB924C2F9882B0DF
280 |
281 | children
282 |
283 | 3A2B09B8A66246BCA11F3898
284 | F2107A48B7F6439CA716AE2D
285 | 0B8DBE80AA8E40E5B46C88E8
286 |
287 | isa
288 | PBXGroup
289 | name
290 | BRYSerialAnimationQueue
291 | path
292 | BRYSerialAnimationQueue
293 | sourceTree
294 | <group>
295 |
296 | 3BD8CE745ECB44628D65B45D
297 |
298 | includeInIndex
299 | 1
300 | isa
301 | PBXFileReference
302 | lastKnownFileType
303 | sourcecode.c.objc
304 | path
305 | UIImage+BetterAdditions.m
306 | sourceTree
307 | <group>
308 |
309 | 3BE3570456284EDEBA272A38
310 |
311 | includeInIndex
312 | 1
313 | isa
314 | PBXFileReference
315 | lastKnownFileType
316 | sourcecode.c.h
317 | path
318 | Pods-UIImage+BetterAdditions-prefix.pch
319 | sourceTree
320 | <group>
321 |
322 | 3F2BA51618204B9EB041D050
323 |
324 | isa
325 | PBXFileReference
326 | lastKnownFileType
327 | wrapper.framework
328 | name
329 | Foundation.framework
330 | path
331 | Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/Foundation.framework
332 | sourceTree
333 | DEVELOPER_DIR
334 |
335 | 428F478E329A4A6B8D87C5F6
336 |
337 | baseConfigurationReference
338 | CA4D7439DAEA4185854DC0B1
339 | buildSettings
340 |
341 | ALWAYS_SEARCH_USER_PATHS
342 | NO
343 | COPY_PHASE_STRIP
344 | YES
345 | DSTROOT
346 | /tmp/xcodeproj.dst
347 | GCC_C_LANGUAGE_STANDARD
348 | gnu99
349 | GCC_PRECOMPILE_PREFIX_HEADER
350 | YES
351 | GCC_PREFIX_HEADER
352 | Pods-BRYSerialAnimationQueue-prefix.pch
353 | GCC_VERSION
354 | com.apple.compilers.llvm.clang.1_0
355 | INSTALL_PATH
356 | $(BUILT_PRODUCTS_DIR)
357 | IPHONEOS_DEPLOYMENT_TARGET
358 | 7.1
359 | OTHER_CFLAGS
360 |
361 | -DNS_BLOCK_ASSERTIONS=1
362 | $(inherited)
363 |
364 | OTHER_CPLUSPLUSFLAGS
365 |
366 | -DNS_BLOCK_ASSERTIONS=1
367 | $(inherited)
368 |
369 | OTHER_LDFLAGS
370 |
371 | PRODUCT_NAME
372 | $(TARGET_NAME)
373 | PUBLIC_HEADERS_FOLDER_PATH
374 | $(TARGET_NAME)
375 | SDKROOT
376 | iphoneos
377 | SKIP_INSTALL
378 | YES
379 | VALIDATE_PRODUCT
380 | YES
381 |
382 | isa
383 | XCBuildConfiguration
384 | name
385 | Release
386 |
387 | 461BA5D1F60B4064B1A8E42B
388 |
389 | includeInIndex
390 | 1
391 | isa
392 | PBXFileReference
393 | lastKnownFileType
394 | text.plist.xml
395 | path
396 | Pods-acknowledgements.plist
397 | sourceTree
398 | <group>
399 |
400 | 4A8A6F833E814C56B672214E
401 |
402 | buildActionMask
403 | 2147483647
404 | files
405 |
406 | 57F0A3B6CCE847A181913E6A
407 |
408 | isa
409 | PBXHeadersBuildPhase
410 | runOnlyForDeploymentPostprocessing
411 | 0
412 |
413 | 4C1A8AF46EFC4523913A8E50
414 |
415 | includeInIndex
416 | 1
417 | isa
418 | PBXFileReference
419 | lastKnownFileType
420 | text
421 | name
422 | Podfile
423 | path
424 | ../Podfile
425 | sourceTree
426 | SOURCE_ROOT
427 | xcLanguageSpecificationIdentifier
428 | xcode.lang.ruby
429 |
430 | 507826F583A348F295A3086F
431 |
432 | fileRef
433 | E28BDDC5976D497B84AD1919
434 | isa
435 | PBXBuildFile
436 |
437 | 521A061D150E424282475310
438 |
439 | includeInIndex
440 | 1
441 | isa
442 | PBXFileReference
443 | lastKnownFileType
444 | sourcecode.c.objc
445 | path
446 | Pods-BRYSerialAnimationQueue-dummy.m
447 | sourceTree
448 | <group>
449 |
450 | 53D1A28EDA7A419DB256A28B
451 |
452 | fileRef
453 | F2107A48B7F6439CA716AE2D
454 | isa
455 | PBXBuildFile
456 | settings
457 |
458 | COMPILER_FLAGS
459 | -fobjc-arc -DOS_OBJECT_USE_OBJC=0
460 |
461 |
462 | 55738DE42DF5474585DBC3A8
463 |
464 | fileRef
465 | D4B8A4CAF54449E2B847DC50
466 | isa
467 | PBXBuildFile
468 |
469 | 57F0A3B6CCE847A181913E6A
470 |
471 | fileRef
472 | 890BDD7D97114952B767F0D9
473 | isa
474 | PBXBuildFile
475 |
476 | 58CC4297267A43B4A93C73F4
477 |
478 | buildActionMask
479 | 2147483647
480 | files
481 |
482 | 1EABDBC04971436697F4CB0E
483 | 507826F583A348F295A3086F
484 |
485 | isa
486 | PBXFrameworksBuildPhase
487 | runOnlyForDeploymentPostprocessing
488 | 0
489 |
490 | 59E3C554D7FE4A81BFD95B57
491 |
492 | fileRef
493 | 27BF5C5955494FF6BBBA4515
494 | isa
495 | PBXBuildFile
496 |
497 | 5A8E2BAD8FD7465BB83EF121
498 |
499 | includeInIndex
500 | 1
501 | isa
502 | PBXFileReference
503 | lastKnownFileType
504 | text.xcconfig
505 | path
506 | Pods-UIImage+BetterAdditions.xcconfig
507 | sourceTree
508 | <group>
509 |
510 | 5BBF6AB6CFEE462394348CA9
511 |
512 | explicitFileType
513 | archive.ar
514 | includeInIndex
515 | 0
516 | isa
517 | PBXFileReference
518 | path
519 | libPods.a
520 | sourceTree
521 | BUILT_PRODUCTS_DIR
522 |
523 | 5BF16229D2D844E796C6859B
524 |
525 | fileRef
526 | 66F993F26DEB481B99666F29
527 | isa
528 | PBXBuildFile
529 |
530 | 5C1C1C5ED80B476395B62134
531 |
532 | buildActionMask
533 | 2147483647
534 | files
535 |
536 | 7B9CFB1A9C7F46BDA78908BA
537 |
538 | isa
539 | PBXHeadersBuildPhase
540 | runOnlyForDeploymentPostprocessing
541 | 0
542 |
543 | 600B5D2B6F3749F1A8F1D0F1
544 |
545 | buildConfigurationList
546 | 84D51EDFF43541128C5B5078
547 | buildPhases
548 |
549 | 19B3C714540445178A4CE227
550 | 58CC4297267A43B4A93C73F4
551 | 5C1C1C5ED80B476395B62134
552 |
553 | buildRules
554 |
555 | dependencies
556 |
557 | isa
558 | PBXNativeTarget
559 | name
560 | Pods-BRYSerialAnimationQueue
561 | productName
562 | Pods-BRYSerialAnimationQueue
563 | productReference
564 | D4B8A4CAF54449E2B847DC50
565 | productType
566 | com.apple.product-type.library.static
567 |
568 | 66F993F26DEB481B99666F29
569 |
570 | explicitFileType
571 | archive.ar
572 | includeInIndex
573 | 0
574 | isa
575 | PBXFileReference
576 | path
577 | libPods-UIColor-Hex.a
578 | sourceTree
579 | BUILT_PRODUCTS_DIR
580 |
581 | 6743514778F944FCAF8F8A14
582 |
583 | buildSettings
584 |
585 | ALWAYS_SEARCH_USER_PATHS
586 | NO
587 | CLANG_CXX_LANGUAGE_STANDARD
588 | gnu++0x
589 | CLANG_CXX_LIBRARY
590 | libc++
591 | CLANG_ENABLE_MODULES
592 | YES
593 | CLANG_ENABLE_OBJC_ARC
594 | NO
595 | CLANG_WARN_BOOL_CONVERSION
596 | YES
597 | CLANG_WARN_CONSTANT_CONVERSION
598 | YES
599 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE
600 | YES
601 | CLANG_WARN_EMPTY_BODY
602 | YES
603 | CLANG_WARN_ENUM_CONVERSION
604 | YES
605 | CLANG_WARN_INT_CONVERSION
606 | YES
607 | CLANG_WARN_OBJC_ROOT_CLASS
608 | YES
609 | COPY_PHASE_STRIP
610 | NO
611 | ENABLE_NS_ASSERTIONS
612 | NO
613 | GCC_C_LANGUAGE_STANDARD
614 | gnu99
615 | GCC_WARN_64_TO_32_BIT_CONVERSION
616 | YES
617 | GCC_WARN_ABOUT_RETURN_TYPE
618 | YES
619 | GCC_WARN_UNDECLARED_SELECTOR
620 | YES
621 | GCC_WARN_UNINITIALIZED_AUTOS
622 | YES
623 | GCC_WARN_UNUSED_FUNCTION
624 | YES
625 | GCC_WARN_UNUSED_VARIABLE
626 | YES
627 | IPHONEOS_DEPLOYMENT_TARGET
628 | 7.1
629 | STRIP_INSTALLED_PRODUCT
630 | NO
631 | VALIDATE_PRODUCT
632 | YES
633 |
634 | isa
635 | XCBuildConfiguration
636 | name
637 | Release
638 |
639 | 680030E0DC7347EDB3844698
640 |
641 | children
642 |
643 | 5A8E2BAD8FD7465BB83EF121
644 | 38BCD81A4E8842F9A50D8599
645 | 27BF5C5955494FF6BBBA4515
646 | 3BE3570456284EDEBA272A38
647 |
648 | isa
649 | PBXGroup
650 | name
651 | Support Files
652 | sourceTree
653 | SOURCE_ROOT
654 |
655 | 6A8064CFDE704FB79FEC1E25
656 |
657 | includeInIndex
658 | 1
659 | isa
660 | PBXFileReference
661 | lastKnownFileType
662 | sourcecode.c.objc
663 | path
664 | Pods-UIColor-Hex-dummy.m
665 | sourceTree
666 | <group>
667 |
668 | 6C94024477A74C14BD7316A6
669 |
670 | buildActionMask
671 | 2147483647
672 | files
673 |
674 | 9EE80A205C204F398C95D7C6
675 |
676 | isa
677 | PBXSourcesBuildPhase
678 | runOnlyForDeploymentPostprocessing
679 | 0
680 |
681 | 6F573A2277CF48E783F28260
682 |
683 | containerPortal
684 | 6FE148FCC7F1430C8F85C09F
685 | isa
686 | PBXContainerItemProxy
687 | proxyType
688 | 1
689 | remoteGlobalIDString
690 | 600B5D2B6F3749F1A8F1D0F1
691 | remoteInfo
692 | Pods-BRYSerialAnimationQueue
693 |
694 | 6FE148FCC7F1430C8F85C09F
695 |
696 | attributes
697 |
698 | LastUpgradeCheck
699 | 0510
700 |
701 | buildConfigurationList
702 | F0A5AE26DF4E42D6BA2B0255
703 | compatibilityVersion
704 | Xcode 3.2
705 | developmentRegion
706 | English
707 | hasScannedForEncodings
708 | 0
709 | isa
710 | PBXProject
711 | knownRegions
712 |
713 | en
714 |
715 | mainGroup
716 | 975084B62DBD41ED997E50F4
717 | productRefGroup
718 | C6426A6D7B7A4A838445FA00
719 | projectDirPath
720 |
721 | projectReferences
722 |
723 | projectRoot
724 |
725 | targets
726 |
727 | 74AB68BE16374E51AF5E9EB4
728 | 600B5D2B6F3749F1A8F1D0F1
729 | 2B17AEBC9D464CE599FF0B89
730 | 827E465F1E0842099280BBF8
731 |
732 |
733 | 7009070A88EC4B99B72E6502
734 |
735 | baseConfigurationReference
736 | 12F926C97DD548A8B4447C1E
737 | buildSettings
738 |
739 | ALWAYS_SEARCH_USER_PATHS
740 | NO
741 | COPY_PHASE_STRIP
742 | NO
743 | DSTROOT
744 | /tmp/xcodeproj.dst
745 | GCC_C_LANGUAGE_STANDARD
746 | gnu99
747 | GCC_DYNAMIC_NO_PIC
748 | NO
749 | GCC_OPTIMIZATION_LEVEL
750 | 0
751 | GCC_PRECOMPILE_PREFIX_HEADER
752 | YES
753 | GCC_PREPROCESSOR_DEFINITIONS
754 |
755 | DEBUG=1
756 | $(inherited)
757 |
758 | GCC_SYMBOLS_PRIVATE_EXTERN
759 | NO
760 | GCC_VERSION
761 | com.apple.compilers.llvm.clang.1_0
762 | INSTALL_PATH
763 | $(BUILT_PRODUCTS_DIR)
764 | IPHONEOS_DEPLOYMENT_TARGET
765 | 7.1
766 | OTHER_LDFLAGS
767 |
768 | PRODUCT_NAME
769 | $(TARGET_NAME)
770 | PUBLIC_HEADERS_FOLDER_PATH
771 | $(TARGET_NAME)
772 | SDKROOT
773 | iphoneos
774 | SKIP_INSTALL
775 | YES
776 |
777 | isa
778 | XCBuildConfiguration
779 | name
780 | Debug
781 |
782 | 70E3A7C5AE794D50AF8B6CC8
783 |
784 | containerPortal
785 | 6FE148FCC7F1430C8F85C09F
786 | isa
787 | PBXContainerItemProxy
788 | proxyType
789 | 1
790 | remoteGlobalIDString
791 | 2B17AEBC9D464CE599FF0B89
792 | remoteInfo
793 | Pods-UIColor-Hex
794 |
795 | 74AB68BE16374E51AF5E9EB4
796 |
797 | buildConfigurationList
798 | 0DE0B9642FD14588A811CBA3
799 | buildPhases
800 |
801 | 6C94024477A74C14BD7316A6
802 | 2E373D4331724ABE9117D417
803 |
804 | buildRules
805 |
806 | dependencies
807 |
808 | F079555C4C4C47A6988849CA
809 | F7034B432B1F4F66A23E1956
810 | 8C1850D8C81C4DEDA6A9602C
811 |
812 | isa
813 | PBXNativeTarget
814 | name
815 | Pods
816 | productName
817 | Pods
818 | productReference
819 | 5BBF6AB6CFEE462394348CA9
820 | productType
821 | com.apple.product-type.library.static
822 |
823 | 7852701DC09B4716A35024A4
824 |
825 | includeInIndex
826 | 1
827 | isa
828 | PBXFileReference
829 | lastKnownFileType
830 | text.script.sh
831 | path
832 | Pods-resources.sh
833 | sourceTree
834 | <group>
835 |
836 | 7A96C5BCED7D4948B88FA055
837 |
838 | fileRef
839 | C491D463E86546338841D32E
840 | isa
841 | PBXBuildFile
842 |
843 | 7B57EB6FE74D413DA34E7979
844 |
845 | children
846 |
847 | 3F2BA51618204B9EB041D050
848 | E28BDDC5976D497B84AD1919
849 |
850 | isa
851 | PBXGroup
852 | name
853 | iOS
854 | sourceTree
855 | <group>
856 |
857 | 7B9CFB1A9C7F46BDA78908BA
858 |
859 | fileRef
860 | 3A2B09B8A66246BCA11F3898
861 | isa
862 | PBXBuildFile
863 |
864 | 827E465F1E0842099280BBF8
865 |
866 | buildConfigurationList
867 | 35AD3D0A21B446E2A55F1D45
868 | buildPhases
869 |
870 | 22354B15858B4F4783D16F77
871 | B624EE8135734257A22D4AAF
872 | 4A8A6F833E814C56B672214E
873 |
874 | buildRules
875 |
876 | dependencies
877 |
878 | isa
879 | PBXNativeTarget
880 | name
881 | Pods-UIImage+BetterAdditions
882 | productName
883 | Pods-UIImage+BetterAdditions
884 | productReference
885 | C491D463E86546338841D32E
886 | productType
887 | com.apple.product-type.library.static
888 |
889 | 84D51EDFF43541128C5B5078
890 |
891 | buildConfigurations
892 |
893 | 922130169E6F42C4A0183E22
894 | 428F478E329A4A6B8D87C5F6
895 |
896 | defaultConfigurationIsVisible
897 | 0
898 | defaultConfigurationName
899 | Release
900 | isa
901 | XCConfigurationList
902 |
903 | 8506AD00037D467CA7A522D7
904 |
905 | includeInIndex
906 | 1
907 | isa
908 | PBXFileReference
909 | lastKnownFileType
910 | text.xcconfig
911 | path
912 | Pods-UIColor-Hex-Private.xcconfig
913 | sourceTree
914 | <group>
915 |
916 | 890BDD7D97114952B767F0D9
917 |
918 | includeInIndex
919 | 1
920 | isa
921 | PBXFileReference
922 | lastKnownFileType
923 | sourcecode.c.h
924 | path
925 | UIImage+BetterAdditions.h
926 | sourceTree
927 | <group>
928 |
929 | 8C1850D8C81C4DEDA6A9602C
930 |
931 | isa
932 | PBXTargetDependency
933 | target
934 | 827E465F1E0842099280BBF8
935 | targetProxy
936 | A308C3B72057440BA28A10EF
937 |
938 | 911235001E46436DABF6F2DE
939 |
940 | buildSettings
941 |
942 | ALWAYS_SEARCH_USER_PATHS
943 | NO
944 | CLANG_CXX_LANGUAGE_STANDARD
945 | gnu++0x
946 | CLANG_CXX_LIBRARY
947 | libc++
948 | CLANG_ENABLE_MODULES
949 | YES
950 | CLANG_ENABLE_OBJC_ARC
951 | NO
952 | CLANG_WARN_BOOL_CONVERSION
953 | YES
954 | CLANG_WARN_CONSTANT_CONVERSION
955 | YES
956 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE
957 | YES
958 | CLANG_WARN_EMPTY_BODY
959 | YES
960 | CLANG_WARN_ENUM_CONVERSION
961 | YES
962 | CLANG_WARN_INT_CONVERSION
963 | YES
964 | CLANG_WARN_OBJC_ROOT_CLASS
965 | YES
966 | COPY_PHASE_STRIP
967 | YES
968 | GCC_C_LANGUAGE_STANDARD
969 | gnu99
970 | GCC_DYNAMIC_NO_PIC
971 | NO
972 | GCC_OPTIMIZATION_LEVEL
973 | 0
974 | GCC_PREPROCESSOR_DEFINITIONS
975 |
976 | DEBUG=1
977 | $(inherited)
978 |
979 | GCC_SYMBOLS_PRIVATE_EXTERN
980 | NO
981 | GCC_WARN_64_TO_32_BIT_CONVERSION
982 | YES
983 | GCC_WARN_ABOUT_RETURN_TYPE
984 | YES
985 | GCC_WARN_UNDECLARED_SELECTOR
986 | YES
987 | GCC_WARN_UNINITIALIZED_AUTOS
988 | YES
989 | GCC_WARN_UNUSED_FUNCTION
990 | YES
991 | GCC_WARN_UNUSED_VARIABLE
992 | YES
993 | IPHONEOS_DEPLOYMENT_TARGET
994 | 7.1
995 | ONLY_ACTIVE_ARCH
996 | YES
997 | STRIP_INSTALLED_PRODUCT
998 | NO
999 |
1000 | isa
1001 | XCBuildConfiguration
1002 | name
1003 | Debug
1004 |
1005 | 922130169E6F42C4A0183E22
1006 |
1007 | baseConfigurationReference
1008 | CA4D7439DAEA4185854DC0B1
1009 | buildSettings
1010 |
1011 | ALWAYS_SEARCH_USER_PATHS
1012 | NO
1013 | COPY_PHASE_STRIP
1014 | NO
1015 | DSTROOT
1016 | /tmp/xcodeproj.dst
1017 | GCC_C_LANGUAGE_STANDARD
1018 | gnu99
1019 | GCC_DYNAMIC_NO_PIC
1020 | NO
1021 | GCC_OPTIMIZATION_LEVEL
1022 | 0
1023 | GCC_PRECOMPILE_PREFIX_HEADER
1024 | YES
1025 | GCC_PREFIX_HEADER
1026 | Pods-BRYSerialAnimationQueue-prefix.pch
1027 | GCC_PREPROCESSOR_DEFINITIONS
1028 |
1029 | DEBUG=1
1030 | $(inherited)
1031 |
1032 | GCC_SYMBOLS_PRIVATE_EXTERN
1033 | NO
1034 | GCC_VERSION
1035 | com.apple.compilers.llvm.clang.1_0
1036 | INSTALL_PATH
1037 | $(BUILT_PRODUCTS_DIR)
1038 | IPHONEOS_DEPLOYMENT_TARGET
1039 | 7.1
1040 | OTHER_LDFLAGS
1041 |
1042 | PRODUCT_NAME
1043 | $(TARGET_NAME)
1044 | PUBLIC_HEADERS_FOLDER_PATH
1045 | $(TARGET_NAME)
1046 | SDKROOT
1047 | iphoneos
1048 | SKIP_INSTALL
1049 | YES
1050 |
1051 | isa
1052 | XCBuildConfiguration
1053 | name
1054 | Debug
1055 |
1056 | 927CA7793F1944B7BD3C50BD
1057 |
1058 | children
1059 |
1060 | 12F926C97DD548A8B4447C1E
1061 | 0BA831436F70406BA19213E1
1062 | 461BA5D1F60B4064B1A8E42B
1063 | 9B54FAE36F1B455D88D2492F
1064 | C62B94ECEE0C46F4B765A461
1065 | 7852701DC09B4716A35024A4
1066 |
1067 | isa
1068 | PBXGroup
1069 | name
1070 | Pods
1071 | sourceTree
1072 | <group>
1073 |
1074 | 975084B62DBD41ED997E50F4
1075 |
1076 | children
1077 |
1078 | 4C1A8AF46EFC4523913A8E50
1079 | D38090D3E05E4A7891233521
1080 | B5756DB755AB4ED9995083FA
1081 | C6426A6D7B7A4A838445FA00
1082 | 011108B05FCF401DAFF0AFD9
1083 |
1084 | isa
1085 | PBXGroup
1086 | sourceTree
1087 | <group>
1088 |
1089 | 97E35398A6434B71BF59B38C
1090 |
1091 | includeInIndex
1092 | 1
1093 | isa
1094 | PBXFileReference
1095 | lastKnownFileType
1096 | sourcecode.c.h
1097 | path
1098 | Pods-BRYSerialAnimationQueue-prefix.pch
1099 | sourceTree
1100 | <group>
1101 |
1102 | 985861F11BA14228AC9E7DF9
1103 |
1104 | includeInIndex
1105 | 1
1106 | isa
1107 | PBXFileReference
1108 | lastKnownFileType
1109 | text.xcconfig
1110 | path
1111 | Pods-UIColor-Hex.xcconfig
1112 | sourceTree
1113 | <group>
1114 |
1115 | 9B54FAE36F1B455D88D2492F
1116 |
1117 | includeInIndex
1118 | 1
1119 | isa
1120 | PBXFileReference
1121 | lastKnownFileType
1122 | sourcecode.c.objc
1123 | path
1124 | Pods-dummy.m
1125 | sourceTree
1126 | <group>
1127 |
1128 | 9BFE58C6F3D74ED2A1581723
1129 |
1130 | buildActionMask
1131 | 2147483647
1132 | files
1133 |
1134 | EC3B2A06BEAE49BF9FC47D9A
1135 |
1136 | isa
1137 | PBXFrameworksBuildPhase
1138 | runOnlyForDeploymentPostprocessing
1139 | 0
1140 |
1141 | 9EE80A205C204F398C95D7C6
1142 |
1143 | fileRef
1144 | 9B54FAE36F1B455D88D2492F
1145 | isa
1146 | PBXBuildFile
1147 |
1148 | A308C3B72057440BA28A10EF
1149 |
1150 | containerPortal
1151 | 6FE148FCC7F1430C8F85C09F
1152 | isa
1153 | PBXContainerItemProxy
1154 | proxyType
1155 | 1
1156 | remoteGlobalIDString
1157 | 827E465F1E0842099280BBF8
1158 | remoteInfo
1159 | Pods-UIImage+BetterAdditions
1160 |
1161 | A8BAC3FE63474DE2B75D5F70
1162 |
1163 | fileRef
1164 | 3F2BA51618204B9EB041D050
1165 | isa
1166 | PBXBuildFile
1167 |
1168 | AFA67A6C36A64E1BB0784135
1169 |
1170 | fileRef
1171 | 521A061D150E424282475310
1172 | isa
1173 | PBXBuildFile
1174 |
1175 | B5756DB755AB4ED9995083FA
1176 |
1177 | children
1178 |
1179 | 3AEFBB8DBB924C2F9882B0DF
1180 | D71D788EDE8F4E549649977A
1181 | FB07E6B4D1B94F8E8A176872
1182 |
1183 | isa
1184 | PBXGroup
1185 | name
1186 | Pods
1187 | sourceTree
1188 | <group>
1189 |
1190 | B624EE8135734257A22D4AAF
1191 |
1192 | buildActionMask
1193 | 2147483647
1194 | files
1195 |
1196 | A8BAC3FE63474DE2B75D5F70
1197 | D9BFF54F0A4243F2B53C2453
1198 |
1199 | isa
1200 | PBXFrameworksBuildPhase
1201 | runOnlyForDeploymentPostprocessing
1202 | 0
1203 |
1204 | B63C7D8908BA40F48A2BF0FD
1205 |
1206 | includeInIndex
1207 | 1
1208 | isa
1209 | PBXFileReference
1210 | lastKnownFileType
1211 | sourcecode.c.h
1212 | name
1213 | UIColor+Hex.h
1214 | path
1215 | Classes/UIColor+Hex.h
1216 | sourceTree
1217 | <group>
1218 |
1219 | BB90EDA6FFB94A64B3C48181
1220 |
1221 | fileRef
1222 | 3F2BA51618204B9EB041D050
1223 | isa
1224 | PBXBuildFile
1225 |
1226 | C491D463E86546338841D32E
1227 |
1228 | explicitFileType
1229 | archive.ar
1230 | includeInIndex
1231 | 0
1232 | isa
1233 | PBXFileReference
1234 | path
1235 | libPods-UIImage+BetterAdditions.a
1236 | sourceTree
1237 | BUILT_PRODUCTS_DIR
1238 |
1239 | C62B94ECEE0C46F4B765A461
1240 |
1241 | includeInIndex
1242 | 1
1243 | isa
1244 | PBXFileReference
1245 | lastKnownFileType
1246 | sourcecode.c.h
1247 | path
1248 | Pods-environment.h
1249 | sourceTree
1250 | <group>
1251 |
1252 | C6426A6D7B7A4A838445FA00
1253 |
1254 | children
1255 |
1256 | 5BBF6AB6CFEE462394348CA9
1257 | D4B8A4CAF54449E2B847DC50
1258 | 66F993F26DEB481B99666F29
1259 | C491D463E86546338841D32E
1260 |
1261 | isa
1262 | PBXGroup
1263 | name
1264 | Products
1265 | sourceTree
1266 | <group>
1267 |
1268 | C7A041E420614DBC9F1E1347
1269 |
1270 | baseConfigurationReference
1271 | 8506AD00037D467CA7A522D7
1272 | buildSettings
1273 |
1274 | ALWAYS_SEARCH_USER_PATHS
1275 | NO
1276 | COPY_PHASE_STRIP
1277 | YES
1278 | DSTROOT
1279 | /tmp/xcodeproj.dst
1280 | GCC_C_LANGUAGE_STANDARD
1281 | gnu99
1282 | GCC_PRECOMPILE_PREFIX_HEADER
1283 | YES
1284 | GCC_PREFIX_HEADER
1285 | Pods-UIColor-Hex-prefix.pch
1286 | GCC_VERSION
1287 | com.apple.compilers.llvm.clang.1_0
1288 | INSTALL_PATH
1289 | $(BUILT_PRODUCTS_DIR)
1290 | IPHONEOS_DEPLOYMENT_TARGET
1291 | 7.1
1292 | OTHER_CFLAGS
1293 |
1294 | -DNS_BLOCK_ASSERTIONS=1
1295 | $(inherited)
1296 |
1297 | OTHER_CPLUSPLUSFLAGS
1298 |
1299 | -DNS_BLOCK_ASSERTIONS=1
1300 | $(inherited)
1301 |
1302 | OTHER_LDFLAGS
1303 |
1304 | PRODUCT_NAME
1305 | $(TARGET_NAME)
1306 | PUBLIC_HEADERS_FOLDER_PATH
1307 | $(TARGET_NAME)
1308 | SDKROOT
1309 | iphoneos
1310 | SKIP_INSTALL
1311 | YES
1312 | VALIDATE_PRODUCT
1313 | YES
1314 |
1315 | isa
1316 | XCBuildConfiguration
1317 | name
1318 | Release
1319 |
1320 | C997B91B40514C08BEC06825
1321 |
1322 | fileRef
1323 | 3BD8CE745ECB44628D65B45D
1324 | isa
1325 | PBXBuildFile
1326 | settings
1327 |
1328 | COMPILER_FLAGS
1329 | -fobjc-arc -DOS_OBJECT_USE_OBJC=0
1330 |
1331 |
1332 | CA14832F4DAE4835B3E687A4
1333 |
1334 | buildActionMask
1335 | 2147483647
1336 | files
1337 |
1338 | 1CA9DE4094184462810A8E86
1339 | 1685F2960EB545BA81EDF1BB
1340 |
1341 | isa
1342 | PBXSourcesBuildPhase
1343 | runOnlyForDeploymentPostprocessing
1344 | 0
1345 |
1346 | CA4D7439DAEA4185854DC0B1
1347 |
1348 | includeInIndex
1349 | 1
1350 | isa
1351 | PBXFileReference
1352 | lastKnownFileType
1353 | text.xcconfig
1354 | path
1355 | Pods-BRYSerialAnimationQueue-Private.xcconfig
1356 | sourceTree
1357 | <group>
1358 |
1359 | D1B6C948E05144A4AC8086C2
1360 |
1361 | baseConfigurationReference
1362 | 38BCD81A4E8842F9A50D8599
1363 | buildSettings
1364 |
1365 | ALWAYS_SEARCH_USER_PATHS
1366 | NO
1367 | COPY_PHASE_STRIP
1368 | YES
1369 | DSTROOT
1370 | /tmp/xcodeproj.dst
1371 | GCC_C_LANGUAGE_STANDARD
1372 | gnu99
1373 | GCC_PRECOMPILE_PREFIX_HEADER
1374 | YES
1375 | GCC_PREFIX_HEADER
1376 | Pods-UIImage+BetterAdditions-prefix.pch
1377 | GCC_VERSION
1378 | com.apple.compilers.llvm.clang.1_0
1379 | INSTALL_PATH
1380 | $(BUILT_PRODUCTS_DIR)
1381 | IPHONEOS_DEPLOYMENT_TARGET
1382 | 7.1
1383 | OTHER_CFLAGS
1384 |
1385 | -DNS_BLOCK_ASSERTIONS=1
1386 | $(inherited)
1387 |
1388 | OTHER_CPLUSPLUSFLAGS
1389 |
1390 | -DNS_BLOCK_ASSERTIONS=1
1391 | $(inherited)
1392 |
1393 | OTHER_LDFLAGS
1394 |
1395 | PRODUCT_NAME
1396 | $(TARGET_NAME)
1397 | PUBLIC_HEADERS_FOLDER_PATH
1398 | $(TARGET_NAME)
1399 | SDKROOT
1400 | iphoneos
1401 | SKIP_INSTALL
1402 | YES
1403 | VALIDATE_PRODUCT
1404 | YES
1405 |
1406 | isa
1407 | XCBuildConfiguration
1408 | name
1409 | Release
1410 |
1411 | D38090D3E05E4A7891233521
1412 |
1413 | children
1414 |
1415 | 7B57EB6FE74D413DA34E7979
1416 |
1417 | isa
1418 | PBXGroup
1419 | name
1420 | Frameworks
1421 | sourceTree
1422 | <group>
1423 |
1424 | D4B8A4CAF54449E2B847DC50
1425 |
1426 | explicitFileType
1427 | archive.ar
1428 | includeInIndex
1429 | 0
1430 | isa
1431 | PBXFileReference
1432 | path
1433 | libPods-BRYSerialAnimationQueue.a
1434 | sourceTree
1435 | BUILT_PRODUCTS_DIR
1436 |
1437 | D6DDC32836384BF6A91937B0
1438 |
1439 | baseConfigurationReference
1440 | 12F926C97DD548A8B4447C1E
1441 | buildSettings
1442 |
1443 | ALWAYS_SEARCH_USER_PATHS
1444 | NO
1445 | COPY_PHASE_STRIP
1446 | YES
1447 | DSTROOT
1448 | /tmp/xcodeproj.dst
1449 | GCC_C_LANGUAGE_STANDARD
1450 | gnu99
1451 | GCC_PRECOMPILE_PREFIX_HEADER
1452 | YES
1453 | GCC_VERSION
1454 | com.apple.compilers.llvm.clang.1_0
1455 | INSTALL_PATH
1456 | $(BUILT_PRODUCTS_DIR)
1457 | IPHONEOS_DEPLOYMENT_TARGET
1458 | 7.1
1459 | OTHER_CFLAGS
1460 |
1461 | -DNS_BLOCK_ASSERTIONS=1
1462 | $(inherited)
1463 |
1464 | OTHER_CPLUSPLUSFLAGS
1465 |
1466 | -DNS_BLOCK_ASSERTIONS=1
1467 | $(inherited)
1468 |
1469 | OTHER_LDFLAGS
1470 |
1471 | PRODUCT_NAME
1472 | $(TARGET_NAME)
1473 | PUBLIC_HEADERS_FOLDER_PATH
1474 | $(TARGET_NAME)
1475 | SDKROOT
1476 | iphoneos
1477 | SKIP_INSTALL
1478 | YES
1479 | VALIDATE_PRODUCT
1480 | YES
1481 |
1482 | isa
1483 | XCBuildConfiguration
1484 | name
1485 | Release
1486 |
1487 | D71D788EDE8F4E549649977A
1488 |
1489 | children
1490 |
1491 | B63C7D8908BA40F48A2BF0FD
1492 | FE8F14D288DC488F985310EC
1493 | EB6BD078226B40D697A823A3
1494 |
1495 | isa
1496 | PBXGroup
1497 | name
1498 | UIColor-Hex
1499 | path
1500 | UIColor-Hex
1501 | sourceTree
1502 | <group>
1503 |
1504 | D9BFF54F0A4243F2B53C2453
1505 |
1506 | fileRef
1507 | E28BDDC5976D497B84AD1919
1508 | isa
1509 | PBXBuildFile
1510 |
1511 | E28BDDC5976D497B84AD1919
1512 |
1513 | isa
1514 | PBXFileReference
1515 | lastKnownFileType
1516 | wrapper.framework
1517 | name
1518 | UIKit.framework
1519 | path
1520 | Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/System/Library/Frameworks/UIKit.framework
1521 | sourceTree
1522 | DEVELOPER_DIR
1523 |
1524 | E2DBCF7EB3F340CEB88780BF
1525 |
1526 | baseConfigurationReference
1527 | 38BCD81A4E8842F9A50D8599
1528 | buildSettings
1529 |
1530 | ALWAYS_SEARCH_USER_PATHS
1531 | NO
1532 | COPY_PHASE_STRIP
1533 | NO
1534 | DSTROOT
1535 | /tmp/xcodeproj.dst
1536 | GCC_C_LANGUAGE_STANDARD
1537 | gnu99
1538 | GCC_DYNAMIC_NO_PIC
1539 | NO
1540 | GCC_OPTIMIZATION_LEVEL
1541 | 0
1542 | GCC_PRECOMPILE_PREFIX_HEADER
1543 | YES
1544 | GCC_PREFIX_HEADER
1545 | Pods-UIImage+BetterAdditions-prefix.pch
1546 | GCC_PREPROCESSOR_DEFINITIONS
1547 |
1548 | DEBUG=1
1549 | $(inherited)
1550 |
1551 | GCC_SYMBOLS_PRIVATE_EXTERN
1552 | NO
1553 | GCC_VERSION
1554 | com.apple.compilers.llvm.clang.1_0
1555 | INSTALL_PATH
1556 | $(BUILT_PRODUCTS_DIR)
1557 | IPHONEOS_DEPLOYMENT_TARGET
1558 | 7.1
1559 | OTHER_LDFLAGS
1560 |
1561 | PRODUCT_NAME
1562 | $(TARGET_NAME)
1563 | PUBLIC_HEADERS_FOLDER_PATH
1564 | $(TARGET_NAME)
1565 | SDKROOT
1566 | iphoneos
1567 | SKIP_INSTALL
1568 | YES
1569 |
1570 | isa
1571 | XCBuildConfiguration
1572 | name
1573 | Debug
1574 |
1575 | E837D37D25E5480FB27441CD
1576 |
1577 | buildActionMask
1578 | 2147483647
1579 | files
1580 |
1581 | 139B7F66DB12461ABF14A9E3
1582 |
1583 | isa
1584 | PBXHeadersBuildPhase
1585 | runOnlyForDeploymentPostprocessing
1586 | 0
1587 |
1588 | EB6BD078226B40D697A823A3
1589 |
1590 | children
1591 |
1592 | 985861F11BA14228AC9E7DF9
1593 | 8506AD00037D467CA7A522D7
1594 | 6A8064CFDE704FB79FEC1E25
1595 | 133595F5E6564490AF5A5427
1596 |
1597 | isa
1598 | PBXGroup
1599 | name
1600 | Support Files
1601 | sourceTree
1602 | SOURCE_ROOT
1603 |
1604 | EC3B2A06BEAE49BF9FC47D9A
1605 |
1606 | fileRef
1607 | 3F2BA51618204B9EB041D050
1608 | isa
1609 | PBXBuildFile
1610 |
1611 | ED133AE565E44F9F9B89D625
1612 |
1613 | baseConfigurationReference
1614 | 8506AD00037D467CA7A522D7
1615 | buildSettings
1616 |
1617 | ALWAYS_SEARCH_USER_PATHS
1618 | NO
1619 | COPY_PHASE_STRIP
1620 | NO
1621 | DSTROOT
1622 | /tmp/xcodeproj.dst
1623 | GCC_C_LANGUAGE_STANDARD
1624 | gnu99
1625 | GCC_DYNAMIC_NO_PIC
1626 | NO
1627 | GCC_OPTIMIZATION_LEVEL
1628 | 0
1629 | GCC_PRECOMPILE_PREFIX_HEADER
1630 | YES
1631 | GCC_PREFIX_HEADER
1632 | Pods-UIColor-Hex-prefix.pch
1633 | GCC_PREPROCESSOR_DEFINITIONS
1634 |
1635 | DEBUG=1
1636 | $(inherited)
1637 |
1638 | GCC_SYMBOLS_PRIVATE_EXTERN
1639 | NO
1640 | GCC_VERSION
1641 | com.apple.compilers.llvm.clang.1_0
1642 | INSTALL_PATH
1643 | $(BUILT_PRODUCTS_DIR)
1644 | IPHONEOS_DEPLOYMENT_TARGET
1645 | 7.1
1646 | OTHER_LDFLAGS
1647 |
1648 | PRODUCT_NAME
1649 | $(TARGET_NAME)
1650 | PUBLIC_HEADERS_FOLDER_PATH
1651 | $(TARGET_NAME)
1652 | SDKROOT
1653 | iphoneos
1654 | SKIP_INSTALL
1655 | YES
1656 |
1657 | isa
1658 | XCBuildConfiguration
1659 | name
1660 | Debug
1661 |
1662 | F079555C4C4C47A6988849CA
1663 |
1664 | isa
1665 | PBXTargetDependency
1666 | target
1667 | 600B5D2B6F3749F1A8F1D0F1
1668 | targetProxy
1669 | 6F573A2277CF48E783F28260
1670 |
1671 | F0A5AE26DF4E42D6BA2B0255
1672 |
1673 | buildConfigurations
1674 |
1675 | 911235001E46436DABF6F2DE
1676 | 6743514778F944FCAF8F8A14
1677 |
1678 | defaultConfigurationIsVisible
1679 | 0
1680 | defaultConfigurationName
1681 | Release
1682 | isa
1683 | XCConfigurationList
1684 |
1685 | F2107A48B7F6439CA716AE2D
1686 |
1687 | includeInIndex
1688 | 1
1689 | isa
1690 | PBXFileReference
1691 | lastKnownFileType
1692 | sourcecode.c.objc
1693 | name
1694 | BRYSerialAnimationQueue.m
1695 | path
1696 | Classes/BRYSerialAnimationQueue.m
1697 | sourceTree
1698 | <group>
1699 |
1700 | F7034B432B1F4F66A23E1956
1701 |
1702 | isa
1703 | PBXTargetDependency
1704 | target
1705 | 2B17AEBC9D464CE599FF0B89
1706 | targetProxy
1707 | 70E3A7C5AE794D50AF8B6CC8
1708 |
1709 | FB07E6B4D1B94F8E8A176872
1710 |
1711 | children
1712 |
1713 | 890BDD7D97114952B767F0D9
1714 | 3BD8CE745ECB44628D65B45D
1715 | 680030E0DC7347EDB3844698
1716 |
1717 | isa
1718 | PBXGroup
1719 | name
1720 | UIImage+BetterAdditions
1721 | path
1722 | UIImage+BetterAdditions
1723 | sourceTree
1724 | <group>
1725 |
1726 | FE8F14D288DC488F985310EC
1727 |
1728 | includeInIndex
1729 | 1
1730 | isa
1731 | PBXFileReference
1732 | lastKnownFileType
1733 | sourcecode.c.objc
1734 | name
1735 | UIColor+Hex.m
1736 | path
1737 | Classes/UIColor+Hex.m
1738 | sourceTree
1739 | <group>
1740 |
1741 |
1742 | rootObject
1743 | 6FE148FCC7F1430C8F85C09F
1744 |
1745 |
1746 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIColor-Hex/Classes/UIColor+Hex.h:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Hex.h
3 | //
4 | // Created by nakajijapan
5 | //
6 |
7 | #import
8 |
9 | @interface UIColor (Hex)
10 |
11 | + (UIColor *)colorWithHex:(NSInteger)hex;
12 | + (UIColor *)colorWithHex:(NSInteger)hex alpha:(CGFloat)alpha;
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIColor-Hex/Classes/UIColor+Hex.m:
--------------------------------------------------------------------------------
1 | //
2 | // UIColor+Hex.m
3 | //
4 | // Created by nakajijapan
5 | //
6 |
7 | #import "UIColor+Hex.h"
8 |
9 | @implementation UIColor (Hex)
10 |
11 | + (UIColor *)colorWithHex:(NSInteger)hex
12 | {
13 | return [self colorWithHex:hex alpha:1.0];
14 | }
15 |
16 | + (UIColor *)colorWithHex:(NSInteger)hex alpha:(CGFloat)alpha
17 | {
18 | CGFloat red = (CGFloat)((0xff0000 & hex) >> 16) / 255.0;
19 | CGFloat green = (CGFloat)((0xff00 & hex) >> 8) / 255.0;
20 | CGFloat blue = (CGFloat)(0xff & hex) / 255.0;
21 | return [UIColor colorWithRed: red green: green blue: blue alpha: alpha];
22 | }
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIColor-Hex/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014 nakajijapan
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining a copy
4 | of this software and associated documentation files (the "Software"), to deal
5 | in the Software without restriction, including without limitation the rights
6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 | copies of the Software, and to permit persons to whom the Software is
8 | furnished to do so, subject to the following conditions:
9 |
10 | The above copyright notice and this permission notice shall be included in
11 | all copies or substantial portions of the Software.
12 |
13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19 | THE SOFTWARE.
20 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIColor-Hex/README.md:
--------------------------------------------------------------------------------
1 | # UIColor-Hex
2 |
3 | [](http://cocoadocs.org/docsets/UIColor-Hex)
4 | [](http://cocoadocs.org/docsets/UIColor-Hex)
5 | [](https://travis-ci.org/nakajijapan/UIColor-Hex)
6 |
7 | ## Installation
8 |
9 | ### CocoaPods
10 |
11 | ```
12 | pod "UIColor-Hex"
13 | ```
14 |
15 | ## Usage
16 |
17 | ```
18 | # red
19 | [UIColor colorWithHex:0xff0000];
20 |
21 | # red
22 | [UIColor colorWithHex:0xff0000 alpha:0.1];
23 | ```
24 |
25 | ## Author
26 |
27 | nakajijapan
28 |
29 | ## License
30 |
31 | UIColor-Hex is available under the MIT license. See the LICENSE file for more info.
32 |
33 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIImage+BetterAdditions/LICENSE.txt:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
4 | 2014 Suyeol Jeon (http://xoul.kr)
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
23 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIImage+BetterAdditions/README.md:
--------------------------------------------------------------------------------
1 | UIImage-BetterAdditions
2 | =======================
3 |
4 | This category of UIImage add methods to generate dynamically images from colors, adding corner radius (for each corner), tinting images, etc. Use this category if you want to add "colored style" to your app without having to generate colored graphic resources.
5 |
6 | Right now the category supports four types of operations:
7 |
8 | ###I. Create images for a color, size & corner radius
9 |
10 |
11 | The folowing methods are used to generate a UIImage for a specific color, size and/or corner radius.
12 |
13 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size;
14 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size cornerRadius:(CGFloat)cornerRadius;
15 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size cornerInset:(UICornerInset)cornerInset;
16 |
17 | ###II. Create resizable images for a color & corner radius
18 |
19 | These methods are perfect to use inside `UIButton`s or `UIImageView`s if you are plannig to add a specific background color with a corner radius but you don't want to use `QuartzCore`. Also, you can specify which corner you want to round.
20 |
21 |
22 | + (UIImage*)resizableImageWithColor:(UIColor*)color;
23 | + (UIImage*)resizableImageWithColor:(UIColor*)color cornerRadius:(CGFloat)cornerRadius;
24 | + (UIImage*)resizableImageWithColor:(UIColor*)color cornerInset:(UICornerInset)cornerInset;
25 |
26 |
27 | ###III. Generate image with rounded corners
28 |
29 | You can use these methods to get a corner rounded image version from a current image.
30 |
31 | - (UIImage*)imageWithRoundedBounds;
32 | - (UIImage*)imageWithCornerRadius:(CGFloat)cornerRadius;
33 | - (UIImage*)imageWithCornerInset:(UICornerInset)cornerInset;
34 | - (BOOL)isValidCornerInset:(UICornerInset)cornerInset;
35 |
36 | ###IV. Generate tinted image from existing image
37 |
38 | In order to avoid to generate multiple versions of the same image to use in different states (in `UIButton` for example), your designers can just create a single version and with these methods you can generate tinted versions of the same image.
39 |
40 | + (UIImage*)imageNamed:(NSString *)name tintColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle;
41 | - (UIImage*)tintedImageWithColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle;
42 |
43 | You can use the following tint styles:
44 |
45 | * Use `UIImageTintedStyleKeepingAlpha` to keep transaprent pixels and tint only those that are not translucid.
46 | * Use `UIImageTintedStyleOverAlpha` to keep non transparent pixels and tint only those that are translucid.
47 |
48 | ###V. Superposing images
49 |
50 | You can easily create an image by superposing two images. Calling the method:
51 |
52 | - (UIImage *)imageAddingImage:(UIImage*)image offset:(CGPoint)offset;
53 |
54 | The result is an image with the caller image as background and the given image as a top image. Also, you can specify an offset for the top image.
55 |
56 | ###VI. Generate Gradients
57 | You can create linear gradient images (with two colors or more) using the following methods:
58 |
59 | + (UIImage*)imageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction;
60 | + (UIImage*)resizableImageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction;
61 |
62 | The first method returns an image with a gradient using the specified colors and direction of the given size.
63 | The second method returns the smallest resizable image that can generate the desired gradient for the given size.
64 |
65 |
66 | ### Notes
67 |
68 | 1. This category take care of scaling properties depending of the device resolution (retina or not) or the original image scale property.
69 |
70 | 2. All static methods cache images so two consequtives calls with the same parameters returns the same image.
71 |
72 | ---
73 | ## Licence ##
74 |
75 | ```
76 | The MIT License (MIT)
77 |
78 | Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
79 | 2014 Suyeol Jeon (http://xoul.kr)
80 |
81 | Permission is hereby granted, free of charge, to any person obtaining a copy
82 | of this software and associated documentation files (the "Software"), to deal
83 | in the Software without restriction, including without limitation the rights
84 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
85 | copies of the Software, and to permit persons to whom the Software is
86 | furnished to do so, subject to the following conditions:
87 |
88 | The above copyright notice and this permission notice shall be included in all
89 | copies or substantial portions of the Software.
90 |
91 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
92 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
93 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
94 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
95 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
96 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
97 | SOFTWARE.
98 | ```
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIImage+BetterAdditions/UIImage+BetterAdditions.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
5 | // 2014 Suyeol Jeon (http://xoul.kr)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 | #import
27 |
28 | typedef struct __UICornerInset
29 | {
30 | CGFloat topLeft;
31 | CGFloat topRight;
32 | CGFloat bottomLeft;
33 | CGFloat bottomRight;
34 | } UICornerInset;
35 |
36 | UIKIT_EXTERN const UICornerInset UICornerInsetZero;
37 |
38 | UIKIT_STATIC_INLINE UICornerInset UICornerInsetMake(CGFloat topLeft, CGFloat topRight, CGFloat bottomLeft, CGFloat bottomRight)
39 | {
40 | UICornerInset cornerInset = {topLeft, topRight, bottomLeft, bottomRight};
41 | return cornerInset;
42 | }
43 |
44 | UIKIT_STATIC_INLINE UICornerInset UICornerInsetMakeWithRadius(CGFloat radius)
45 | {
46 | UICornerInset cornerInset = {radius, radius, radius, radius};
47 | return cornerInset;
48 | }
49 |
50 | UIKIT_STATIC_INLINE BOOL UICornerInsetEqualToCornerInset(UICornerInset cornerInset1, UICornerInset cornerInset2)
51 | {
52 | return
53 | cornerInset1.topLeft == cornerInset2.topLeft &&
54 | cornerInset1.topRight == cornerInset2.topRight &&
55 | cornerInset1.bottomLeft == cornerInset2.bottomLeft &&
56 | cornerInset1.bottomRight == cornerInset2.bottomRight;
57 | }
58 |
59 | FOUNDATION_EXTERN NSString* NSStringFromUICornerInset(UICornerInset cornerInset);
60 |
61 | typedef enum __UIImageTintedStyle
62 | {
63 | UIImageTintedStyleKeepingAlpha = 1,
64 | UIImageTintedStyleOverAlpha = 2
65 | } UIImageTintedStyle;
66 |
67 | typedef enum __UIImageGradientDirection
68 | {
69 | UIImageGradientDirectionVertical = 1,
70 | UIImageGradientDirectionHorizontal = 2,
71 | } UIImageGradientDirection;
72 |
73 | @interface UIImage (Additions)
74 |
75 | /*
76 | * Create images from colors
77 | */
78 | + (UIImage*)imageWithColor:(UIColor*)color;
79 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size;
80 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size;
81 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size cornerRadius:(CGFloat)cornerRadius;
82 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size cornerInset:(UICornerInset)cornerInset;
83 |
84 | /*
85 | * Create rezisable images from colors
86 | */
87 | + (UIImage*)resizableImageWithColor:(UIColor*)color;
88 | + (UIImage*)resizableImageWithColor:(UIColor*)color cornerRadius:(CGFloat)cornerRadius;
89 | + (UIImage*)resizableImageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes cornerRadius:(CGFloat)cornerRadius;
90 | + (UIImage*)resizableImageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes cornerInset:(UICornerInset)cornerInset;
91 |
92 | + (UIImage*)blackColorImage;
93 | + (UIImage*)darkGrayColorImage;
94 | + (UIImage*)lightGrayColorImage;
95 | + (UIImage*)whiteColorImage;
96 | + (UIImage*)grayColorImage;
97 | + (UIImage*)redColorImage;
98 | + (UIImage*)greenColorImage;
99 | + (UIImage*)blueColorImage;
100 | + (UIImage*)cyanColorImage;
101 | + (UIImage*)yellowColorImage;
102 | + (UIImage*)magentaColorImage;
103 | + (UIImage*)orangeColorImage;
104 | + (UIImage*)purpleColorImage;
105 | + (UIImage*)brownColorImage;
106 | + (UIImage*)clearColorImage;
107 |
108 | /*
109 | * Tint Images
110 | */
111 | + (UIImage*)imageNamed:(NSString *)name tintColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle;
112 | - (UIImage*)tintedImageWithColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle;
113 |
114 | /*
115 | * Rounding corners
116 | */
117 | - (UIImage*)imageWithRoundedBounds;
118 | - (UIImage*)imageWithCornerRadius:(CGFloat)cornerRadius;
119 | - (UIImage*)imageWithCornerInset:(UICornerInset)cornerInset;
120 | - (BOOL)isValidCornerInset:(UICornerInset)cornerInset;
121 |
122 | /*
123 | * Drawing image on image
124 | */
125 | - (UIImage*)imageAddingImage:(UIImage*)image;
126 | - (UIImage*)imageAddingImage:(UIImage*)image offset:(CGPoint)offset;
127 |
128 | /*
129 | * Gradient image generation
130 | */
131 | + (UIImage*)imageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction;
132 | + (UIImage*)resizableImageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction;
133 |
134 | @end
135 |
136 | #pragma mark - Categories
137 |
138 | @interface NSValue (UICornerInset)
139 |
140 | + (NSValue*)valueWithUICornerInset:(UICornerInset)cornerInset;
141 | - (UICornerInset)UICornerInsetValue;
142 |
143 | @end
144 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/Pods/UIImage+BetterAdditions/UIImage+BetterAdditions.m:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2013 Joan Martin (vilanovi@gmail.com)
5 | // 2014 Suyeol Jeon (http://xoul.kr)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 |
27 | #import "UIImage+BetterAdditions.h"
28 |
29 | @interface NSString (MD5Hashing)
30 |
31 | - (NSString*)md5;
32 |
33 | @end
34 |
35 | #import
36 |
37 | @implementation NSString (MD5Hashing)
38 |
39 | - (NSString *)md5
40 | {
41 | const char *cStr = [self UTF8String];
42 | unsigned char result[16];
43 |
44 | CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
45 |
46 | return [NSString stringWithFormat:
47 | @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
48 | result[0], result[1], result[2], result[3],
49 | result[4], result[5], result[6], result[7],
50 | result[8], result[9], result[10], result[11],
51 | result[12], result[13], result[14], result[15]
52 | ];
53 | }
54 |
55 | @end
56 |
57 | const UICornerInset UICornerInsetZero = {0.0f, 0.0f, 0.0f, 0.0f};
58 |
59 | NSString* NSStringFromUICornerInset(UICornerInset cornerInset)
60 | {
61 | return [NSString stringWithFormat:@"UICornerInset ",cornerInset.topLeft, cornerInset.topRight, cornerInset.bottomLeft, cornerInset.bottomRight];
62 | }
63 |
64 | static NSCache * _imageCache = nil;
65 |
66 | static NSString * kUIImageName = @"kUIImageName";
67 | static NSString * kUIImageResizableImage = @"kUIImageResizableImage";
68 | static NSString * kUIImageColors = @"kUIImageColors";
69 | static NSString * kUIImageBorderAttributes = @"kUIImageBorderAttributes";
70 | static NSString * kUIImageTintColor = @"kUIImageTintColor";
71 | static NSString * kUIImageTintStyle = @"kUIImageTintStyle";
72 | static NSString * kUIImageCornerInset = @"kUIImageCornerInset";
73 | static NSString * kUIImageGradientDirection = @"kUIImageGradientDirection";
74 | static NSString * kUIImageSize = @"kUIImageSize";
75 |
76 | @implementation UIImage (Additions)
77 |
78 | + (UIImage*)imageWithColor:(UIColor*)color
79 | {
80 | return [self imageWithColor:color size:CGSizeMake(1, 1)];
81 | }
82 |
83 | + (UIImage*)imageWithColor:(UIColor*)color size:(CGSize)size
84 | {
85 | return [self imageWithColor:color borderAttributes:nil size:size cornerInset:UICornerInsetZero];
86 | }
87 |
88 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size
89 | {
90 | return [self imageWithColor:color borderAttributes:borderAttributes size:size cornerInset:UICornerInsetZero];
91 | }
92 |
93 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size cornerRadius:(CGFloat)cornerRadius
94 | {
95 | return [self imageWithColor:color borderAttributes:borderAttributes size:size cornerInset:UICornerInsetMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)];
96 | }
97 |
98 | + (UIImage*)imageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes size:(CGSize)size cornerInset:(UICornerInset)cornerInset
99 | {
100 | return [self _imageWithColor:color borderAttributes:borderAttributes size:size cornerInset:cornerInset saveInCache:YES];
101 | }
102 |
103 | + (UIImage*)resizableImageWithColor:(UIColor*)color
104 | {
105 | return [self resizableImageWithColor:color borderAttributes:nil cornerInset:UICornerInsetZero];
106 | }
107 |
108 | + (UIImage*)resizableImageWithColor:(UIColor*)color cornerRadius:(CGFloat)cornerRadius;
109 | {
110 | return [self resizableImageWithColor:color borderAttributes:nil cornerInset:UICornerInsetMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)];
111 | }
112 |
113 | + (UIImage*)resizableImageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes cornerRadius:(CGFloat)cornerRadius
114 | {
115 | return [self resizableImageWithColor:color borderAttributes:borderAttributes cornerInset:UICornerInsetMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)];
116 | }
117 |
118 | + (UIImage*)resizableImageWithColor:(UIColor*)color borderAttributes:(NSDictionary*)borderAttributes cornerInset:(UICornerInset)cornerInset
119 | {
120 | if (!color)
121 | return nil;
122 |
123 | NSDictionary *descriptors = @{kUIImageColors : @[color],
124 | kUIImageResizableImage : @YES,
125 | kUIImageBorderAttributes : borderAttributes ?: [NSNull null],
126 | kUIImageCornerInset : [NSValue valueWithUICornerInset:cornerInset]};
127 |
128 | UIImage *image = [self _cachedImageWithDescriptors:descriptors];
129 |
130 | if (image)
131 | return image;
132 |
133 | CGFloat borderWidth = [borderAttributes[NSStrokeWidthAttributeName] floatValue];
134 |
135 | CGSize size = CGSizeMake(MAX(cornerInset.topLeft, cornerInset.bottomLeft) + MAX(cornerInset.topRight, cornerInset.bottomRight) + borderWidth * 2 + 1,
136 | MAX(cornerInset.topLeft, cornerInset.topRight) + MAX(cornerInset.bottomLeft, cornerInset.bottomRight) + borderWidth * 2 + 1);
137 |
138 | UIEdgeInsets capInsets = UIEdgeInsetsMake(MAX(cornerInset.topLeft, cornerInset.topRight) + borderWidth,
139 | MAX(cornerInset.topLeft, cornerInset.bottomLeft) + borderWidth,
140 | MAX(cornerInset.bottomLeft, cornerInset.bottomRight) + borderWidth,
141 | MAX(cornerInset.topRight, cornerInset.bottomRight) + borderWidth);
142 |
143 | image = [[self imageWithColor:color borderAttributes:borderAttributes size:size cornerInset:cornerInset] resizableImageWithCapInsets:capInsets];
144 |
145 | [self _cacheImage:image withDescriptors:descriptors];
146 |
147 | return image;
148 | }
149 |
150 | + (UIImage*)blackColorImage
151 | {
152 | return [self resizableImageWithColor:[UIColor blackColor]];
153 | }
154 |
155 | + (UIImage*)darkGrayColorImage
156 | {
157 | return [self resizableImageWithColor:[UIColor darkGrayColor]];
158 | }
159 |
160 | + (UIImage*)lightGrayColorImage
161 | {
162 | return [self resizableImageWithColor:[UIColor lightGrayColor]];
163 | }
164 |
165 | + (UIImage*)whiteColorImage
166 | {
167 | return [self resizableImageWithColor:[UIColor whiteColor]];
168 | }
169 |
170 | + (UIImage*)grayColorImage
171 | {
172 | return [self resizableImageWithColor:[UIColor grayColor]];
173 | }
174 |
175 | + (UIImage*)redColorImage
176 | {
177 | return [self resizableImageWithColor:[UIColor redColor]];
178 | }
179 |
180 | + (UIImage*)greenColorImage
181 | {
182 | return [self resizableImageWithColor:[UIColor greenColor]];
183 | }
184 |
185 | + (UIImage*)blueColorImage
186 | {
187 | return [self resizableImageWithColor:[UIColor blueColor]];
188 | }
189 |
190 | + (UIImage*)cyanColorImage
191 | {
192 | return [self resizableImageWithColor:[UIColor cyanColor]];
193 | }
194 |
195 | + (UIImage*)yellowColorImage
196 | {
197 | return [self resizableImageWithColor:[UIColor yellowColor]];
198 | }
199 |
200 | + (UIImage*)magentaColorImage
201 | {
202 | return [self resizableImageWithColor:[UIColor magentaColor]];
203 | }
204 |
205 | + (UIImage*)orangeColorImage
206 | {
207 | return [self resizableImageWithColor:[UIColor orangeColor]];
208 | }
209 |
210 | + (UIImage*)purpleColorImage
211 | {
212 | return [self resizableImageWithColor:[UIColor purpleColor]];
213 | }
214 |
215 | + (UIImage*)brownColorImage
216 | {
217 | return [self resizableImageWithColor:[UIColor brownColor]];
218 | }
219 |
220 | + (UIImage*)clearColorImage
221 | {
222 | return [self resizableImageWithColor:[UIColor clearColor]];
223 | }
224 |
225 | + (UIImage*)imageNamed:(NSString *)name tintColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle
226 | {
227 | if (!name)
228 | return nil;
229 |
230 | UIImage *image = [UIImage imageNamed:name];
231 |
232 | if (!image)
233 | return nil;
234 |
235 | if (!color)
236 | return image;
237 |
238 | NSDictionary *descriptors = @{kUIImageName : name,
239 | kUIImageTintColor : color,
240 | kUIImageTintStyle : @(tintStyle)};
241 |
242 | UIImage *tintedImage = [self _cachedImageWithDescriptors:descriptors];
243 |
244 | if (!tintedImage)
245 | {
246 | tintedImage = [image tintedImageWithColor:color style:tintStyle];
247 | [self _cacheImage:tintedImage withDescriptors:descriptors];
248 | }
249 |
250 | return tintedImage;
251 | }
252 |
253 | - (UIImage*)tintedImageWithColor:(UIColor*)color style:(UIImageTintedStyle)tintStyle
254 | {
255 | if (!color)
256 | return self;
257 |
258 | CGFloat scale = self.scale;
259 | CGSize size = CGSizeMake(scale * self.size.width, scale * self.size.height);
260 |
261 | UIGraphicsBeginImageContext(size);
262 |
263 | CGContextRef context = UIGraphicsGetCurrentContext();
264 |
265 | CGContextTranslateCTM(context, 0, size.height);
266 | CGContextScaleCTM(context, 1.0, -1.0);
267 |
268 | CGRect rect = CGRectMake(0, 0, size.width, size.height);
269 | // ---
270 |
271 | if (tintStyle == UIImageTintedStyleOverAlpha)
272 | {
273 | [color setFill];
274 | CGContextFillRect(context, rect);
275 | }
276 |
277 | // draw alpha-mask
278 | CGContextSetBlendMode(context, kCGBlendModeNormal);
279 | CGContextDrawImage(context, rect, self.CGImage);
280 |
281 | if (tintStyle == UIImageTintedStyleKeepingAlpha)
282 | {
283 | CGContextSetBlendMode(context, kCGBlendModeSourceIn);
284 | [color setFill];
285 | CGContextFillRect(context, rect);
286 | }
287 |
288 | // ---
289 | CGImageRef bitmapContext = CGBitmapContextCreateImage(context);
290 |
291 | UIImage *coloredImage = [UIImage imageWithCGImage:bitmapContext scale:scale orientation:UIImageOrientationUp];
292 |
293 | CGImageRelease(bitmapContext);
294 |
295 | UIGraphicsEndImageContext();
296 |
297 | return coloredImage;
298 | }
299 |
300 | - (UIImage*)imageWithRoundedBounds
301 | {
302 | CGSize size = self.size;
303 | CGFloat radius = MIN(size.width, size.height) / 2.0;
304 | return [self imageWithCornerRadius:radius];
305 | }
306 |
307 | - (UIImage*)imageWithCornerRadius:(CGFloat)cornerRadius
308 | {
309 | return [self imageWithCornerInset:UICornerInsetMake(cornerRadius, cornerRadius, cornerRadius, cornerRadius)];
310 | }
311 |
312 | - (UIImage *)imageWithCornerInset:(UICornerInset)cornerInset
313 | {
314 | if (![self isValidCornerInset:cornerInset])
315 | return nil;
316 |
317 | CGFloat scale = self.scale;
318 |
319 | CGRect rect = CGRectMake(0.0f, 0.0f, scale*self.size.width, scale*self.size.height);
320 |
321 | cornerInset.topRight *= scale;
322 | cornerInset.topLeft *= scale;
323 | cornerInset.bottomLeft *= scale;
324 | cornerInset.bottomRight *= scale;
325 |
326 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
327 | CGContextRef context = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
328 | CGColorSpaceRelease(colorSpace);
329 |
330 | if (context == NULL)
331 | return nil;
332 |
333 | CGFloat minx = CGRectGetMinX(rect), midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect);
334 | CGFloat miny = CGRectGetMinY(rect), midy = CGRectGetMidY(rect), maxy = CGRectGetMaxY(rect);
335 | CGContextBeginPath(context);
336 | CGContextMoveToPoint(context, minx, midy);
337 | CGContextAddArcToPoint(context, minx, miny, midx, miny, cornerInset.bottomLeft);
338 | CGContextAddArcToPoint(context, maxx, miny, maxx, midy, cornerInset.bottomRight);
339 | CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, cornerInset.topRight);
340 | CGContextAddArcToPoint(context, minx, maxy, minx, midy, cornerInset.topLeft);
341 | CGContextClosePath(context);
342 | CGContextClip(context);
343 |
344 | CGContextDrawImage(context, rect, self.CGImage);
345 |
346 | CGImageRef bitmapImageRef = CGBitmapContextCreateImage(context);
347 |
348 | CGContextRelease(context);
349 |
350 | UIImage *newImage = [UIImage imageWithCGImage:bitmapImageRef scale:scale orientation:UIImageOrientationUp];
351 |
352 | CGImageRelease(bitmapImageRef);
353 |
354 | return newImage;
355 | }
356 |
357 | - (BOOL)isValidCornerInset:(UICornerInset)cornerInset
358 | {
359 | CGSize size = self.size;
360 |
361 | BOOL isValid = YES;
362 |
363 | if (cornerInset.topLeft + cornerInset.topRight > size.width)
364 | isValid = NO;
365 |
366 | else if (cornerInset.topRight + cornerInset.bottomRight > size.height)
367 | isValid = NO;
368 |
369 | else if (cornerInset.bottomRight + cornerInset.bottomLeft > size.width)
370 | isValid = NO;
371 |
372 | else if (cornerInset.bottomLeft + cornerInset.topLeft > size.height)
373 | isValid = NO;
374 |
375 | return isValid;
376 | }
377 |
378 | - (UIImage*)imageAddingImage:(UIImage*)image
379 | {
380 | CGSize size1 = self.size;
381 | CGSize size2 = image.size;
382 |
383 | CGPoint offset = CGPointMake(floorf((size1.width - size2.width)/2.0),
384 | floorf((size1.height - size2.height)/2.0));
385 | return [self imageAddingImage:image offset:offset];
386 | }
387 |
388 | - (UIImage*)imageAddingImage:(UIImage*)image offset:(CGPoint)offset
389 | {
390 | CGSize size = self.size;
391 | CGFloat scale = self.scale;
392 |
393 | size.width *= scale;
394 | size.height *= scale;
395 |
396 | UIGraphicsBeginImageContext(size);
397 |
398 | [self drawInRect:CGRectMake( 0, 0, size.width, size.height)];
399 |
400 | [image drawInRect:CGRectMake(scale * offset.x, scale * offset.y, image.size.width * scale, image.size.height * scale)];
401 |
402 | CGContextRef context = UIGraphicsGetCurrentContext();
403 | CGImageRef bitmapContext = CGBitmapContextCreateImage(context);
404 | UIImage *destImage = [UIImage imageWithCGImage:bitmapContext scale:image.scale orientation:UIImageOrientationUp];
405 | UIGraphicsEndImageContext();
406 | CGImageRelease(bitmapContext);
407 |
408 | return destImage;
409 | }
410 |
411 | #pragma mark Private Methods
412 |
413 | + (NSCache*)_cache
414 | {
415 | if (!_imageCache)
416 | _imageCache = [[NSCache alloc] init];
417 |
418 | return _imageCache;
419 | }
420 |
421 | + (UIImage*)_cachedImageWithDescriptors:(NSDictionary*)descriptors
422 | {
423 | return [[self _cache] objectForKey:[self _keyForImageWithDescriptors:descriptors]];
424 | }
425 |
426 | + (void)_cacheImage:(UIImage*)image withDescriptors:(NSDictionary*)descriptors
427 | {
428 | NSString *key = [self _keyForImageWithDescriptors:descriptors];
429 | [[self _cache] setObject:image forKey:key];
430 | }
431 |
432 | + (NSString*)_keyForImageWithDescriptors:(NSDictionary*)descriptors
433 | {
434 | NSMutableString *string = [NSMutableString string];
435 |
436 | NSString *imageName = [descriptors valueForKey:kUIImageName];
437 | [string appendFormat:@"<%@:%@>",kUIImageName,(imageName == nil)?@"":imageName];
438 | [string appendFormat:@"<%@:%@>",kUIImageSize, NSStringFromCGSize([[descriptors valueForKey:kUIImageSize] CGSizeValue])];
439 | [string appendFormat:@"<%@:%d>",kUIImageResizableImage,[[descriptors valueForKey:kUIImageResizableImage] boolValue]];
440 |
441 | [string appendFormat:@"<%@:",kUIImageColors];
442 | NSArray *colors = [descriptors valueForKey:kUIImageColors];
443 | for (UIColor *color in colors)
444 | [string appendFormat:@"%ld",(long)color.hash];
445 | [string appendFormat:@">"];
446 |
447 | NSDictionary *borderAttributes = descriptors[kUIImageBorderAttributes];
448 | if (![borderAttributes isEqual:[NSNull null]]) {
449 | UIColor *borderColor = borderAttributes[NSStrokeColorAttributeName];
450 | NSNumber *borderWidth = borderAttributes[NSStrokeWidthAttributeName];
451 | [string appendFormat:@"<%@:%ld%f>", kUIImageBorderAttributes, borderColor.hash, borderWidth.floatValue];
452 | }
453 |
454 | [string appendFormat:@"<%@:%ld>",kUIImageTintColor,(long)[[descriptors valueForKey:kUIImageTintColor] hash]];
455 | [string appendFormat:@"<%@:%ld>",kUIImageTintStyle,(long)[[descriptors valueForKey:kUIImageTintStyle] integerValue]];
456 | [string appendFormat:@"<%@:%@>",kUIImageCornerInset,NSStringFromUICornerInset([[descriptors valueForKey:kUIImageCornerInset] UICornerInsetValue])];
457 | [string appendFormat:@"<%@:%ld>",kUIImageGradientDirection,(long)[[descriptors valueForKey:kUIImageGradientDirection] integerValue]];
458 |
459 | return [string md5];
460 | }
461 |
462 | + (UIImage*)_imageWithColor:(UIColor*)color size:(CGSize)size cornerInset:(UICornerInset)cornerInset saveInCache:(BOOL)save
463 | {
464 | return [self _imageWithColor:color borderAttributes:nil size:size cornerInset:cornerInset saveInCache:save];
465 | }
466 |
467 | + (UIImage*)_imageWithColor:(UIColor*)color borderAttributes:(NSDictionary *)borderAttributes size:(CGSize)size cornerInset:(UICornerInset)cornerInset saveInCache:(BOOL)save
468 | {
469 | NSDictionary *descriptors = @{kUIImageColors : @[color],
470 | kUIImageBorderAttributes : borderAttributes ?: [NSNull null],
471 | kUIImageSize : [NSValue valueWithCGSize:size],
472 | kUIImageCornerInset : [NSValue valueWithUICornerInset:cornerInset]};
473 |
474 | UIImage *image = [self _cachedImageWithDescriptors:descriptors];
475 |
476 | if (image)
477 | return image;
478 |
479 | CGFloat scale = [[UIScreen mainScreen] scale];
480 | CGRect rect = CGRectMake(0.0f, 0.0f, scale*size.width, scale*size.height);
481 |
482 | cornerInset.topRight *= scale;
483 | cornerInset.topLeft *= scale;
484 | cornerInset.bottomLeft *= scale;
485 | cornerInset.bottomRight *= scale;
486 |
487 | CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
488 | CGContextRef context = CGBitmapContextCreate(NULL, rect.size.width, rect.size.height, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
489 |
490 | CGColorSpaceRelease(colorSpace);
491 |
492 | if (context == NULL)
493 | return nil;
494 |
495 | UIColor *borderColor = borderAttributes[NSStrokeColorAttributeName];
496 | CGFloat borderWidth = [borderAttributes[NSStrokeWidthAttributeName] floatValue] * scale;
497 | rect = CGRectInset(rect, borderWidth / 2.0, borderWidth / 2.0);
498 |
499 | CGFloat minx = CGRectGetMinX(rect), midx = CGRectGetMidX(rect), maxx = CGRectGetMaxX(rect);
500 | CGFloat miny = CGRectGetMinY(rect), midy = CGRectGetMidY(rect), maxy = CGRectGetMaxY(rect);
501 |
502 | CGContextBeginPath(context);
503 | CGContextSetGrayFillColor(context, 1.0, 0.0); // <-- Alpha color in background
504 | CGContextAddRect(context, rect);
505 | CGContextClosePath(context);
506 | CGContextDrawPath(context, kCGPathFill);
507 |
508 | if (borderColor)
509 | CGContextSetStrokeColorWithColor(context, [borderColor CGColor]);
510 | if (borderWidth)
511 | CGContextSetLineWidth(context, borderWidth);
512 |
513 | CGContextSetFillColorWithColor(context, [color CGColor]); // <-- Color to fill
514 | CGContextBeginPath(context);
515 | CGContextMoveToPoint(context, minx, midy);
516 | CGContextAddArcToPoint(context, minx, miny, midx, miny, cornerInset.bottomLeft);
517 | CGContextAddArcToPoint(context, maxx, miny, maxx, midy, cornerInset.bottomRight);
518 | CGContextAddArcToPoint(context, maxx, maxy, midx, maxy, cornerInset.topRight);
519 | CGContextAddArcToPoint(context, minx, maxy, minx, midy, cornerInset.topLeft);
520 | CGContextClosePath(context);
521 | CGContextDrawPath(context, borderColor || borderWidth ? kCGPathFillStroke : kCGPathFill);
522 |
523 | CGImageRef bitmapContext = CGBitmapContextCreateImage(context);
524 |
525 | CGContextRelease(context);
526 |
527 | UIImage *theImage = [UIImage imageWithCGImage:bitmapContext scale:scale orientation:UIImageOrientationUp];
528 |
529 | CGImageRelease(bitmapContext);
530 |
531 | if (save)
532 | [self _cacheImage:theImage withDescriptors:descriptors];
533 |
534 | return theImage;
535 | }
536 |
537 | + (UIImage*)imageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction
538 | {
539 |
540 | NSDictionary *descriptors = @{kUIImageColors: colors,
541 | kUIImageSize: [NSValue valueWithCGSize:size],
542 | kUIImageGradientDirection: @(direction)};
543 |
544 | UIImage *image = [self _cachedImageWithDescriptors:descriptors];
545 | if (image)
546 | return image;
547 |
548 | CGRect rect = CGRectMake(0, 0, size.width, size.height);
549 |
550 | UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
551 |
552 | CGContextRef context = UIGraphicsGetCurrentContext();
553 |
554 | // Create Gradient
555 | NSMutableArray *cgColors = [NSMutableArray arrayWithCapacity:colors.count];
556 | for (UIColor *color in colors)
557 | [cgColors addObject:(id)color.CGColor];
558 |
559 | CGColorSpaceRef space = CGColorSpaceCreateDeviceRGB();
560 | CGGradientRef gradient = CGGradientCreateWithColors(space, (__bridge CFArrayRef)cgColors, NULL);
561 |
562 | // Apply gradient
563 | CGPoint startPoint = CGPointZero;
564 | CGPoint endPoint = CGPointZero;
565 |
566 | if (direction == UIImageGradientDirectionVertical)
567 | endPoint = CGPointMake(0, rect.size.height);
568 |
569 | else if (direction == UIImageGradientDirectionHorizontal)
570 | endPoint = CGPointMake(rect.size.width, 0);
571 |
572 | CGContextDrawLinearGradient(context, gradient, startPoint, endPoint, 0);
573 | image = UIGraphicsGetImageFromCurrentImageContext();
574 |
575 | // Clean memory & End context
576 | UIGraphicsEndImageContext();
577 | CGGradientRelease(gradient);
578 | CGColorSpaceRelease(space);
579 |
580 | [self _cacheImage:image withDescriptors:descriptors];
581 |
582 | return image;
583 | }
584 |
585 | + (UIImage*)resizableImageWithGradient:(NSArray*)colors size:(CGSize)size direction:(UIImageGradientDirection)direction
586 | {
587 | if ((size.width == 0.0f && direction == UIImageGradientDirectionHorizontal) ||
588 | (size.height == 0.0f && direction == UIImageGradientDirectionVertical) ||
589 | (size.height == 0.0f && size.width == 0.0f))
590 | return nil;
591 |
592 | NSDictionary *descriptors = @{kUIImageColors: colors,
593 | kUIImageSize: [NSValue valueWithCGSize:size],
594 | kUIImageGradientDirection: @(direction),
595 | kUIImageResizableImage: @YES};
596 |
597 | UIImage *image = [self _cachedImageWithDescriptors:descriptors];
598 | if (image)
599 | return image;
600 |
601 | CGSize imageSize = CGSizeMake(1.0f, 1.0f);
602 |
603 | UIEdgeInsets insets = UIEdgeInsetsZero;
604 |
605 | if (direction == UIImageGradientDirectionVertical)
606 | {
607 | imageSize.height = size.height;
608 | insets = UIEdgeInsetsMake(0.0f, 1.0f, 0.0f, 1.0f);
609 | }
610 | else if (direction == UIImageGradientDirectionHorizontal)
611 | {
612 | imageSize.width = size.width;
613 | insets = UIEdgeInsetsMake(1.0f, 0.0f, 1.0f, 0.0f);
614 | }
615 |
616 | return [[self imageWithGradient:colors size:imageSize direction:direction] resizableImageWithCapInsets:insets];
617 | }
618 |
619 | @end
620 |
621 | #pragma mark - Categories
622 |
623 | @implementation NSValue (UICornerInset)
624 |
625 | + (NSValue*)valueWithUICornerInset:(UICornerInset)cornerInset
626 | {
627 | CGRect rect = CGRectMake(cornerInset.topLeft, cornerInset.topRight, cornerInset.bottomLeft, cornerInset.bottomRight);
628 | return [NSValue valueWithCGRect:rect];
629 |
630 | // UICornerInset inset = cornerInset;
631 | // return [[NSValue alloc] initWithBytes:&inset objCType:@encode(struct __UICornerInset)];
632 | }
633 |
634 | - (UICornerInset)UICornerInsetValue
635 | {
636 | CGRect rect = [self CGRectValue];
637 | return UICornerInsetMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);
638 |
639 | // UICornerInset cornerInset;
640 | // [self getValue:&cornerInset];
641 | // return cornerInset;
642 | }
643 |
644 | @end
645 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | archiveVersion
6 | 1
7 | classes
8 |
9 | objectVersion
10 | 46
11 | objects
12 |
13 | 0312821E19B2FEA600C8BE7D
14 |
15 | children
16 |
17 | 0312823019B2FEA600C8BE7D
18 | 0312822919B2FEA600C8BE7D
19 | 0312822819B2FEA600C8BE7D
20 | ADA6843C633346FEB3348C82
21 |
22 | isa
23 | PBXGroup
24 | sourceTree
25 | <group>
26 |
27 | 0312821F19B2FEA600C8BE7D
28 |
29 | attributes
30 |
31 | CLASSPREFIX
32 | SS
33 | LastUpgradeCheck
34 | 0510
35 | ORGANIZATIONNAME
36 | Suyeol Jeon
37 |
38 | buildConfigurationList
39 | 0312822219B2FEA600C8BE7D
40 | compatibilityVersion
41 | Xcode 3.2
42 | developmentRegion
43 | English
44 | hasScannedForEncodings
45 | 0
46 | isa
47 | PBXProject
48 | knownRegions
49 |
50 | en
51 |
52 | mainGroup
53 | 0312821E19B2FEA600C8BE7D
54 | productRefGroup
55 | 0312822819B2FEA600C8BE7D
56 | projectDirPath
57 |
58 | projectReferences
59 |
60 | projectRoot
61 |
62 | targets
63 |
64 | 0312822619B2FEA600C8BE7D
65 |
66 |
67 | 0312822219B2FEA600C8BE7D
68 |
69 | buildConfigurations
70 |
71 | 0312825119B2FEA600C8BE7D
72 | 0312825219B2FEA600C8BE7D
73 |
74 | defaultConfigurationIsVisible
75 | 0
76 | defaultConfigurationName
77 | Release
78 | isa
79 | XCConfigurationList
80 |
81 | 0312822319B2FEA600C8BE7D
82 |
83 | buildActionMask
84 | 2147483647
85 | files
86 |
87 | 0312823B19B2FEA600C8BE7D
88 | 0312825C19B2FEEC00C8BE7D
89 | 0312823719B2FEA600C8BE7D
90 |
91 | isa
92 | PBXSourcesBuildPhase
93 | runOnlyForDeploymentPostprocessing
94 | 0
95 |
96 | 0312822419B2FEA600C8BE7D
97 |
98 | buildActionMask
99 | 2147483647
100 | files
101 |
102 | 0312822D19B2FEA600C8BE7D
103 | 0312822F19B2FEA600C8BE7D
104 | 0312822B19B2FEA600C8BE7D
105 | 6D8F45F73AB145BE91E65071
106 |
107 | isa
108 | PBXFrameworksBuildPhase
109 | runOnlyForDeploymentPostprocessing
110 | 0
111 |
112 | 0312822519B2FEA600C8BE7D
113 |
114 | buildActionMask
115 | 2147483647
116 | files
117 |
118 | 0312823D19B2FEA600C8BE7D
119 |
120 | isa
121 | PBXResourcesBuildPhase
122 | runOnlyForDeploymentPostprocessing
123 | 0
124 |
125 | 0312822619B2FEA600C8BE7D
126 |
127 | buildConfigurationList
128 | 0312825319B2FEA600C8BE7D
129 | buildPhases
130 |
131 | B12310DC6F4E4957B9FFB9B9
132 | 0312822319B2FEA600C8BE7D
133 | 0312822419B2FEA600C8BE7D
134 | 0312822519B2FEA600C8BE7D
135 | E73975FBF49241C89E59CDA8
136 |
137 | buildRules
138 |
139 | dependencies
140 |
141 | isa
142 | PBXNativeTarget
143 | name
144 | SSBouncyButtonDemo
145 | productName
146 | SSBouncyButtonDemo
147 | productReference
148 | 0312822719B2FEA600C8BE7D
149 | productType
150 | com.apple.product-type.application
151 |
152 | 0312822719B2FEA600C8BE7D
153 |
154 | explicitFileType
155 | wrapper.application
156 | includeInIndex
157 | 0
158 | isa
159 | PBXFileReference
160 | path
161 | SSBouncyButtonDemo.app
162 | sourceTree
163 | BUILT_PRODUCTS_DIR
164 |
165 | 0312822819B2FEA600C8BE7D
166 |
167 | children
168 |
169 | 0312822719B2FEA600C8BE7D
170 |
171 | isa
172 | PBXGroup
173 | name
174 | Products
175 | sourceTree
176 | <group>
177 |
178 | 0312822919B2FEA600C8BE7D
179 |
180 | children
181 |
182 | 0312822A19B2FEA600C8BE7D
183 | 0312822C19B2FEA600C8BE7D
184 | 0312822E19B2FEA600C8BE7D
185 | 0312824319B2FEA600C8BE7D
186 | F56903CC74964CE3A12301DC
187 |
188 | isa
189 | PBXGroup
190 | name
191 | Frameworks
192 | sourceTree
193 | <group>
194 |
195 | 0312822A19B2FEA600C8BE7D
196 |
197 | isa
198 | PBXFileReference
199 | lastKnownFileType
200 | wrapper.framework
201 | name
202 | Foundation.framework
203 | path
204 | System/Library/Frameworks/Foundation.framework
205 | sourceTree
206 | SDKROOT
207 |
208 | 0312822B19B2FEA600C8BE7D
209 |
210 | fileRef
211 | 0312822A19B2FEA600C8BE7D
212 | isa
213 | PBXBuildFile
214 |
215 | 0312822C19B2FEA600C8BE7D
216 |
217 | isa
218 | PBXFileReference
219 | lastKnownFileType
220 | wrapper.framework
221 | name
222 | CoreGraphics.framework
223 | path
224 | System/Library/Frameworks/CoreGraphics.framework
225 | sourceTree
226 | SDKROOT
227 |
228 | 0312822D19B2FEA600C8BE7D
229 |
230 | fileRef
231 | 0312822C19B2FEA600C8BE7D
232 | isa
233 | PBXBuildFile
234 |
235 | 0312822E19B2FEA600C8BE7D
236 |
237 | isa
238 | PBXFileReference
239 | lastKnownFileType
240 | wrapper.framework
241 | name
242 | UIKit.framework
243 | path
244 | System/Library/Frameworks/UIKit.framework
245 | sourceTree
246 | SDKROOT
247 |
248 | 0312822F19B2FEA600C8BE7D
249 |
250 | fileRef
251 | 0312822E19B2FEA600C8BE7D
252 | isa
253 | PBXBuildFile
254 |
255 | 0312823019B2FEA600C8BE7D
256 |
257 | children
258 |
259 | 0312823919B2FEA600C8BE7D
260 | 0312823A19B2FEA600C8BE7D
261 | 0312823C19B2FEA600C8BE7D
262 | 0312825919B2FEEC00C8BE7D
263 | 0312823119B2FEA600C8BE7D
264 |
265 | isa
266 | PBXGroup
267 | path
268 | SSBouncyButtonDemo
269 | sourceTree
270 | <group>
271 |
272 | 0312823119B2FEA600C8BE7D
273 |
274 | children
275 |
276 | 0312823219B2FEA600C8BE7D
277 | 0312823619B2FEA600C8BE7D
278 | 0312823819B2FEA600C8BE7D
279 |
280 | isa
281 | PBXGroup
282 | name
283 | Supporting Files
284 | sourceTree
285 | <group>
286 |
287 | 0312823219B2FEA600C8BE7D
288 |
289 | isa
290 | PBXFileReference
291 | lastKnownFileType
292 | text.plist.xml
293 | path
294 | SSBouncyButtonDemo-Info.plist
295 | sourceTree
296 | <group>
297 |
298 | 0312823619B2FEA600C8BE7D
299 |
300 | isa
301 | PBXFileReference
302 | lastKnownFileType
303 | sourcecode.c.objc
304 | path
305 | main.m
306 | sourceTree
307 | <group>
308 |
309 | 0312823719B2FEA600C8BE7D
310 |
311 | fileRef
312 | 0312823619B2FEA600C8BE7D
313 | isa
314 | PBXBuildFile
315 |
316 | 0312823819B2FEA600C8BE7D
317 |
318 | isa
319 | PBXFileReference
320 | lastKnownFileType
321 | sourcecode.c.h
322 | path
323 | SSBouncyButtonDemo-Prefix.pch
324 | sourceTree
325 | <group>
326 |
327 | 0312823919B2FEA600C8BE7D
328 |
329 | isa
330 | PBXFileReference
331 | lastKnownFileType
332 | sourcecode.c.h
333 | path
334 | SSAppDelegate.h
335 | sourceTree
336 | <group>
337 |
338 | 0312823A19B2FEA600C8BE7D
339 |
340 | isa
341 | PBXFileReference
342 | lastKnownFileType
343 | sourcecode.c.objc
344 | path
345 | SSAppDelegate.m
346 | sourceTree
347 | <group>
348 |
349 | 0312823B19B2FEA600C8BE7D
350 |
351 | fileRef
352 | 0312823A19B2FEA600C8BE7D
353 | isa
354 | PBXBuildFile
355 |
356 | 0312823C19B2FEA600C8BE7D
357 |
358 | isa
359 | PBXFileReference
360 | lastKnownFileType
361 | folder.assetcatalog
362 | path
363 | Images.xcassets
364 | sourceTree
365 | <group>
366 |
367 | 0312823D19B2FEA600C8BE7D
368 |
369 | fileRef
370 | 0312823C19B2FEA600C8BE7D
371 | isa
372 | PBXBuildFile
373 |
374 | 0312824319B2FEA600C8BE7D
375 |
376 | isa
377 | PBXFileReference
378 | lastKnownFileType
379 | wrapper.framework
380 | name
381 | XCTest.framework
382 | path
383 | Library/Frameworks/XCTest.framework
384 | sourceTree
385 | DEVELOPER_DIR
386 |
387 | 0312825119B2FEA600C8BE7D
388 |
389 | buildSettings
390 |
391 | ALWAYS_SEARCH_USER_PATHS
392 | NO
393 | CLANG_CXX_LANGUAGE_STANDARD
394 | gnu++0x
395 | CLANG_CXX_LIBRARY
396 | libc++
397 | CLANG_ENABLE_MODULES
398 | YES
399 | CLANG_ENABLE_OBJC_ARC
400 | YES
401 | CLANG_WARN_BOOL_CONVERSION
402 | YES
403 | CLANG_WARN_CONSTANT_CONVERSION
404 | YES
405 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE
406 | YES_ERROR
407 | CLANG_WARN_EMPTY_BODY
408 | YES
409 | CLANG_WARN_ENUM_CONVERSION
410 | YES
411 | CLANG_WARN_INT_CONVERSION
412 | YES
413 | CLANG_WARN_OBJC_ROOT_CLASS
414 | YES_ERROR
415 | CLANG_WARN__DUPLICATE_METHOD_MATCH
416 | YES
417 | CODE_SIGN_IDENTITY[sdk=iphoneos*]
418 | iPhone Developer
419 | COPY_PHASE_STRIP
420 | NO
421 | GCC_C_LANGUAGE_STANDARD
422 | gnu99
423 | GCC_DYNAMIC_NO_PIC
424 | NO
425 | GCC_OPTIMIZATION_LEVEL
426 | 0
427 | GCC_PREPROCESSOR_DEFINITIONS
428 |
429 | DEBUG=1
430 | $(inherited)
431 |
432 | GCC_SYMBOLS_PRIVATE_EXTERN
433 | NO
434 | GCC_WARN_64_TO_32_BIT_CONVERSION
435 | YES
436 | GCC_WARN_ABOUT_RETURN_TYPE
437 | YES_ERROR
438 | GCC_WARN_UNDECLARED_SELECTOR
439 | YES
440 | GCC_WARN_UNINITIALIZED_AUTOS
441 | YES_AGGRESSIVE
442 | GCC_WARN_UNUSED_FUNCTION
443 | YES
444 | GCC_WARN_UNUSED_VARIABLE
445 | YES
446 | IPHONEOS_DEPLOYMENT_TARGET
447 | 7.1
448 | ONLY_ACTIVE_ARCH
449 | YES
450 | SDKROOT
451 | iphoneos
452 | TARGETED_DEVICE_FAMILY
453 | 1,2
454 |
455 | isa
456 | XCBuildConfiguration
457 | name
458 | Debug
459 |
460 | 0312825219B2FEA600C8BE7D
461 |
462 | buildSettings
463 |
464 | ALWAYS_SEARCH_USER_PATHS
465 | NO
466 | CLANG_CXX_LANGUAGE_STANDARD
467 | gnu++0x
468 | CLANG_CXX_LIBRARY
469 | libc++
470 | CLANG_ENABLE_MODULES
471 | YES
472 | CLANG_ENABLE_OBJC_ARC
473 | YES
474 | CLANG_WARN_BOOL_CONVERSION
475 | YES
476 | CLANG_WARN_CONSTANT_CONVERSION
477 | YES
478 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE
479 | YES_ERROR
480 | CLANG_WARN_EMPTY_BODY
481 | YES
482 | CLANG_WARN_ENUM_CONVERSION
483 | YES
484 | CLANG_WARN_INT_CONVERSION
485 | YES
486 | CLANG_WARN_OBJC_ROOT_CLASS
487 | YES_ERROR
488 | CLANG_WARN__DUPLICATE_METHOD_MATCH
489 | YES
490 | CODE_SIGN_IDENTITY[sdk=iphoneos*]
491 | iPhone Developer
492 | COPY_PHASE_STRIP
493 | YES
494 | ENABLE_NS_ASSERTIONS
495 | NO
496 | GCC_C_LANGUAGE_STANDARD
497 | gnu99
498 | GCC_WARN_64_TO_32_BIT_CONVERSION
499 | YES
500 | GCC_WARN_ABOUT_RETURN_TYPE
501 | YES_ERROR
502 | GCC_WARN_UNDECLARED_SELECTOR
503 | YES
504 | GCC_WARN_UNINITIALIZED_AUTOS
505 | YES_AGGRESSIVE
506 | GCC_WARN_UNUSED_FUNCTION
507 | YES
508 | GCC_WARN_UNUSED_VARIABLE
509 | YES
510 | IPHONEOS_DEPLOYMENT_TARGET
511 | 7.1
512 | SDKROOT
513 | iphoneos
514 | TARGETED_DEVICE_FAMILY
515 | 1,2
516 | VALIDATE_PRODUCT
517 | YES
518 |
519 | isa
520 | XCBuildConfiguration
521 | name
522 | Release
523 |
524 | 0312825319B2FEA600C8BE7D
525 |
526 | buildConfigurations
527 |
528 | 0312825419B2FEA600C8BE7D
529 | 0312825519B2FEA600C8BE7D
530 |
531 | defaultConfigurationIsVisible
532 | 0
533 | isa
534 | XCConfigurationList
535 |
536 | 0312825419B2FEA600C8BE7D
537 |
538 | baseConfigurationReference
539 | ADA6843C633346FEB3348C82
540 | buildSettings
541 |
542 | ASSETCATALOG_COMPILER_APPICON_NAME
543 | AppIcon
544 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME
545 | LaunchImage
546 | GCC_PRECOMPILE_PREFIX_HEADER
547 | YES
548 | GCC_PREFIX_HEADER
549 | SSBouncyButtonDemo/SSBouncyButtonDemo-Prefix.pch
550 | INFOPLIST_FILE
551 | SSBouncyButtonDemo/SSBouncyButtonDemo-Info.plist
552 | PRODUCT_NAME
553 | $(TARGET_NAME)
554 | WRAPPER_EXTENSION
555 | app
556 |
557 | isa
558 | XCBuildConfiguration
559 | name
560 | Debug
561 |
562 | 0312825519B2FEA600C8BE7D
563 |
564 | baseConfigurationReference
565 | ADA6843C633346FEB3348C82
566 | buildSettings
567 |
568 | ASSETCATALOG_COMPILER_APPICON_NAME
569 | AppIcon
570 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME
571 | LaunchImage
572 | GCC_PRECOMPILE_PREFIX_HEADER
573 | YES
574 | GCC_PREFIX_HEADER
575 | SSBouncyButtonDemo/SSBouncyButtonDemo-Prefix.pch
576 | INFOPLIST_FILE
577 | SSBouncyButtonDemo/SSBouncyButtonDemo-Info.plist
578 | PRODUCT_NAME
579 | $(TARGET_NAME)
580 | WRAPPER_EXTENSION
581 | app
582 |
583 | isa
584 | XCBuildConfiguration
585 | name
586 | Release
587 |
588 | 0312825919B2FEEC00C8BE7D
589 |
590 | children
591 |
592 | 0312825A19B2FEEC00C8BE7D
593 | 0312825B19B2FEEC00C8BE7D
594 |
595 | isa
596 | PBXGroup
597 | name
598 | SSBouncyButton
599 | path
600 | ../../SSBouncyButton
601 | sourceTree
602 | <group>
603 |
604 | 0312825A19B2FEEC00C8BE7D
605 |
606 | fileEncoding
607 | 4
608 | isa
609 | PBXFileReference
610 | lastKnownFileType
611 | sourcecode.c.h
612 | path
613 | SSBouncyButton.h
614 | sourceTree
615 | <group>
616 |
617 | 0312825B19B2FEEC00C8BE7D
618 |
619 | fileEncoding
620 | 4
621 | isa
622 | PBXFileReference
623 | lastKnownFileType
624 | sourcecode.c.objc
625 | path
626 | SSBouncyButton.m
627 | sourceTree
628 | <group>
629 |
630 | 0312825C19B2FEEC00C8BE7D
631 |
632 | fileRef
633 | 0312825B19B2FEEC00C8BE7D
634 | isa
635 | PBXBuildFile
636 |
637 | 6D8F45F73AB145BE91E65071
638 |
639 | fileRef
640 | F56903CC74964CE3A12301DC
641 | isa
642 | PBXBuildFile
643 |
644 | ADA6843C633346FEB3348C82
645 |
646 | includeInIndex
647 | 1
648 | isa
649 | PBXFileReference
650 | lastKnownFileType
651 | text.xcconfig
652 | name
653 | Pods.xcconfig
654 | path
655 | Pods/Pods.xcconfig
656 | sourceTree
657 | <group>
658 |
659 | B12310DC6F4E4957B9FFB9B9
660 |
661 | buildActionMask
662 | 2147483647
663 | files
664 |
665 | inputPaths
666 |
667 | isa
668 | PBXShellScriptBuildPhase
669 | name
670 | Check Pods Manifest.lock
671 | outputPaths
672 |
673 | runOnlyForDeploymentPostprocessing
674 | 0
675 | shellPath
676 | /bin/sh
677 | shellScript
678 | diff "${PODS_ROOT}/../Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
679 | if [[ $? != 0 ]] ; then
680 | cat << EOM
681 | error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.
682 | EOM
683 | exit 1
684 | fi
685 |
686 | showEnvVarsInLog
687 | 0
688 |
689 | E73975FBF49241C89E59CDA8
690 |
691 | buildActionMask
692 | 2147483647
693 | files
694 |
695 | inputPaths
696 |
697 | isa
698 | PBXShellScriptBuildPhase
699 | name
700 | Copy Pods Resources
701 | outputPaths
702 |
703 | runOnlyForDeploymentPostprocessing
704 | 0
705 | shellPath
706 | /bin/sh
707 | shellScript
708 | "${SRCROOT}/Pods/Pods-resources.sh"
709 |
710 | showEnvVarsInLog
711 | 0
712 |
713 | F56903CC74964CE3A12301DC
714 |
715 | explicitFileType
716 | archive.ar
717 | includeInIndex
718 | 0
719 | isa
720 | PBXFileReference
721 | path
722 | libPods.a
723 | sourceTree
724 | BUILT_PRODUCTS_DIR
725 |
726 |
727 | rootObject
728 | 0312821F19B2FEA600C8BE7D
729 |
730 |
731 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/Images.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "29x29",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "40x40",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "60x60",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "ipad",
20 | "size" : "29x29",
21 | "scale" : "1x"
22 | },
23 | {
24 | "idiom" : "ipad",
25 | "size" : "29x29",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "ipad",
30 | "size" : "40x40",
31 | "scale" : "1x"
32 | },
33 | {
34 | "idiom" : "ipad",
35 | "size" : "40x40",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "ipad",
40 | "size" : "76x76",
41 | "scale" : "1x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "76x76",
46 | "scale" : "2x"
47 | }
48 | ],
49 | "info" : {
50 | "version" : 1,
51 | "author" : "xcode"
52 | }
53 | }
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/Images.xcassets/LaunchImage.launchimage/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "orientation" : "portrait",
5 | "idiom" : "iphone",
6 | "extent" : "full-screen",
7 | "minimum-system-version" : "7.0",
8 | "scale" : "2x"
9 | },
10 | {
11 | "orientation" : "portrait",
12 | "idiom" : "iphone",
13 | "subtype" : "retina4",
14 | "extent" : "full-screen",
15 | "minimum-system-version" : "7.0",
16 | "scale" : "2x"
17 | },
18 | {
19 | "orientation" : "portrait",
20 | "idiom" : "ipad",
21 | "extent" : "full-screen",
22 | "minimum-system-version" : "7.0",
23 | "scale" : "1x"
24 | },
25 | {
26 | "orientation" : "landscape",
27 | "idiom" : "ipad",
28 | "extent" : "full-screen",
29 | "minimum-system-version" : "7.0",
30 | "scale" : "1x"
31 | },
32 | {
33 | "orientation" : "portrait",
34 | "idiom" : "ipad",
35 | "extent" : "full-screen",
36 | "minimum-system-version" : "7.0",
37 | "scale" : "2x"
38 | },
39 | {
40 | "orientation" : "landscape",
41 | "idiom" : "ipad",
42 | "extent" : "full-screen",
43 | "minimum-system-version" : "7.0",
44 | "scale" : "2x"
45 | }
46 | ],
47 | "info" : {
48 | "version" : 1,
49 | "author" : "xcode"
50 | }
51 | }
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/SSAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2014 Suyeol Jeon (http://xoul.kr),
5 | // StyleShare (https://stylesha.re)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 | #import
27 |
28 | @interface SSAppDelegate : UIResponder
29 |
30 | @property (strong, nonatomic) UIWindow *window;
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/SSAppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // The MIT License (MIT)
3 | //
4 | // Copyright (c) 2014 Suyeol Jeon (http://xoul.kr),
5 | // StyleShare (https://stylesha.re)
6 | //
7 | // Permission is hereby granted, free of charge, to any person obtaining a copy
8 | // of this software and associated documentation files (the "Software"), to deal
9 | // in the Software without restriction, including without limitation the rights
10 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | // copies of the Software, and to permit persons to whom the Software is
12 | // furnished to do so, subject to the following conditions:
13 | //
14 | // The above copyright notice and this permission notice shall be included in all
15 | // copies or substantial portions of the Software.
16 | //
17 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 | // SOFTWARE.
24 | //
25 |
26 | #import "SSAppDelegate.h"
27 | #import "SSBouncyButton.h"
28 |
29 | static CGFloat centerX;
30 | static CGFloat centerY;
31 |
32 | @implementation SSAppDelegate
33 |
34 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
35 | {
36 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
37 | self.window.backgroundColor = [UIColor whiteColor];
38 | [self.window makeKeyAndVisible];
39 |
40 | CGSize screenSize = [UIScreen mainScreen].bounds.size;
41 | centerX = screenSize.width / 2;
42 | centerY = screenSize.height / 2;
43 |
44 | SSBouncyButton *followButton = [[SSBouncyButton alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
45 | followButton.center = CGPointMake(centerX, centerY - 25);
46 | [followButton setTitle:@"Follow" forState:UIControlStateNormal];
47 | [followButton setTitle:@"Following" forState:UIControlStateSelected];
48 | [followButton addTarget:self action:@selector(buttonDidPress:) forControlEvents:UIControlEventTouchUpInside];
49 | [self.window addSubview:followButton];
50 |
51 | // tintColor, cornerRadius
52 | SSBouncyButton *customButton = [[SSBouncyButton alloc] initWithFrame:CGRectMake(0, 0, 100, 40)];
53 | customButton.center = CGPointMake(centerX, centerY + 25);
54 | customButton.tintColor = [UIColor grayColor];
55 | customButton.cornerRadius = 5;
56 | [customButton setTitle:@"Follow" forState:UIControlStateNormal];
57 | [customButton setTitle:@"Following" forState:UIControlStateSelected];
58 | [customButton addTarget:self action:@selector(buttonDidPress:) forControlEvents:UIControlEventTouchUpInside];
59 | [self.window addSubview:customButton];
60 |
61 | return YES;
62 | }
63 |
64 | - (void)buttonDidPress:(UIButton *)button
65 | {
66 | button.selected = !button.selected;
67 |
68 | if (![self.window viewWithTag:999]) {
69 | UILabel *label = [[UILabel alloc] init];
70 | label.text = @"Try touch long, too.";
71 | label.textColor = [UIColor lightGrayColor];
72 | label.font = [UIFont systemFontOfSize:12];
73 | label.tag = 999;
74 | [label sizeToFit];
75 | label.center = CGPointMake(centerX, centerY + 65);
76 | [self.window addSubview:label];
77 | }
78 | }
79 |
80 | @end
81 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/SSBouncyButtonDemo-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleDisplayName
8 | ${PRODUCT_NAME}
9 | CFBundleExecutable
10 | ${EXECUTABLE_NAME}
11 | CFBundleIdentifier
12 | kr.xoul.${PRODUCT_NAME:rfc1034identifier}
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | ${PRODUCT_NAME}
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleSignature
22 | ????
23 | CFBundleVersion
24 | 1.0
25 | LSRequiresIPhoneOS
26 |
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/SSBouncyButtonDemo-Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header
3 | //
4 | // The contents of this file are implicitly included at the beginning of every source file.
5 | //
6 |
7 | #import
8 |
9 | #ifndef __IPHONE_3_0
10 | #warning "This project uses features only available in iOS SDK 3.0 and later."
11 | #endif
12 |
13 | #ifdef __OBJC__
14 | #import
15 | #import
16 | #endif
17 |
--------------------------------------------------------------------------------
/SSBouncyButtonDemo/SSBouncyButtonDemo/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // SSBouncyButtonDemo
4 | //
5 | // Created by 전수열 on 8/31/14.
6 | // Copyright (c) 2014 Suyeol Jeon. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "SSAppDelegate.h"
12 |
13 | int main(int argc, char * argv[])
14 | {
15 | @autoreleasepool {
16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([SSAppDelegate class]));
17 | }
18 | }
19 |
--------------------------------------------------------------------------------