Прозрачный фоновый UIView drawRect circle

#ios #objective-c #uiview

#iOS #objective-c #uiview

Вопрос:

Я рисую круг с белой обводкой и цветом, указанным свойством, используя этот код:

 - (void)drawRect:(CGRect)rect {

    CGContextRef contextRef = UIGraphicsGetCurrentContext();

    CGContextClearRect(contextRef, rect);

    // Set the border width
    CGContextSetLineWidth(contextRef, 1.5);

    // Set the circle fill color to GREEN
    CGFloat red, green, blue, alpha;
    BOOL didConvert = [_routeColor getRed:amp;red green:amp;green blue:amp;blue alpha:amp;alpha];

    CGContextSetRGBFillColor(contextRef, red, green, blue, 1.0);

    // Set the cicle border color to BLUE
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0);

    // Fill the circle with the fill color
    CGContextFillEllipseInRect(contextRef, rect);

    // Draw the circle border
    CGContextStrokeEllipseInRect(contextRef, rect);
}
  

Изображение, которое я получаю обратно, выглядит следующим образом:

введите описание изображения здесь

Как я могу удалить черный?

Комментарии:

1. Предложение — избавиться от вызовов CGContextSetRGBFillColor и CGContextSetRGBStrokeColor . Вместо этого выполните следующее: [_routeColor setFill]; [[UIColor whiteColor] setStroke]; . И, к вашему сведению, значения цвета должны быть в диапазоне 0.0 — 1.0, поэтому все ваши значения 255.0 должны быть 1.0.

Ответ №1:

Установите для backgroundColor вида значение [UIColor clearColor] .

Обратите внимание, что настройку цвета фона необходимо выполнить только один раз, при создании представления.

Комментарии:

1. Чтобы добавить к этому ответу — установите цвет фона в init методе пользовательского представления, а не в drawRect: .

2. Спасибо @rmaddy, я добавил примечание к ответу.

Ответ №2:

Мне это было нужно. Когда я установил это, сработало.

 self.opaque = NO;
  

Ответ №3:

Это сработало для меня на Swift 3:

 self.isOpaque = false
self.backgroundColor = UIColor.clear
  

Комментарии:

1. Как сказал @ndnguyen, вам нужно установить эти свойства внутри методов инициализации

2. Вы также можете установить их в раскадровке.

Ответ №4:

При инициализации необходимо установить цвет фона на clearColor.

Вот пример

 -(id)initWithCoder:(NSCoder*)aDecoder
{
    self = [super initWithCoder:aDecoder];

    if(self)
    {
        self.backgroundColor = [UIColor clearColor];
    }

    return self;
}

- (void)drawRect:(CGRect)rect {

    CGContextRef contextRef = UIGraphicsGetCurrentContext();

    CGContextClearRect(contextRef, rect);

    // Set the border width
    CGContextSetLineWidth(contextRef, 1.5);

    // Set the circle fill color to GREEN
    CGFloat red, green, blue, alpha;
    BOOL didConvert = [_routeColor getRed:amp;red green:amp;green blue:amp;blue alpha:amp;alpha];

    CGContextSetRGBFillColor(contextRef, red, green, blue, 1.0);

    // Set the cicle border color to BLUE
    CGContextSetRGBStrokeColor(contextRef, 255.0, 255.0, 255.0, 1.0);

    // Fill the circle with the fill color
    CGContextFillEllipseInRect(contextRef, rect);

    // Draw the circle border
    CGContextStrokeEllipseInRect(contextRef, rect);
}