渐变UI

1.h

 

#import <UIKit/UIKit.h>

 

@interface UIView (Gradient)

 

/* The array of CGColorRef objects defining the color of each gradient

 * stop. Defaults to nil. Animatable. */

 

@property(nullable, copy) NSArray *colors;

 

/* An optional array of NSNumber objects defining the location of each

 * gradient stop as a value in the range [0,1]. The values must be

 * monotonically increasing. If a nil array is given, the stops are

 * assumed to spread uniformly across the [0,1] range. When rendered,

 * the colors are mapped to the output colorspace before being

 * interpolated. Defaults to nil. Animatable. */

 

@property(nullable, copy) NSArray<NSNumber *> *locations;

 

/* The start and end points of the gradient when drawn into the layer's

 * coordinate space. The start point corresponds to the first gradient

 * stop, the end point to the last gradient stop. Both points are

 * defined in a unit coordinate space that is then mapped to the

 * layer's bounds rectangle when drawn. (I.e. [0,0] is the bottom-left

 * corner of the layer, [1,1] is the top-right corner.) The default values

 * are [.5,0] and [.5,1] respectively. Both are animatable. */

 

@property CGPoint startPoint;

@property CGPoint endPoint;

 

+ (UIView *_Nullable)gradientViewWithColors:(NSArray<UIColor *> *_Nullable)colors locations:(NSArray<NSNumber *> *_Nullable)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint;

 

- (void)setGradientBackgroundWithColors:(NSArray<UIColor *> *_Nullable)colors locations:(NSArray<NSNumber *> *_Nullable)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint;

 

@end

 

2.m

 

#import "UIView+Gradient.h"

#import <objc/runtime.h>

 

@implementation UIView (Gradient)

 

 

+ (Class)layerClass {

    return [CAGradientLayer class];

}

 

+ (UIView *)gradientViewWithColors:(NSArray<UIColor *> *)colors locations:(NSArray<NSNumber *> *)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint {

    UIView *view = [[self alloc] init];

    [view setGradientBackgroundWithColors:colors locations:locations startPoint:startPoint endPoint:endPoint];

    return view;

}

 

- (void)setGradientBackgroundWithColors:(NSArray<UIColor *> *)colors locations:(NSArray<NSNumber *> *)locations startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint {

    NSMutableArray *colorsM = [NSMutableArray array];

    for (UIColor *color in colors) {

        [colorsM addObject:(__bridge id)color.CGColor];

    }

    self.colors = [colorsM copy];

    self.locations = locations;

    self.startPoint = startPoint;

    self.endPoint = endPoint;

}

 

#pragma mark- Getter&Setter

 

- (NSArray *)colors {

    return objc_getAssociatedObject(self, _cmd);

}

 

- (void)setColors:(NSArray *)colors {

    objc_setAssociatedObject(self, @selector(colors), colors, OBJC_ASSOCIATION_COPY_NONATOMIC);

    if ([self.layer isKindOfClass:[CAGradientLayer class]]) {

        [((CAGradientLayer *)self.layer) setColors:self.colors];

    }

}

 

- (NSArray<NSNumber *> *)locations {

    return objc_getAssociatedObject(self, _cmd);

}

 

- (void)setLocations:(NSArray<NSNumber *> *)locations {

    objc_setAssociatedObject(self, @selector(locations), locations, OBJC_ASSOCIATION_COPY_NONATOMIC);

    if ([self.layer isKindOfClass:[CAGradientLayer class]]) {

        [((CAGradientLayer *)self.layer) setLocations:self.locations];

    }

}

 

- (CGPoint)startPoint {

    return [objc_getAssociatedObject(self, _cmd) CGPointValue];

}

 

- (void)setStartPoint:(CGPoint)startPoint {

    objc_setAssociatedObject(self, @selector(startPoint), [NSValue valueWithCGPoint:startPoint], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    if ([self.layer isKindOfClass:[CAGradientLayer class]]) {

        [((CAGradientLayer *)self.layer) setStartPoint:self.startPoint];

    }

}

 

- (CGPoint)endPoint {

    return [objc_getAssociatedObject(self, _cmd) CGPointValue];

}

 

- (void)setEndPoint:(CGPoint)endPoint {

    objc_setAssociatedObject(self, @selector(endPoint), [NSValue valueWithCGPoint:endPoint], OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    if ([self.layer isKindOfClass:[CAGradientLayer class]]) {

        [((CAGradientLayer *)self.layer) setEndPoint:self.endPoint];

    }

}

 

 

 

3.调用

- (void)gradientTest {

    

    self.view.backgroundColor = [UIColor whiteColor];

    

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 80, 200, 30)];

    UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 120, 200, 30)];

    UIView *tempView = [[UIView alloc] initWithFrame:CGRectMake(0, 160, 200, 30)];

    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 200, 200, 30)];

    

    [self.view addSubview:label];

    [self.view addSubview:btn];

    [self.view addSubview:tempView];

    [self.view addSubview:imageView];

    

    label.backgroundColor = [UIColor clearColor];

    btn.backgroundColor = [UIColor blueColor];

    tempView.backgroundColor = [UIColor blueColor];

    imageView.backgroundColor = [UIColor blueColor];

    

    [label setGradientBackgroundWithColors:@[[UIColor redColor],[UIColor orangeColor]] locations:nil startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];

    

    [btn setGradientBackgroundWithColors:@[[UIColor redColor],[UIColor orangeColor]] locations:nil startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];

    

    [tempView setGradientBackgroundWithColors:@[[UIColor redColor],[UIColor orangeColor]] locations:nil startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];

    

    [imageView setGradientBackgroundWithColors:@[[UIColor redColor],[UIColor orangeColor]] locations:nil startPoint:CGPointMake(0, 0) endPoint:CGPointMake(1, 0)];

    

    label.text = @"Text";

    label.textAlignment = NSTextAlignmentCenter;

    

    [btn setTitle:@"Button" forState:UIControlStateNormal];

    

}

 

@end

 

@implementation UILabel (Gradient)

 

+ (Class)layerClass {

    return [CAGradientLayer class];

}

 

@end

 原链接为:https://www.jianshu.com/p/e7c9e94e165b

在网上找的代码,如有侵权,请联系本人,谢谢 

posted @ 2018-08-07 17:21  叢叢的博客园  阅读(245)  评论(0编辑  收藏  举报