2011-12-23 3 views
0

매우 이상한 문제가 있습니다. 나는 UIImageViews (현재 16x16)의 그리드를 만들고 있는데, 각각은 텍스트 하나만을 포함 할 수있는 UILabel을 가지고있다.느린 UILabel 업데이트

클릭하면이 텍스트가 변경되고 놓으면 다시 변경됩니다.

이 UILabels는 올 바르고 적절한 속도로 업데이트됩니다.

내 앱의 "상태"UILabel (단 하나만 있음)을 업데이트하지 않는 한.

이 UILabel은 다른 것보다 훨씬 크며 다시 한 인스턴스 만 있습니다. 화면 상단에 위치하며 크기는 화면의 너비와 높이가 40 픽셀입니다.

이제 [label setText :]이 레이블을 만들려고 할 때 화면 상단 근처에있는 UIImageViews 중 하나를 클릭하면 적절한 속도로 올바르게 수행됩니다. 그러나 화면 맨 아래쪽을 클릭하면 눈에 띄는 시간차가 있습니다.

UIImageViews를 검색하기 위해 목록을 통해 반복을 제거했습니다. 그것은 (x, y) 정수 좌표로 클릭 한 지점을 계산 한 다음 [[array objectAtIndex : x] objectAtIndex : y]를 통해 배열에서 적절한 UIImageView를 선택합니다.

주 "상태"UILabel에 속도가 느려지도록 좁혔습니다. 라벨에 [label setText :]를 주석 처리하고 NSLog 출력으로 바꾸면 모든 것이 올바른 속도로 진행됩니다. 그리고 다시 한 번 UIImageView의 정확한 속도로 화면 상단으로갑니다.

누구에게 의견이 있습니까? 저는 분명히 여기에 어떤 종류의 목록을 반복하지 않는다는 것을 알고 있습니다. 그래서이 속도 저하가 그리드의 맨 아래에서만 발생하는 이유에 대해서는 약간 혼란 스럽습니다.

도움 주셔서 감사합니다.

일부 코드 :

-(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

NSString의 drawAtPoint 함수를 사용하여이 문제를 해결했습니다.이 함수는 지체없이 처리 할 수있었습니다.

0

내가 아주 확실하지 않다. 문제가 될 수있는 유일한 행은 다음과 같습니다.

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

하지만 나머지는 설명하지 않습니다. 문제를 일으키는 라벨이 백그라운드에서 무엇인가를 호출 할 가능성이 있습니까? 어쩌면 단계를 밟아 진행 상황을 확인하십시오.

또한 이상하게 들릴 수도 있지만 시뮬레이터 문제 일 수 있습니다. 시뮬레이터에서 응용 프로그램을 삭제 한 다음 다시 실행하십시오.

+0

일부 코드를 게시했습니다. 당신의 생각을 알려주세요. 구슬이 내 UIImageView이며 레이블은 주 응용 프로그램의 UILabel입니다. 각 비드는 하나의 문자를 포함하고 [비드 setGlyph :] 함수를 통해 설정된 작은 UILabel을 포함합니다. – pantaryl

+0

시뮬레이터에서는 잘 실행되지만 ... 장치에서는 작동하지 않습니다. 왜 터치 포인트가 문제 일 수 있다고 생각하십니까? – pantaryl