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. Nginx 为 Golang 配置 web 服务

    server { charset utf-; client_max_body_size 128M; #listen ; ## 监听 ipv4 上的 端口 #listen [::]: default_s ...

  2. 如何在.Net Core MVC中为动态表单开启客户端验证

    非Core中的请参照: MVC的验证 jquery.validate.unobtrusive mvc验证jquery.unobtrusive-ajax 参照向动态表单增加验证 页面引入相关JS: &l ...

  3. firefox native extension -- har export trigger

    这两天想学习下如何在运行自动化脚本时去capture http traffic,google看到一篇博客介绍用browser mob proxy或者firefox+firebug+netexport, ...

  4. Django控制器

    配置路由 通过对urls.py的配置将用户请求映射到处理函数. Django的URL字符串匹配实际上基于正则表达式,这允许单条URL可以匹配一类请求.参见Django Book中的示例: from d ...

  5. JDK动态代理[3]----WeakCache缓存的实现机制

    上一篇我们分析了Proxy类的内部是怎样产生代理类的,我们看到了Proxy内部用到了缓存机制,如果根据提供的类加载器和接口数组能在缓存中找到代理类就直接返回该代理类,否则会调用ProxyClassFa ...

  6. [javaEE] http协议详细

    上一篇:http://www.cnblogs.com/taoshihan/p/5346731.html HTTP请求 请求行 GET /taoshihan/p/5346731.html HTTP/1. ...

  7. iOS 网络请求数据缓存

    1. NSURLCache简介: iOS对NSURLRequest提供了7种缓存策略:(实际上能用的只有4种) NSURLRequestUseProtocolCachePolicy // 默认的缓存策 ...

  8. 求N的因子之和。

    理论依据: 代码: /* 显然,数据够大的时候,数组要用 __int64 */ #include<iostream> #include<map> #include<cst ...

  9. 仿ElementUI构建自己的Vue组件库用babel-plugin-component按需加载组件及自定义SASS主题

    最近使用ElementUI做项目的时候用Babel的插件babel-plugin-component做按需加载,使得组件打包的JS和CSS包体积大大缩小,加载速度也大大提升,所有想模仿做一个组件库也来 ...

  10. 关于JS中闭包的问题

    一直以来,我都以为我已经懂了JavaScript中闭包的概念,直到有一次小伙伴突然问我这个概念的时候,我才发现我根本不知道该怎来么跟他来讲述这个概念. 那时候我就知道我是自我欺骗,打肿脸充胖子了. 所 ...