Цвет фона UIView Всегда черный
Когда я добавляю UIView
в контроллер просмотра программно, я не могу изменить цвет фона на любой другой цвет, он всегда остается черным.
- (void)drawRect:(CGRect)rect
{
// Drawing code
self.backgroundColor = [UIColor blueColor];
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(100, 33)];
[path addLineToPoint:CGPointMake(200, 33)];
path.lineWidth = 5;
[[UIColor redColor] setStroke];
[path stroke];
}
Когда я комментирую drawrect:
out и добавляю self.backgroundColor = [UIColor blueColor];
к инициализатору, цвет меняется:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.backgroundColor = [UIColor blueColor]
}
return self;
}
Почему это и что мне нужно изменить? На самом деле я хотел бы, чтобы фон был прозрачным.
Ответы
Ответ 1
backgroundColor
вашего представления игнорируется, если вы рисуете представление самостоятельно, используя drawRect
. Измените свой код на
- (void)drawRect:(CGRect)rect
{
// Drawing code
[[UIColor blueColor] setFill]; // changes are here
UIRectFill(rect); // and here
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(100, 33)];
[path addLineToPoint:CGPointMake(200, 33)];
path.lineWidth = 5;
[[UIColor redColor] setStroke];
[path stroke];
}
Ответ 2
Как вы реализуете drawRect:
, это переопределит любой чертеж по умолчанию UIView
.
Вы должны установить свойство opaque
своего пользовательского представления NO
и очистить контекст перед отображением пути:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
self.opaque = NO;
}
return self;
}
- (void)drawRect:(CGRect)rect
{
// Drawing code
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, rect);
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(100, 33)];
[path addLineToPoint:CGPointMake(200, 33)];
path.lineWidth = 5;
[[UIColor redColor] setStroke];
[path stroke];
}
https://developer.apple.com/library/ios/documentation/uikit/reference/uiview_class/uiview/uiview.html#//apple_ref/occ/instp/UIView/opaque
Ожидается, что непрозрачное изображение заполнит его границы полностью непрозрачным контента, то есть содержание должно иметь значение альфа 1.0. Если вид непрозрачен и либо не заполняет его границ, либо содержит полностью или частично прозрачный контент, результаты непредсказуемы. Вы должен всегда устанавливать значение этого свойства НЕТ, если вид полностью или частично прозрачно.
Ответ 3
Установите цвет фона в методе initWithFrame: и сделайте свой собственный чертеж внутри drawRect:. Это должно решить вашу проблему. Функция drawRect: реализована для того, чтобы пользовательский чертеж не устанавливал конкретные свойства вида.
@implementation MyView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor yellowColor];
}
return self;
}
- (void)drawRect:(CGRect)rect{
UIBezierPath *path = [[UIBezierPath alloc] init];
[path moveToPoint:CGPointMake(100, 33)];
[path addLineToPoint:CGPointMake(200, 33)];
path.lineWidth = 5;
[[UIColor redColor] setStroke];
[path stroke];
}
@end
Ответ 4
backgroundViewController.providesPresentationContextTransitionStyle = YES;
backgroundController.definesPresentationContext = YES;
[overlayViewController setModalPresentationStyle: UIModalPresentationOverCurrentContext];
или
![введите описание изображения здесь]()
Я боролся много часов. Если его модель segue, установите для текущего контекста как свойство.