zoukankan      html  css  js  c++  java
  • 渐变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

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

  • 相关阅读:
    Retrofit的使用
    解决Android Studio在Ubuntu上出现“sdk/platform-tools/adb: error=2, No such file or directory”的方法
    safair浏览器页面局部滑动问题
    App网络测试
    App测试理论简介
    JS -- 流程控制语句
    JS -- DOM(文档对象模型)
    JS -- 操作符和数组
    JS -- 基础语法1
    JS -- JavaScript简介
  • 原文地址:https://www.cnblogs.com/ccw-congcong/p/9438212.html
Copyright © 2011-2022 走看看