UIView镂空"/>
UIView镂空
在UIView中镂空其中一块的方法有两种:
- (instancetype)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {self.backgroundColor = [UIColor clearColor];self.opaque = NO;}return self;
}- (void)drawRect:(CGRect)rect {[super drawRect:rect];CGRect clearRect = CGRectMake(100, 100, 100, 100);CGContextRef ctx = UIGraphicsGetCurrentContext();[[UIColor colorWithRed:0 green:0 blue:0 alpha:0.8] set];CGContextAddRect(ctx, self.frame);CGContextFillPath(ctx);
// 将混合模式选择为清除CGContextSetBlendMode(ctx, kCGBlendModeClear);CGContextAddRect(ctx, clearRect);CGContextFillPath(ctx);// 也可直接清除,因为将混合模式设置为清除的话,整个clearRect就会被清除,想要添加边界做成微信扫描的效果比较困难。
// CGClearRect(ctx, clearRect);
}
复制代码
- (instancetype)initWithFrame:(CGRect)frame {self = [super initWithFrame:frame];if (self) {self.backgroundColor = [UIColor clearColor];self.opaque = NO;}return self;
}- (void)drawRect:(CGRect)rect {[super drawRect:rect];CGRect clearRect = CGRectMake(100, 100, 100, 100);UIBezierPath *path = [UIBezierPath bezierPathWithRect:rect];UIBezierPath *rectPath = [UIBezierPath bezierPathWithRect:clearRect];[path appendPath:rectPath];
// 设置填充规则[path setUsesEvenOddFillRule:YES];CAShapeLayer *shapeLayer = [CAShapeLayer layer];shapeLayer.fillColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:1].CGColor;shapeLayer.path = path.CGPath;shapeLayer.fillRule = kCAFillRuleEvenOdd;shapeLayer.opacity = 0.5;[self.layer addSublayer:shapeLayer];
}复制代码
转载于:
更多推荐
UIView镂空
发布评论