2011-12-23 2 views
0

У меня очень странная проблема. Я создаю сетку UIImageViews (в настоящее время 16x16), каждая из которых имеет UILabel, которая может содержать только один символ текста.Медленное обновление UILabel

У меня это получилось, когда вы нажмете на него, этот текст изменится, и когда вы отпустите его, он снова изменится.

Эти UILabels обновляются корректно и с правильной скоростью.

Если я не обновляю «статус» UILabel (из которых только один) для моего приложения.

Этот UILabel значительно больше, чем другие, и снова имеет только один экземпляр. Он расположен в верхней части экрана, а его размер - ширина экрана и высота 40 пикселей.

Теперь, когда я пытаюсь [label setText:] этот ярлык, он работает отлично и с правильной скоростью ... если я нажимаю на один из моих UIImageViews в верхней части экрана. Однако, когда я нажимаю на одну в нижней части экрана, она занимает заметную разницу во времени.

Я удалил любую итерацию через списки для получения UIImageViews. Он вычисляет точку, где я щелкнул по целочисленной координате (x, y), а затем выберет правильный UIImageView из массива с помощью [[array objectAtIndex: x] objectAtIndex: y].

Я сузил его до основного «статуса» UILabel как вызывающего замедление. Если я комментирую [label setText:] для этой метки и заменяю ее распечаткой NSLog, все идет с правильной скоростью. И еще раз, он идет с правильной скоростью для UIImageViews в верхней части экрана.

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

Спасибо за помощь!

Некоторый код:

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    CGPoint touchPoint = [[touches anyObject] locationInView: imageView]; 
    int x = 0; 
    int y = 0; 
    x = touchPoint.x/(screenWidth/width); 
    y = (touchPoint.y - OFFSET)/(screenHeight/height); 

    if ([self outOfBoundsWithX:x Y:y]) { 

     if (!isMoving && lastBead != nil) { 
      [self releaseBead:lastBead]; 
     } 

     lastPoint = CGPointZero; 
     lastBead = nil; 
    } 
    else { 

     if (!isMoving && lastBead != nil) { 
      NSLog(@"TEST"); 
      [self releaseBead:lastBead]; 
     } 
     else { 
      Bead * b = [self getBeadAtX:x Y:y]; 
      [self releaseBead:b]; 
     } 

    } 
} 

- (void) releaseBead:(Bead*)b 
{ 
    [b setGlyph:'c']; 
    if (statusText == "Test") { 
     [self setStatus:"Woohoo!"]; 
    else { 
     [self setStatus:"Text"]; 
    } 
} 

- (void) setStatus:(char*)status 
{ 
    label.text = [NSString stringWithCString:status encoding:NSASCIIStringEncoding]; 
    statusText = status; 
} 

ответ

0

Закончено решение этой проблемы с помощью функции drawAtPoint NSString, которая прошла через это без задержки.

0

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

CGPoint touchPoint = [[touches anyObject] locationInView: imageView]; 

но это не объясняет остальное. Возможно ли, что ярлык, вызывающий проблему, вызывает что-то в фоновом режиме? Может быть, пройти через это и посмотреть, что происходит.

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

+0

Опубликовано код. Пожалуйста, дай мне знать, что ты думаешь. Bead - это мой UIImageView и ярлык - это UILabel для основного приложения. Каждый бит содержит небольшой UILabel, который содержит один символ и устанавливается через функцию [bead setGlyph:]. – pantaryl

+0

На симуляторе он отлично работает ... на устройстве, однако, нет. Почему, по вашему мнению, проблема с TouchPoint может быть проблемой? – pantaryl