慢UILabel更新

时间:2011-12-23 19:32:08

标签: iphone ios xcode uiimageview uilabel

我有一个非常奇怪的问题。我正在创建一个UIImageViews网格(目前为16x16),每个网格上都有一个UILabel,只能包含一个文本字符。

我已经知道了,当你点击它时,这个文本会改变,当你发布它时会再次改变。

这些UILabels以正确的速度正确更新。

除非我也为我的应用更新了“状态”UILabel(其中只有一个)。

这个UILabel比其他人大得多,而且只有一个实例。它位于屏幕顶部,其大小为屏幕宽度,高度为40像素。

现在当我尝试[标记setText:]这个标签时,它表现得很好并且速度适当......如果我点击屏幕顶部附近的一个UIImageViews。但是,当我点击屏幕底部的一个时,它会有明显的时间差异。

我已经删除了用于检索UIImageViews的列表的任何迭代。它计算我点击(x,y)整数坐标的位置,然后通过[[array objectAtIndex:x] objectAtIndex:y]从数组中选择正确的UIImageView。

我把它缩小到主要的“状态”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 :(得分:0)

我不太确定。唯一看起来可能是问题的一行是:

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

但这并不能解释其余部分。导致问题的标签是否可能在后台调用某些内容?也许一步一步看看发生了什么。

此外,这可能听起来很奇怪,但可能是模拟器问题。尝试从模拟器中删除应用程序,然后再次运行它。

答案 1 :(得分:0)

结束使用NSString的drawAtPoint函数来解决这个问题,该函数设法通过这个没有延迟。