Не правильно делает рисунки компьютерной графики

Я только начал работать с Core Graphics, и я, вероятно, понятия не имел, что происходит.

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

UIView *notificationView = [[UIView alloc] initWithFrame:[[[self navigationController] view] frame]];

CGRect rect = CGRectMake(self.view.frame.size.width / 2 - 50, self.view.frame.size.height / 2, 100, 100);
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0.0);
[[UIColor colorWithWhite:0 alpha:0.5] setFill];

UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:10];
[path fill];

[notificationView setNeedsDisplay];

[[[self navigationController] view] addSubview:notificationView];

1 ответ

Решение

Вариант 1 (самый удобный дизайн)

UIViewНа самом деле они не предназначены для того, чтобы другие объекты втягивались в них. Это имеет гораздо больше смысла дизайна для подкласса UIView и пусть он делает свой собственный рисунок в drawRect, Таким образом, вам не нужно вставлять так много кода каждый раз, когда вы хотите использовать представление уведомлений.

Вариант 2 (самый простой и, вероятно, лучший)

Если вам просто нужен полупрозрачный черный прямоугольник с закругленными углами (я полагаю, для индикатора загрузки), вы можете сделать это намного проще, создав UIView в нужном размере и центрировав его в виде. Установите его цвет фона на полупрозрачный цвет, [UIColor colorWithWhite:0.0 alpha:0.5], Наконец, добавьте строку

notificationView.layer.cornerRadius = 10.0;

Вам также может понадобиться поставить #import <QuartzCore/QuartzCore.h> в вашем заголовочном файле, так как это CALayer трюк.

Вариант 3 (окольный)

Если вы действительно хотите сделать это так, как вы уже делаете, измените notificationView к UIImageView, затем установите рамку вида равной размеру черного скругленного прямоугольника. Затем добавьте это после того, как вы заполните путь:

UIImage *indicatorImage = UIGraphicsGetImageFromCurrentImageContext();
notificationView.image = indicatorImage;

Вам не нужно звонить setNeedsDisplay больше.

Надеюсь, один из этих звуков звучит хорошо для вас!

Другие вопросы по тегам