Как переписать текст в приложении для iPhone - PullRequest
1 голос
/ 22 июня 2010

У меня проблема с обновлением текста по таймеру. Я показываю текущее время и обновляю экран каждую секунду. У меня проблема в том, что старое время не стирается, когда печатается новое время.

Вот функция, которая отображает текущее время.

- (void)drawRect:(CGRect)rect {
    CGPoint location = CGPointMake(10,20);
    UIFont *font = [UIFont systemFontOfSize:24.0];
    [[UIColor whiteColor] set];
    NSString *s = [NSString stringWithFormat:@"%@", [NSDate date]];
    [s drawAtPoint:location withFont:font];
}

Вот таймер, который обновляет текущее время каждую секунду:

- (IBAction)startRepeatingTimer {
    NSRunLoop *runloop = [NSRunLoop currentRunLoop];
    NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
    [runloop addTimer:timer forMode:NSDefaultRunLoopMode];
}

- (void)timerFireMethod:(NSTimer*)theTimer {
    [self setNeedsDisplay];
}

Как стереть старый текст или очистить весь экран?

Ответы [ 2 ]

1 голос
/ 22 июня 2010

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

Однако вам, вероятно, не стоит беспокоиться. Почти всегда проще и надежнее использовать элемент интерфейса, предназначенный для отображения текста, такого как метка.

0 голосов
/ 22 июня 2010

Я нашел одну технику, которая работает.

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(0, 0, 0, 0, 0);
CGContextFillRect(context, rect);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...