iPhone drawRect повторно использовать для рисования в поле зрения - PullRequest
0 голосов
/ 20 августа 2009

Я создал вид и хотел бы нарисовать или добавить к нему текст позже, основываясь на состоянии приложения, когда пользователь касается его.

Могу ли я сделать это с drawRect, если у меня есть несколько возможных элементов рисования / текста? Если так, как вы вызываете это? Если нет, то где мне искать, чтобы достичь этого?

Заранее спасибо,

Steve

Ответы [ 2 ]

1 голос
/ 20 августа 2009

Вы можете сделать UIView недействительным, позвонив по номеру

[myView setNeedsDisplay];

Который будет вызывать операционную систему drawRect для myView в соответствующее время.

0 голосов
/ 20 августа 2009

Лучший способ рисовать простые объекты, такие как текст, изображения из файлов или, скажем, однотонные прямоугольники, - просто добавить эти элементы в качестве подпредставлений вашего вида. Как правило, гораздо проще никогда не беспокоиться о методе drawRect:, если вам не нужно делать то, что вы не можете сделать, добавляя подпредставления. Например, если вы хотите создать круговую диаграмму на основе некоторых динамических данных, имеет смысл написать свои собственные процедуры рисования. В противном случае, когда вы работаете только с представлениями и подпредставлениями, drawRect: всегда вызывается для вас автоматически всякий раз, когда это уместно, в том числе если вы изменяете какие-либо свойства этих объектов, которые требуют визуальной разницы, такие как изменение цвета шрифта или пиксельные координаты подпредставления.

Вот краткий пример того, как вы можете добавить два подпредставления в представление, например, в методе loadView контроллера представления:

CGRect helloFrame = CGRectMake(10, 10, 100, 50);
UILabel* helloLabel = [[UILabel alloc] initWithFrame:helloFrame];
helloLabel.text = @"hello,";
helloLabel.textColor = [UIColor redColor];
[self.view addSubview:helloLabel];

CGRect worldFrame = CGRectMake(60, 60, 100, 50);
UILabel* worldLabel = [[UILabel alloc] initWithFrame:worldFrame];
worldLabel.text = @"world!";
worldLabel.textColor = [UIColor orangeColor];
[self.view addSubview:worldLabel];
...