iPhone UIStringDrawing использование - PullRequest
0 голосов
/ 22 сентября 2010

Может кто-нибудь объяснить мне, как нарисовать строка с использованием UIStringDrawing вместо использования метки? вот мой код, но по какой-то причине он компилируется и на экране ничего нет ...


//
// MainViewController.m
// DotH
//

#define WINDOW_FRAME [[UIScreen mainScreen] bounds]
#define SCREEN_FRAME [UIScreen mainScreen].applicationFrame
#define GRAY [UIColor grayColor]
#define BLACK [UIColor blackColor]

@implementation MainViewController

- (void)loadView {

  UIView *view = [[UIView alloc] initWithFrame:SCREEN_FRAME];
  [view setBackgroundColor:GRAY];

  [BLACK setFill];

  NSString *string = @"Hey Dude!";
  [string drawAtPoint:CGPointMake(50, 50) withFont:[UIFont systemFontOfSize:14]];

  self.view = view;
  [view release];

}

@end


1 Ответ

4 голосов
/ 22 сентября 2010

Строка

[string drawAtPoint:CGPointMake(50, 50) withFont:[UIFont systemFontOfSize:14]];

должна находиться в методе drawRect: представления.

Это потому, что перед вызовом drawRect: прямоугольник передается в качестве аргумента drawRect: стерто.Поэтому, если вы попытаетесь сделать пользовательское рисование где-либо, кроме метода drawRect: представления, то нарисованный вами материал будет стираться всякий раз, когда вызывается drawRect:.(Не говоря уже о том, что вызов drawAtPoint: не имеет смысла, если не выполняется кодом внутри UIView.)

Вам потребуется создать собственный подкласс UIView, и этому подклассу потребуется пользовательский drawRect:метод.Если вы все еще хотите, чтобы контроллер представления был субъектом, ответственным за принятие решения о том, какая строка должна быть нарисована и как, вы должны дать своему подклассу UIView метод, подобный

- (void)addString:(NSString *)string atPoint:(CGPoint)point withFont:(UIFont *)font;

Этот метод может хранить эту информацию, например, три NSMutableArray s (одна из строк, одна из точек и один из шрифтов) и увеличивают счетчик количества строк, которые были добавлены.Затем метод вашего представления drawRect: может нарисовать строки, описанные в этих массивах.Чтобы добавить строку, ваш контроллер представления просто вызывает addString:atPoint:withFont: в вашем представлении.

...