【发布时间】: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