AngleGradientView
效果
说明
1. 用源码产生带环形渐变色的view
2. 可以配合maskView一起使用 (上图中的右下角图片的效果)
源码
https://github.com/YouXianMing/UI-Component-Collection
https://github.com/paiv/AngleGradientLayer
//
// AngleGradientView.h
// GradientLayer
//
// Created by YouXianMing on 15/5/15.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import <UIKit/UIKit.h>
typedef enum : NSUInteger {
/**
* 金属风格
*/
GradientMetalTypeOne,
GradientMetalTypeTwo,
/**
* 彩虹风格
*/
GradientRainbow,
test,
} EAngleGradientType;
@interface AngleGradientView : UIView
/**
* 返回带环形渐变颜色的view
*
* @param frame 尺寸
* @param colors 颜色数组(CGColor)
* @param locations 颜色分割点数组(范围取值为[0, 1], 渐变递增,需要包含0与1这两个点)
*
* @return 创建好的带环形渐变的view
*/
- (instancetype)initWithFrame:(CGRect)frame
withCGColors:(NSArray *)colors
withLocations:(NSArray *)locations;
/**
* 便利构造器,便捷的创建出指定风格的渐变环形的view
*
* @param frame 尺寸
* @param type 指定的风格
*
* @return 创建好的带环形渐变的view
*/
+ (instancetype)gradientViewWithFrame:(CGRect)frame
gradientType:(EAngleGradientType)type;
@end
//
// AngleGradientView.m
// GradientLayer
//
// Created by YouXianMing on 15/5/15.
// Copyright (c) 2015年 YouXianMing. All rights reserved.
//
#import "AngleGradientView.h"
#import "AngleGradientLayer.h"
@interface AngleGradientView () {
AngleGradientLayer *_angleGradientLayer;
}
@end
@implementation AngleGradientView
/**
* 重置layer为AngleGradientLayer
*/
+ (Class)layerClass {
return [AngleGradientLayer class];
}
- (instancetype)initWithFrame:(CGRect)frame {
return [self initWithFrame:frame withCGColors:nil withLocations:nil];
}
- (instancetype)initWithFrame:(CGRect)frame withCGColors:(NSArray *)colors withLocations:(NSArray *)locations {
self = [super initWithFrame:frame];
if (self) {
_angleGradientLayer = (AngleGradientLayer *)self.layer;
if (colors != nil) {
_angleGradientLayer.colors = colors;
_angleGradientLayer.locations = locations;
}
}
return self;
}
+ (instancetype)gradientViewWithFrame:(CGRect)frame
gradientType:(EAngleGradientType)type {
NSMutableArray *colors = nil;
NSMutableArray *locations = nil;
AngleGradientView *angleGradientView = nil;
if (type == GradientMetalTypeOne) {
colors = [[NSMutableArray alloc] initWithCapacity:16];
[colors addObject:(id)[UIColor colorWithWhite:0.65 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.9 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.35 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.9 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.35 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.55 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.65 alpha:1].CGColor];
} else if (type == GradientMetalTypeTwo) {
colors = [[NSMutableArray alloc] initWithCapacity:16];
locations = [[NSMutableArray alloc] initWithCapacity:16];
[colors addObject:(id)[UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:1 green:1 blue:1 alpha:1].CGColor];
[locations addObject:[NSNumber numberWithInt:0]];
[locations addObject:[NSNumber numberWithInt:1]];
} else if (type == GradientRainbow) {
colors = [[NSMutableArray alloc] initWithCapacity:16];
[colors addObject:(id)[UIColor colorWithRed:1 green:0 blue:0 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:1 green:1 blue:0 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:0 green:1 blue:0 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:0 green:1 blue:1 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:0 green:0 blue:1 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:1 green:0 blue:1 alpha:1].CGColor];
[colors addObject:(id)[UIColor colorWithRed:1 green:0 blue:0 alpha:1].CGColor];
}
angleGradientView = [[AngleGradientView alloc] initWithFrame:frame
withCGColors:colors
withLocations:locations];
return angleGradientView;
}
@end