2010-04-12 3 views
0

У меня есть эта большая проблема, что я не знаю, как исправить. У меня есть UIView, что я хочу нарисовать фон прокрутки. Я использую NSTimer для обновления 30 кадров в секунду, но, похоже, он перерисовывает один кадр каждые 8 ​​секунд. Я называю [self setNeedsDisplay], но это не влияет. Я не могу понять, почему это происходит, есть ли у кого-нибудь какие-нибудь советы?Проблема с рисунком UIView

Спасибо за ваше время.

У меня есть NSTimer в моем методе applicationDidFinishLaunching

 
timer = [NSTimer scheduledTimerWithTimeInterval:0.0 
     target:self 
     selector:@selector(gameLoop:) 
     userInfo:nil 
     repeats:YES]; 

Это обмен сообщениями этот метод:

 
-(void) gameLoop: (id) sender 
{ 
    [myView updateAll]; 
    [myView setNeedsDisplay]; 
} 

MyView является UIView. UpdateAll обновляет мой код для рисования. Он отлично работает, проблема заключается в том, что метод drawRect выполняется нечасто. Мне нужно знать, как заставить его выполнять 30 кадров в секунду. Я все время вижу, что люди говорят, что все, что вам нужно сделать, это то, что у меня выше, но setNeedsDisplay по-прежнему вызывает только каждые 8 ​​секунд.

Спасибо за вашу помощь ...

+0

Опубликовать соответствующий код. –

ответ

0

Оказалось, что мой код был просто невероятно неэффективным, и это вызывало замедление не по таймеру. Если у вас есть аналогичная проблема, убедитесь, что вы проверили свой drawRect с помощью некоторого простого рисунка (например, рисунка кадров в секунду на экране), прежде чем считать, что он не выполняется. Спасибо за просмотр.

0

Не используйте NSTimer.

От NS Timer reference

Из-за различных источников входного сигнала типичный цикл выполнения управляет, эффективное разрешение временного интервала для таймера ограничено по порядку 50-100 миллисекунд.

Я не эксперт на iPhone, но вам, вероятно, нужно заглянуть в анимацию на платформе, чтобы достичь нужного интервала обновления.

1

Перерисовать вид - это дорогостоящая операция, которая значительно снизит производительность. Если вы можете вместо этого, просто используйте фон в качестве изображения, перемещающегося по фону, используя [UIView beginAnimation... или используя CAAnimation s.

+0

Проблема в том, что я должен сделать это таким образом. Это не для конечного приложения, а для сравнения производительности с другой технологией. – toc777

+0

Ну, я думаю, ваше сравнение сделано, не так ли? «Ужасная производительность», по-видимому, является достаточно хорошим сравнением для большинства;) –

+0

Я знаю, что мне не нужно обновлять 30 кадров в секунду для сравнения производительности, но я хотел бы заставить его работать в любом случае (только для шоу), потому что это так работает на другой технологии. – toc777

Смежные вопросы