Permalink
Browse files

First public release

  • Loading branch information...
0 parents commit 768f040e2cbe8391d8b3d075afd56bd55862498c @ole committed Apr 20, 2010
Showing with 276 additions and 0 deletions.
  1. +5 −0 .gitignore
  2. +19 −0 LICENSE.txt
  3. +66 −0 OBGradientView/OBGradientView.h
  4. +141 −0 OBGradientView/OBGradientView.m
  5. +45 −0 README.mdown
@@ -0,0 +1,5 @@
+._DS_Store
+build/
+*.pbxuser
+*.mode1v3
+
@@ -0,0 +1,19 @@
+Copyright (c) 2010 Ole Begemann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
@@ -0,0 +1,66 @@
+/*
+ Copyright (c) 2010 Ole Begemann
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/*
+ OBGradientView.h
+
+ Created by Ole Begemann
+ April, 2010
+ */
+
+
+#import <UIKit/UIKit.h>
+#import <QuartzCore/QuartzCore.h>
+
+
+/*
+ OBGradientView is a simple UIView wrapper for CAGradientLayer. It is a plain UIView whose layer
+ is a CAGradientLayer. It is useful if using a view is more convenient than using a layer, e.g.
+ because you want to use autoresizing masks.
+
+ OBGradientView exposes all of the layer's gradient-related properties.
+ The getters and setters just forward the calls to the layer so the syntax is just the same as
+ for CAGradientLayer's properties itself. See the documentation for CAGradientLayer for details:
+ http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html
+
+ The one exception to this is the colors property: in addition to an array of CGColorRefs,
+ it also accepts an array of UIColor objects. Likewise, the getter returns an array of UIColors.
+ If you need CGColorRefs, access gradientLayer.colors instead.
+ */
+
+
+@interface OBGradientView : UIView {
+}
+
+// Returns the view's layer. Useful if you want to access CAGradientLayer-specific properties
+// because you can omit the typecast.
+@property (nonatomic, readonly) CAGradientLayer *gradientLayer;
+
+// Gradient-related properties are forwarded to layer.
+// colors also accepts array of UIColor objects (in addition to array of CGColorRefs).
+@property (nonatomic, retain) NSArray *colors;
+@property (nonatomic, retain) NSArray *locations;
+@property (nonatomic) CGPoint startPoint;
+@property (nonatomic) CGPoint endPoint;
+@property (nonatomic, copy) NSString *type;
+
+@end
@@ -0,0 +1,141 @@
+/*
+ Copyright (c) 2010 Ole Begemann
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ */
+
+/*
+ OBGradientView.m
+
+ Created by Ole Begemann
+ April, 2010
+ */
+
+#import "OBGradientView.h"
+
+
+
+#pragma mark -
+#pragma mark Implementation
+
+@implementation OBGradientView
+
+@dynamic gradientLayer;
+@dynamic colors, locations, startPoint, endPoint, type;
+
+
+// Make the view's layer a CAGradientLayer instance
++ (Class)layerClass
+{
+ return [CAGradientLayer class];
+}
+
+
+
+// Convenience property access to the layer help omit typecasts
+- (CAGradientLayer *)gradientLayer
+{
+ return (CAGradientLayer *)self.layer;
+}
+
+
+
+#pragma mark -
+#pragma mark Gradient-related properties
+
+- (NSArray *)colors
+{
+ NSArray *cgColors = self.gradientLayer.colors;
+ if (cgColors == nil) {
+ return nil;
+ }
+
+ // Convert CGColorRefs to UIColor objects
+ NSMutableArray *uiColors = [NSMutableArray arrayWithCapacity:[cgColors count]];
+ for (id cgColor in cgColors) {
+ [uiColors addObject:[UIColor colorWithCGColor:(CGColorRef)cgColor]];
+ }
+ return [NSArray arrayWithArray:uiColors];
+}
+
+
+// The colors property accepts an array of CGColorRefs or UIColor objects (or mixes between the two).
+// UIColors are converted to CGColor before forwarding the values to the layer.
+- (void)setColors:(NSArray *)newColors
+{
+ NSMutableArray *newCGColors = nil;
+
+ if (newColors != nil) {
+ newCGColors = [NSMutableArray arrayWithCapacity:[newColors count]];
+ for (id color in newColors) {
+ // If the array contains a UIColor, convert it to CGColor.
+ // Leave all other types untouched.
+ if ([color isKindOfClass:[UIColor class]]) {
+ [newCGColors addObject:(id)[color CGColor]];
+ } else {
+ [newCGColors addObject:color];
+ }
+ }
+ }
+
+ self.gradientLayer.colors = newCGColors;
+}
+
+
+- (NSArray *)locations
+{
+ return self.gradientLayer.locations;
+}
+
+- (void)setLocations:(NSArray *)newLocations
+{
+ self.gradientLayer.locations = newLocations;
+}
+
+- (CGPoint)startPoint
+{
+ return self.gradientLayer.startPoint;
+}
+
+- (void)setStartPoint:(CGPoint)newStartPoint
+{
+ self.gradientLayer.startPoint = newStartPoint;
+}
+
+- (CGPoint)endPoint
+{
+ return self.gradientLayer.endPoint;
+}
+
+- (void)setEndPoint:(CGPoint)newEndPoint
+{
+ self.gradientLayer.endPoint = newEndPoint;
+}
+
+- (NSString *)type
+{
+ return self.gradientLayer.type;
+}
+
+- (void) setType:(NSString *)newType
+{
+ self.gradientLayer.type = newType;
+}
+
+@end
@@ -0,0 +1,45 @@
+# OBGradientView
+
+`OBGradientView` is a simple `UIView` wrapper for [`CAGradientLayer`][CAGradientLayerReference]. It is a
+plain `UIView` whose layer is a `CAGradientLayer`. It is useful if using a view is more convenient than
+using a layer, e.g. because you want to use autoresizing masks.
+
+`OBGradientView` exposes all of the layer's gradient-related properties. The getters and setters just
+forward the calls to the layer so the syntax is just the same as for CAGradientLayer's properties itself.
+See the [documentation for `CAGradientLayer`][CAGradientLayerReference] for details.
+
+The one exception to this is the colors property: in addition to an array of `CGColorRef`s, it also accepts
+an array of `UIColor` objects. Likewise, the getter returns an array of `UIColor`s. If you need `CGColorRef`s,
+access `gradientLayer.colors` instead.
+
+
+## Credits
+
+Written by Ole Begemann
+http://oleb.net/
+April, 2010
+
+
+## MIT License
+
+Copyright (c) 2010 Ole Begemann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+[CAGradientLayerReference]: http://developer.apple.com/iphone/library/documentation/GraphicsImaging/Reference/CAGradientLayer_class/Reference/Reference.html "CAGradientLayer Class Reference"

0 comments on commit 768f040

Please sign in to comment.