NStimer медленный в устройстве? - PullRequest
1 голос
/ 21 января 2010

я сделал следующее, чтобы перевести фоновый файл screen.view.m.но частота кадров очень низкая. Я изменил временной интервал с другим значением, но изображение перемещается очень медленно в устройстве Iphone? Любое решение? PLS?

 - (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
    // Initialization code
    x =0;

    xx = 0;
    yy = 0;
    secX = 0;

    [NSTimer scheduledTimerWithTimeInterval:(0.1/60) target:self selector:@selector(onTimer) userInfo:nil repeats:YES];
}
return self;

}

 -(void) onTimer
 {  
xx++;
xx = ( xx % 320);

[self setNeedsDisplay];

}



 - (void)drawRect:(CGRect)rect {
// Drawing code


[[UIImage imageNamed:@"graphic.png"] drawAtPoint:CGPointMake(yy,xx )];

if(xx >= 0)
{

    [[UIImage imageNamed:@"graphic.png"]  drawAtPoint:CGPointMake((-320 - (-1 * xx)),yy)];


}

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Кажется, вы рисуете изображение каждый раз в вашем методе drawRect. Я думаю, что если вы использовали UIImageView для хранения UIImage и просто переместились, то это может быть быстрее?

В вашем .h файле

@property (nonatomic, retain) UIImageView *myImageView;

В вашем методе инициализации

self.myImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"graphic.png"]] autorelease];

и в вашем обратном вызове по таймеру просто переместите UIImageView, вот так

- (void) onTimer {
    xx++;
    xx = ( xx % 320);

    self.myImageView.center = CGPointMake(xx, self.myImageView.center.y);
}

(больше нет необходимости в drawRect)

Надеюсь, это поможет,

Sam

1 голос
/ 21 января 2010

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

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

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

Я не могу придумать причину, по которой рисование изображения снова и снова со скоростью 600 / сек в drawrect является лучшим способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...