Как вырезать треугольный вид из прямоугольного в объективе C? - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу посмотреть как на картинке ниже: - желаемый вид Я использую UIBezierPath и CAShapeLayer для архивации этого кода ниже: -

     UIBezierPath *path = [[UIBezierPath alloc] init];
//    [[UIColor blackColor] setStroke];
//    [[UIColor redColor] setFill];
    [path moveToPoint:CGPointMake(_pendingView.frame.origin.x, _pendingView.frame.origin.y)];
    [path addLineToPoint:CGPointMake(_pendingView.frame.origin.x+15, _pendingView.frame.origin.y+15)];
    [path addLineToPoint:CGPointMake(_pendingView.frame.origin.x, _pendingView.frame.origin.y+30)];
    [path closePath];

//    [path fill ]; 
//    [path stroke];
    CAShapeLayer *shapeLayer = [CAShapeLayer new];
    shapeLayer.frame = _pendingView.bounds;
    shapeLayer.path = path.CGPath;
    shapeLayer.fillColor = [UIColor redColor].CGColor;
    shapeLayer.strokeColor = [UIColor blackColor].CGColor;

    self.pendingView.layer.mask = shapeLayer;
   // [self.pendingView.layer addSublayer:shapeLayer];

но я не могу достичь. Вид отображается без отсечения и цвет фона вида.

P.S: - представление в режиме ожидания.

КАК НА ПРЕДЛОЖЕНИЕ @inderJit , я исправляю свой код, но получаю выходное изображение нежелательное, которое выше прикреплено. Просмотр цвета фона вызывает проблемы. Как я могу достичь этого?

1 Ответ

0 голосов
/ 06 ноября 2018

В вашем коде вы используете _pendingView, т. Е. Ваш UIView, источник для пути прорисовки, но слой будет помещен внутрь _pendingView, поэтому из-за этого вы не получаете правильный вывод.

Для уточнения вы можете перейти по приведенному ниже коду

UIBezierPath *path = [[UIBezierPath alloc] init];
//    [[UIColor blackColor] setStroke];
//    [[UIColor redColor] setFill];
[path moveToPoint:CGPointMake(0, 0)];
[path addLineToPoint:CGPointMake(15, _vwArrow.frame.size.height/2)];
[path addLineToPoint:CGPointMake(0, _vwArrow.frame.size.height)];
[path closePath];

//    [path fill ];
//    [path stroke];
CAShapeLayer *shapeLayer = [CAShapeLayer new];
shapeLayer.frame = _vwArrow.bounds;
shapeLayer.path = path.CGPath;
shapeLayer.fillColor = self.view.backgroundColor.CGColor;
//    shapeLayer.strokeColor = [UIColor blackColor].CGColor;

//    _vwArrow.layer.masksToBounds = TRUE;
[_vwArrow.layer addSublayer:shapeLayer];
[self.view setNeedsDisplay];
...