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:];
[colors addObject:(id)[UIColor colorWithWhite:0.65 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.9 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.35 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.9 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.75 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.35 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.55 alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithWhite:0.65 alpha:].CGColor]; } else if (type == GradientMetalTypeTwo) { colors = [[NSMutableArray alloc] initWithCapacity:];
locations = [[NSMutableArray alloc] initWithCapacity:];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[locations addObject:[NSNumber numberWithInt:]];
[locations addObject:[NSNumber numberWithInt:]]; } else if (type == GradientRainbow) { colors = [[NSMutableArray alloc] initWithCapacity:];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor];
[colors addObject:(id)[UIColor colorWithRed: green: blue: alpha:].CGColor]; } angleGradientView = [[AngleGradientView alloc] initWithFrame:frame
withCGColors:colors
withLocations:locations]; return angleGradientView;
} @end

[控件] AngleGradientView的更多相关文章

  1. JS调用Android、Ios原生控件

    在上一篇博客中已经和大家聊了,关于JS与Android.Ios原生控件之间相互通信的详细代码实现,今天我们一起聊一下JS调用Android.Ios通信的相同点和不同点,以便帮助我们在进行混合式开发时, ...

  2. HTML5 progress和meter控件

    在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...

  3. 百度 flash html5自切换 多文件异步上传控件webuploader基本用法

    双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核: 若页面需默认用极速核,增加标签:<meta name=& ...

  4. JS与APP原生控件交互

    "热更新"."热部署"相信对于混合式开发的童鞋一定不陌生,那么APP怎么避免每次升级都要在APP应用商店发布呢?这里就用到了混合式开发的概念,对于电商网站尤其显 ...

  5. UWP开发必备:常用数据列表控件汇总比较

    今天是想通过实例将UWP开发常用的数据列表做汇总比较,作为以后项目开发参考.UWP开发必备知识点总结请参照[UWP开发必备以及常用知识点总结]. 本次主要讨论以下控件: GridView:用于显示数据 ...

  6. 【踩坑速记】开源日历控件,顺便全面解析开源库打包发布到Bintray/Jcenter全过程(新),让开源更简单~

    一.写在前面 自使用android studio开始,就被它独特的依赖方式:compile 'com.android.support:appcompat-v7:25.0.1'所深深吸引,自从有了它,麻 ...

  7. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  8. Windows API 设置窗口下控件Enable属性

    参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...

  9. VB.NET设置控件和窗体的显示级别

    前言:在用VB.NET开发射频检测系统ADS时,当激活已存在的目标MDI子窗体时,被其他子窗体遮住了,导致目标MDI子窗体不能显示. 这个问题怎么解决呢?网上看到一篇帖子VB.NET设置控件和窗体的显 ...

随机推荐

  1. PTA (Advanced Level) 1028 List Sorting

    List Sorting Excel can sort records according to any column. Now you are supposed to imitate this fu ...

  2. AI小白快上车!这是发往高薪职位的车!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由腾讯云AI中心发表于云+社区专栏 AI到底有多火?看看下面这组数据: 腾讯研究院<2017全球人工智能人才白皮书>报告中提 ...

  3. rails中常用的插件

    config.gem "acts-as-taggable-on", :version => '1.0.19' # tag类 config.gem "papercli ...

  4. SpringMVC源码阅读:Controller中参数解析

    1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring ...

  5. 原生JavaScript 导出excel表格(兼容ie和其他主流浏览器)

    因同事的需求是想前端导出excel表格,网上找了一些demo,自己修改了一下,可能以后会用到,记录下来吧,兼容ie和一些主流浏览器,ie可能会报错,原因参考 这里,edge 浏览器还没有办法导出,正在 ...

  6. java中线程同步问题

    先不多说,直接上个例子,著名的生产者消费者问题. public class ProducerConsumer { public static void main(String[] args) { Sy ...

  7. FOR XML PATH做为数据表中单列或者多列的字符串拼接的方法,放到一列中去,很好用。

    先看看自己弄得例子,SELECT sName+',',hoppy+','  FROM student2 where hoppy='游泳' FOR XML PATH('')--PATH后面跟的是行标题, ...

  8. 线程9--NSOperation

    一.NSOperation简介  1.简单说明  NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程  NSOperation和NSOpe ...

  9. 微信小程序,关于设置data里面的数据。

    关于设置 data里面的数据 wxml: <view>{{userName}}</view> data: { userName:'张三', } 有两种方法 方法一:直接使用点关 ...

  10. JSP学习笔记(4)-Javabean

    按照sun公司的定义,Javabean是一个可重复使用的软件组件,实际上Javabean是一种Java类,通过封装属性和方法成为具有某种功能或处理某个业务的对象,简称Bean,Javabean基于ja ...