我有一个非常奇怪的问题。我正在创建一个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;
}
答案 0 :(得分:0)
我不太确定。唯一看起来可能是问题的一行是:
CGPoint touchPoint = [[touches anyObject] locationInView: imageView];
但这并不能解释其余部分。导致问题的标签是否可能在后台调用某些内容?也许一步一步看看发生了什么。
此外,这可能听起来很奇怪,但可能是模拟器问题。尝试从模拟器中删除应用程序,然后再次运行它。
答案 1 :(得分:0)
结束使用NSString的drawAtPoint函数来解决这个问题,该函数设法通过这个没有延迟。