最近做的项目中有一个扫描二维码的功能,想做成类似微信扫一扫的效果,周边模糊中间清晰的效果,实现过程如下:
创建一个继承自UIView的视图类,当前视图背景设置为透明,在 - (void)drawRect:(CGRect)rect 里绘图。
实现代码如下:
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor clearColor];
self.opaque = NO; // 设置为透明的
}
return self;
}
// 在接收者视图中绘制矩形
- (void)drawRect:(CGRect)rect {
[[UIColor colorWithWhite:0 alpha:0.5] setFill]; // 设置颜色为黑色
// 半透明区域
UIRectFill(rect); // 向当前绘图环境所创建的内存中的图片上填充一个矩形
// 透明区域
CGRect clearRect = CGRectMake(60, 80, MSW - 120, MSW - 120);
// 两个视图相交的区域
CGRect clearIntersection = CGRectIntersection(clearRect, rect);
// 相交的区域设置为透明
[[UIColor clearColor] setFill];
// 把透明视图填充在图片上
UIRectFill(clearIntersection);
}
然后把这个视图类创建,就能得到中间透明,周边模糊的效果。