2013-08-09 2 views
0

У меня есть вопрос о кварце и обрезке области:кварца и отсечение области

Я хотел бы иметь прямоугольник внутри этого прямоугольника, я хотел бы иметь прямоугольник B Наполнение B dveve также сократить в A: Я хотел бы, чтобы A был пронзили B. Каков наилучший способ сделать это в кварце? Я действительно не понял, как обрезание

ответ

0

Я решил с этим простым способом:

- (void)drawRect:(CGRect)rect 
{ 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0); 
    CGContextFillRect(context,self.bounds); 
    CGContextAddRect(context, self.bounds); 
    //Add cropped rectangle: 
    CGContextAddRect(context, _croppedRegion); 
    //Clip: 
    CGContextEOClip(context); 
    CGContextSetRGBFillColor(context, 255.0, 255.0, 255.0, 0.5); 
    CGContextFillRect(context, self.bounds); 
} 
0

Если вы правильно поняли, вы хотите нарисовать меньший прямоугольник внутри большего прямоугольника, чтобы внутренний прямоугольник был прозрачным. Вы можете достичь этого, нарисуя CAShapeLayer с помощью пути, который содержит оба прямоугольника в качестве подпути. Не забудьте установить правило заполнения слоя kCAFillRuleEvenOdd.

попробовать что-то вроде этого:

CGRect rectA = CGRectMake(100, 100, 200, 200); 
CGRect rectB = CGRectMake(150, 150, 100, 100); 

UIBezierPath *path=[[UIBezierPath alloc] init]; 

// Add sub-path for rectA 
[path moveToPoint:CGPointMake(rectA.origin.x, rectA.origin.y)]; 
[path addLineToPoint:CGPointMake(rectA.origin.x+rectA.size.width, rectA.origin.y)]; 
[path addLineToPoint:CGPointMake(rectA.origin.x+rectA.size.width, rectA.origin.y+rectA.size.height)]; 
[path addLineToPoint:CGPointMake(rectA.origin.x, rectA.origin.y+rectA.size.height)]; 
[path closePath]; 

// Add sub-path for rectB 
[path moveToPoint:CGPointMake(rectB.origin.x, rectB.origin.y)]; 
[path addLineToPoint:CGPointMake(rectB.origin.x+rectB.size.width, rectB.origin.y)]; 
[path addLineToPoint:CGPointMake(rectB.origin.x+rectB.size.width, rectB.origin.y+rectB.size.height)]; 
[path addLineToPoint:CGPointMake(rectB.origin.x, rectB.origin.y+rectB.size.height)]; 
[path closePath]; 

// Create CAShapeLayer with this path 
CAShapeLayer *pathLayer = [CAShapeLayer layer]; 
[pathLayer setFillRule:kCAFillRuleEvenOdd]; /* <- IMPORTANT! */ 
[pathLayer setPath:path.CGPath]; 
[pathLayer setFillColor:[UIColor blackColor].CGColor]; 

// Add the CAShapeLayer to a view 
[someView.layer addSublayer:pathLayer];