2013-09-24 3 views
0

UIScrollView에 줄자를 만들고 있는데, 이미지의 가로줄이 있고 프로그램으로 숫자를 추가하고 싶습니다.UIScrollView에 텍스트 추가

tape measure

내가이 시도 (파란색 참고 바로 레이아웃을 얻는 데 도움이되었다) : 작동

for (NSInteger i = 0; i < self.maxUnits.integerValue; i++) { 
     static CGFloat labelWidth = 40; 
     CGFloat x = (halfScreen - (labelWidth/2)) + (i * self.widthOfOneFraction.floatValue * self.numberOfFractions.floatValue); 

     CGRect frame = CGRectMake(x-1, 41, labelWidth, 70); 

     UILabel *label = [[UILabel alloc] initWithFrame:frame]; 
     label.text = [NSString stringWithFormat:@"%d", i]; 
     label.textAlignment = NSTextAlignmentCenter; 
     label.textColor = [UIColor tlbBlueColor]; 
     label.font = [UIFont fontWithName:@"HelveticaNeue-Light" size:20.0]; 
     [self addSubview:label]; 
    } 

을하지만, RAM의를 40Mb에 대해 사용합니다. 나는 CATextLayer에 텍스트를 추가하는 것이 더 효율적이 될 수 있다는 생각,하지만 난 그것을 작동 얻을 수 없습니다

for (NSInteger i = 0; i < self.maxUnits.integerValue; i++) { 
    CATextLayer *label = [[CATextLayer alloc] init]; 
    [label setFont:@"HelveticaNeue-Light"]; 
    [label setFontSize:20]; 
    [label setFrame:frame]; 
    [label setString:[NSString stringWithFormat:@"%d", i]]; 
    [label setAlignmentMode:kCAAlignmentCenter]; 
    [label setForegroundColor:[[UIColor whiteColor] CGColor]]; 
    [self.layer addSublayer:label]; 
} 

숫자가 화면에 표시되지 않습니다.

제 질문은 제가 첫 번째 방법을보다 효율적으로 만들 수 있고, 그렇지 않을 경우 두 번째 방법이 효과적 일 때 더 효율적으로 사용할 수 있습니까? 그렇다면 어떻게 작동시킬 수 있습니까?

+0

구현을 일반 표보기와 같이 일반화 할 수 있기를 바랍니다. 무작위 적으로 화면을 스크롤 할 때 해당 숫자를 다시 한 번보기 계층 구조에 강제로 쉽게 다시 사용할 수 있습니다. – CodaFi

+0

나는 단지 실제로 화면의 너비의 3 배를 말하고 그 다음 다시 쓸어 버리는 것에 대해 궁금해했다. 그러나 정말로 빠르게 스크롤 할 수 있으면 성능이 저하 될 수있다. – Lewis42

답변

0

로딩 할 때 표시되는 항목을로드하고 스크롤 할 때 좀 더로드하는 방법을 변경했습니다.

이것은 높은 메모리 문제를 완전히 수정 한 것으로 보이며 두 끝으로 스크롤해도 동일한 양의 메모리를 사용하지 않습니다. 원래 코드가 어떻게 작동했는지 누수가 있었던 것 같습니다.

관련 문제