2013-05-29 1 views
1

성능상의 이유로 (내 서브 클래스 UITableViewCell 내에서) UILabel 하위 뷰를 추가하는 대신 drawRect으로 직접 텍스트를 그리는 실험을하고 있습니다. drawRect를 사용하여 모방 UILabel의 방향 변경 동작

그리고 텍스트의 순서로

가 방향 변경에 따라 다시 그려야하는, 내가 설정 한 뷰의 contentMode UIViewContentModeRedraw에 :

- (id)initWithFrame(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self setContentMode:UIViewContentModeRedraw]; 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    [@"foo" drawInRect:CGRectInset(rect, 10, 10) 
       withFont:[UIFont systemFontOfSize:14] 
     lineBreakMode:NSLineBreakByWordWrapping]; 
} 

스크롤이 훨씬 더 빨리, 그리고 모든 것이 완벽 – 거의 작동합니다.

문제는 :보기가 인터페이스 방향 회전 애니메이션을 애니메이션하는 동안 텍스트가 뒤틀림/늘어남 인 것으로 나타납니다. 오리엔테이션 전후에 멋지게 보입니다 만, 동안은 애니메이션입니다.

뷰가 늘어나는 것을 방지 할 수있는 방법이 있습니까? 기본적으로 인터페이스를 회전시킬 때 UILabels가 작동하는 방식을 모방합니까?

답변

2

시도 UIViewContentModeTopLeft. 그게 내 애플 리케이션의 동일한 상황에서 해결 방법입니다. 이렇게하면 배율이 조정되지 않습니다. (https://stackoverflow.com/a/3456973/1445366 참조).

+0

흥미 롭습니다! (이 접근법을 작동 시키려면'willAnimateRotationToInterfaceOrientation' 안에'setNeedsDisplay'를 호출해야합니다.) 아주 가까이에 있습니다 : 텍스트 자체가 더 이상 늘어나지 않고 UILabel과 비슷하게 움직입니다. 그러나 이제 * 전체보기 *가이 방식으로 움직입니다. 그것은 눈에 띄는 것이 아니지만 *보기의 * 프레임이 더 이상 부드럽게 움직이지 않습니다. – Emmett

+0

네,이 문제를 해결하기 위해'drawRect'를 사용하는 단점 중 하나입니다. 각 개별 항목에 별도의 contentMode를 부여 할 수는 없습니다. –

관련 문제