├── .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 | SSBouncyButton 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 | [![Version](http://cocoapod-badges.herokuapp.com/v/UIColor-Hex/badge.png)](http://cocoadocs.org/docsets/UIColor-Hex) 4 | [![Platform](http://cocoapod-badges.herokuapp.com/p/UIColor-Hex/badge.png)](http://cocoadocs.org/docsets/UIColor-Hex) 5 | [![Build Status](https://travis-ci.org/nakajijapan/UIColor-Hex.png?branch=master)](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 | --------------------------------------------------------------------------------