2011-12-20 1 views
0

현재 파일을 읽고 제목을 목록에 넣는 앱을 작성 중입니다. 각 제목을 클릭하면 해당 제목과 연결된 텍스트가 포함 된 CATextLayer가있는 컨트롤러로 전환됩니다 (일반적으로 몇 개의 단락). 처음에는 UITextView를 사용했지만 형식화 옵션 (정렬 정렬)이 더 필요하다는 것을 알았고 CATextLayer로 전환했습니다.CATextLayer 스크롤하지 않음

CATextLayer가 자연스럽게 스크롤 할 수 있다는 점을 다른 질문에서 읽었지만 그 동작을 트리거하는 방법을 찾을 수 없습니다. contentsRect을 설정하려고하면 내 텍스트가보기에서 완전히 사라집니다. 내가 CATextLayer 수많은 다른 SO 질문에 대한 문서를 통해 보았다, 그리고 내가 찾던 것을 발견하지 않았습니다

CATextLayer *textLayer = [[CATextLayer alloc] init]; 
    textLayer.alignmentMode = kCAAlignmentJustified; 
    textLayer.string = [_data objectForKey:@"Text"]; 
    textLayer.wrapped = YES; 
    textLayer.frame = CGRectMake(27, 75, 267, 320); 
    textLayer.font = [UIFont fontWithName:@"Helvetica" size:17.0f]; 
    textLayer.foregroundColor = [UIColor blackColor].CGColor; 
    textLayer.backgroundColor = [UIColor whiteColor].CGColor; 
    [textLayer setCornerRadius:8.0f]; 
    [textLayer setMasksToBounds:YES]; 
    [textLayer setBorderWidth:1.0f]; 
    [textLayer setBorderColor:[UIColor grayColor].CGColor]; 
    [self.view.layer addSublayer:textLayer]; 
    [textLayer release]; 

:

은 스크롤을 제외하고 작동 내 셋업 코드입니다 .

편집 :이 클래스는 스크롤 할 수 있지만 contentsRect의 오프셋을 사용하여 프로그래밍 방식으로 수행해야합니다. 일부 도우미 함수 (scrollToPointscrollToRect)와 약간 더 정교한 계산을 위해 CAScrollLayer으로 하위 계층화 할 수 있습니다. CAScrollLayer 또한 프로그래머가 터치 이벤트를 처리해야하므로 간단히하기 위해이 경로를 추구하지 않을 것입니다.

CAScrollLayer *scrollLayer = [[CAScrollLayer alloc] init]; 
    scrollLayer.frame = CGRectMake(27, 75, 267, 320); 
    scrollLayer.backgroundColor = [UIColor whiteColor].CGColor; 
    scrollLayer.scrollMode = kCAScrollVertically;  
    [scrollLayer setCornerRadius:8.0f]; 
    [scrollLayer setMasksToBounds:YES]; 
    [scrollLayer setBorderWidth:1.0f]; 
    [scrollLayer setBorderColor:[UIColor grayColor].CGColor]; 
    scrollLayer.contentsRect = CGRectMake(0, 0, 250, 350); 
    scrollLayer.contentsGravity = kCAGravityCenter; 

    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) 
    { 
     scrollLayer.contentsScale = [[UIScreen mainScreen] scale]; 
    } 

    CATextLayer *textLayer = [[CATextLayer alloc] init]; 
    textLayer.alignmentMode = kCAAlignmentJustified; 
    textLayer.string = [_notice objectForKey:@"Text"]; 
    textLayer.wrapped = YES; 
    textLayer.frame = CGRectMake(5, 5, 250, 500); 
    textLayer.font = [UIFont fontWithName:@"Helvetica" size:17.0f]; 
    textLayer.foregroundColor = [UIColor blackColor].CGColor; 
    textLayer.backgroundColor = [UIColor whiteColor].CGColor; 

    [scrollLayer addSublayer:textLayer]; 

    [self.view.layer addSublayer:scrollLayer]; 
    [scrollLayer release]; 
    [textLayer release]; 

답변

0

어떻게 contentsRect를 사용하십시오 CAScrollLayer으로이 경로를 이동하고자하는 사람들을 위해

내 셋업 코드는 다음과 같이 변경? 단위 사각형 좌표입니다. 각 인수는 0과 1 사이에 있습니다.

그래서 당신은 지점 30, 30, 50 × 50의 서브 사각형을 표시하려는 경우 당신은 CONTENT_WIDTH 및 CONTENT_HEIGHT는 내용의 크기

textLayer.contentsRect = CGRectMake(30.0f/CONTENT_WIDTH, 30.0f/CONTENT_HEIGHT, 267.0f/CONTENT_WIDTH, 320.0f/CONTENT_HEIGHT); 

할 것입니다.

+0

수식을 기반으로하는 값으로 놀아 보느라 시간을 보냈습니다. 불행하게도 나는 그럭저럭 얻을 수있는 모든 것이 상쇄되고 왼쪽으로 빗나가고 가장자리가 늘어나는 흐릿한 텍스트입니다. 내가 뭘 넣든 상관없이 나는 아직도 스크롤을하지 못하고있다. 더 이상의 통찰력은 없나? – joverboard

+0

layer.contentGravity = kCAGravityCenter 설정을 시도하고 if ([[UIScreen mainsScreen] respondsToSelector : @selector (scale)] {layer.contentsScale = [[UIScreen mainScreen] scale];} – lorean

+0

특정 값 내에서 해당 수정 사항을 확인하십시오. 흐림과 스트레칭 그러나 단어가 스크롤없이 여전히 측면에서 잘 렸습니다. – joverboard