Медленное обновление UILabel - PullRequest
0 голосов
/ 23 декабря 2011

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

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

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

Если только я не обновляю "status" UILabel (из которых есть только одна) для моегоapp.

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

Теперь, когда я пытаюсь [labelt 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;
}

Ответы [ 2 ]

0 голосов
/ 25 декабря 2011

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

0 голосов
/ 24 декабря 2011

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

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

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

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

...