UIView中间透明周围半透明(四种方法)
方法一
#import "DrawView.h"
@implementation DrawView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//设置 背景为clear
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
}
return self;
}
- (void)drawRect:(CGRect)rect {
[[UIColor colorWithWhite:0 alpha:0.5] setFill];
//半透明区域
UIRectFill(rect);
//透明的区域
CGRect holeRection = CGRectMake(100, 200, 200, 200);
/** union: 并集
CGRect CGRectUnion(CGRect r1, CGRect r2)
返回并集部分rect
*/
/** Intersection: 交集
CGRect CGRectIntersection(CGRect r1, CGRect r2)
返回交集部分rect
*/
CGRect holeiInterSection = CGRectIntersection(holeRection, rect);
[[UIColor clearColor] setFill];
//CGContextClearRect(ctx, <#CGRect rect#>)
//绘制
//CGContextDrawPath(ctx, kCGPathFillStroke);
UIRectFill(holeiInterSection);
}
直接添加使用就行
DrawView *drawView = [[DrawView alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.view addSubview:drawView];
方法二
#import "DrawViewArc.h"
@implementation DrawViewArc
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
}
return self;
}
- (void)drawRect:(CGRect)rect {
//中间镂空的矩形框
CGRect myRect =CGRectMake(100,100,200, 200);
//背景
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:0];
//镂空
UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:myRect];
[path appendPath:circlePath];
[path setUsesEvenOddFillRule:YES];
CAShapeLayer *fillLayer = [CAShapeLayer layer];
fillLayer.path = path.CGPath;
fillLayer.fillRule = kCAFillRuleEvenOdd;
fillLayer.fillColor = [UIColor whiteColor].CGColor;
fillLayer.opacity = 0.5;
[self.layer addSublayer:fillLayer];
}
也是直接调用就行
方法三
写到需要添加 透明圆的 view里
- (void)addArc {
//中间镂空的矩形框
CGRect myRect =CGRectMake(100,100,200, 200);
//背景
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:[UIScreen mainScreen].bounds cornerRadius:0];
//镂空
UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:myRect];
[path appendPath:circlePath];
[path setUsesEvenOddFillRule:YES];
CAShapeLayer *fillLayer = [CAShapeLayer layer];
fillLayer.path = path.CGPath;
fillLayer.fillRule = kCAFillRuleEvenOdd;
fillLayer.fillColor = [UIColor whiteColor].CGColor;
fillLayer.opacity = 0.5;
[self.view.layer addSublayer:fillLayer];
}
调用 [self addArc];
方法四
#import "DrawArc.h"
@implementation DrawArc
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.opaque = NO;
}
return self;
}
- (void)drawRect:(CGRect)rect {
//中间镂空的矩形框
CGRect myRect =CGRectMake(100,100,200, 200);
CGContextRef ctx = UIGraphicsGetCurrentContext();
//背景色
//[[UIColor colorWithPatternImage:[UIImage imageNamed:@"1.jpg"]] set];
[[UIColor colorWithWhite:0 alpha:0.5] set];
CGContextAddRect(ctx, rect);
CGContextFillPath(ctx);
//设置清空模式
/**
kCGBlendModeClear,
kCGBlendModeCopy,
kCGBlendModeSourceIn,
kCGBlendModeSourceOut,
kCGBlendModeSourceAtop,
kCGBlendModeDestinationOver,
kCGBlendModeDestinationIn,
kCGBlendModeDestinationOut,
kCGBlendModeDestinationAtop,
kCGBlendModeXOR,
kCGBlendModePlusDarker,
kCGBlendModePlusLighter
*/
CGContextSetBlendMode(ctx, kCGBlendModeClear);
//画圆
CGContextAddEllipseInRect(ctx, myRect);
//填充
CGContextFillPath(ctx);
}
UIView中间透明周围半透明(四种方法)的更多相关文章
- iOS设置圆角的四种方法
小小圆角问题,正常情况下,我们不需要过多关心,但当屏幕内比较多的时候,还是有必要了解下性能问题的 一.设置CALayer的cornerRadius 这是最常用的,也是最简单的. cornerRadiu ...
- 两个变量交换的四种方法(Java)
对于两种变量的交换,我发现四种方法,下面我用Java来演示一下. 1.利用第三个变量交换数值,简单的方法. (代码演示一下) class TestEV //创建一个类 { public static ...
- 织梦DedeCMS模板防盗的四种方法
织梦(DedeCMS)模板也是一种财富,不想自己辛辛苦苦做的模板被盗用,在互联网上出现一些和自己一模一样的网站,就需要做好模板防盗.本文是No牛收集整理自网络,不过网上的版本都没有提供 Nginx 3 ...
- 让一个图片在div中居中(四种方法)
第一种方法: <div class="title"> <div class="flag"></div> <div cl ...
- 运行jar应用程序引用其他jar包的四种方法
转载地址:http://www.iteye.com/topic/332580 大家都知道一个java应用项目可以打包成一个jar,当然你必须指定一个拥有main函数的main class作为你这个ja ...
- java中定时器的四种方法
package com.lid; import java.util.Calendar; import java.util.Date; import java.util.Timer; import ja ...
- Angular--页面间切换及传值的四种方法
1. 基于ui-router的页面跳转传参(1) 在AngularJS的app.js中用ui-router定义路由,比如现在有两个页面,一个页面(producers.html)放置了多个produce ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- linux下配置ip地址四种方法(图文方法)
主要是用第四种方法 (1)Ifconfig命令 第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig ...
随机推荐
- JS中Array详细用法
1.数组的创建 var name= new Array(); //创建一个数组 name[0]="zhangsan"; //给数组赋值 name[1]="lisi&q ...
- UE4.11新特性:胶囊体阴影
官方介绍 虚幻引擎现在支持非常柔滑的间接阴影,由代表角色的胶囊体来进行投影. 通常,在受间接光照时,并不会产生阴影,除非是屏幕空间环境遮罩.间接投影需要做的非常柔滑,因为间接光照是来自很多不同的方向, ...
- 第六百零六天 how can I 坚持(应该是六百零六天吧)
找了个考研的借口,也是挺逗的,终于结束了,而且考的很渣. 最近发生了很多事,很快就要离开泛华了,放弃安逸,开始改变吧,其实感觉自己内心挺怂的,很怕改变,哎,这不像是有梦想,能成事的人应该有的. 还是想 ...
- Linux Shell ---系统命令(1)
date命令 功能说明:显示或设置系统时间与日期. 语 法: date [-d <字符串>][-u][+%H%I%K%l%M%P%r%s%S%T%X%Z%a%A%b%B%c%d%D%j%m ...
- centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解
centos7.2环境elasticsearch-5.0.1+kibana-5.0.1+zookeeper3.4.6+kafka_2.9.2-0.8.2.1部署详解 环境准备: 操作系统:centos ...
- 未发现oracle(tm)客户端和网络组件
环境:Win7 64位.Oracle 11g 64位.PowerDesigner16.5.instant client12_1 64位. 在用PowerDesigner逆向数据库结构时,配置Oracl ...
- PHP判断请求是否是ajax请求
首先看一下框架里面是怎样判断的.ThinkPHP:define('IS_AJAX', ((isset($_SERVER['HTTP_X_REQUESTED_WITH']) && str ...
- diary and html 文本颜色编辑,行距和其它编辑总汇
p{line-height:1.2em;}/*段落行间距为2倍.*/ 几小块文字有白色的底色很突兀,显得难看.打开html,那儿有background color的设置,值是#FFFFFF. 对照ht ...
- java单例模式
单例模式(Singleton),保证一个类仅有一个实例,并提供一个访问它的全局访问点. 使用场景:在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现"不良反映" ...
- hg常用命令
关于hg命令选项 如果你是在windows系统下,使用的是图像界面,你很可能不常用它.但是一旦你了解这些命令之后,会觉得很方便.hg有很多命令,这些命令都有一定的选项,在开始的时候,只知道用它,有时候 ...