【问题标题】:Slow UILabel Update缓慢的 UILabel 更新
【发布时间】:2012-01-27 00:59:55
【问题描述】:

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

我知道了,所以当你点击它时,这个文本会改变,当你释放它时会再次改变。

这些 UILabel 以适当的速度正确更新。

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

此 UILabel 比其他 UILabel 大得多,并且同样只有一个实例。它位于屏幕的顶部,其大小为屏幕宽度和高度 40 像素。

现在,当我尝试 [label 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;
}

【问题讨论】:

    标签: iphone ios xcode uiimageview uilabel


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 发布了一些代码。请让我知道你在想什么。 Bead 是我的 UIImageView,label 是主应用程序的 UILabel。每个 Bead 包含一个小的 UILabel,其中包含一个字符,并通过 [bead setGlyph:] 函数设置。
    • 在模拟器上它运行良好......但在设备上却没有。为什么您认为接触点可能是问题所在?
    【解决方案2】:

    最终通过使用 NSString 的 drawAtPoint 函数解决了这个问题,它成功地解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      • 2011-01-02
      • 1970-01-01
      相关资源
      最近更新 更多