您的位置:首页 > 其它

[控件] AngleGradientView

2015-05-17 22:20 267 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: