2011-04-20 3 views
1

다른 UIScrollView 및 UITableView에 여러 그라디언트를 추가하려고합니다. 내가 건너 한이를 달성하는 방법의 가장 일반적인 예는 그가 여기 그라디언트를 사용하는 방법의 예를 게시 매트 Galagher의 멋진 블로그에서입니다 :스크롤 뷰에 그라디언트를 추가하는 방법은 무엇입니까?

http://cocoawithlove.com/2009/08/adding-shadow-effects-to-uitableview.html

내 질문하지만 장점/혜택이하는 일입니다 layoutSubviews 메서드에 그라데이션을 삽입하고 viewDidLoad 메서드에 그라데이션을 설정하여 얻을 수 있습니까? viewDidLoad 라우트로 방향을 변경하면 뷰를 수동으로 업데이트해야하지만 뷰가로드 될 때만이 메서드를 호출하고 방향이 변경 될 때 다시 호출하는 것은 성능 관점에서 보일 것이라고 생각합니다. 반대로 layoutSubviews 메서드는 매번 스크롤 뷰/테이블 뷰의 경우 많은 뷰 변경 사항을 호출합니다!

// 
// Construct the origin shadow if needed 
// 
if (!originShadow) 
{ 
    originShadow = [self shadowAsInverse:NO]; 
    [self.layer insertSublayer:originShadow atIndex:0]; 
} 
else if (![[self.layer.sublayers objectAtIndex:0] isEqual:originShadow]) 
{ 
    [self.layer insertSublayer:originShadow atIndex:0]; 
} 

[CATransaction begin]; 
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

// 
// Stretch and place the origin shadow 
// 
CGRect originShadowFrame = originShadow.frame; 
originShadowFrame.size.width = self.frame.size.width; 
originShadowFrame.origin.y = self.contentOffset.y; 
originShadow.frame = originShadowFrame; 

[CATransaction commit]; 

그는 또한 메서드가 호출 될 때마다 프레임의 크기를 조정하는 것처럼 보입니까? viewDidLoad 메서드에서 그래디언트의 크기를 초기화하고 크기를 조정 한 다음 오리엔테이션이 변경되면 크기를 조정하는 것이 좋을까요?

메신저가 여기에 무엇인가 놓치면 확실하게 해줄 수 있습니다.

Thx

답변

0

layoutSubviews에 그라데이션을 만들지 않습니다. 레이아웃 하위 뷰는 이러한 종류의 드로잉에 최적보다 자주 호출 될 수 있습니다. 그래디언트 만들기와 같이 layoutSubviews에서 CPU 집중적 인 작업을 수행하면 성능에 나쁜 영향을 미칠 수 있습니다.

대신에 그라디언트를 하위 뷰에 놓은 다음 scrollview (viewDidLoad, init 또는 awakeFromNib가 좋음)에 하위 뷰를 추가하고 자동으로 그리기 처리하도록합니다. 그런 다음 layoutSubviews에서 하위보기의 레이아웃을 조정하고 항목을 업데이트하기 위해보기의 어느 부분을 다시 그려야하는지 파악할 수있게하십시오.

+0

안녕하세요, 응답은 thx입니다. 나는 이미 scrollview가 위에 놓여 있다는 backing view를 가지고 있기 때문에 viewDidLoad 메서드의 하단보기에 그라디언트를 추가했다. 왜 내가 그라디언트의 크기를 조정해야 viewSubviews에서 제안 된대로 그냥 수동으로 그라디언트의 크기를 조정하려면 메서드를 호출 할 때 내 viewcontroller에서 방향 변경을 받으면 변경해야합니까? – HenryH

+0

원하는 경우 방향 변경시 크기를 조정할 수 있습니다. layoutSubviews는 글쎄, 레이아웃을 위해 설계된 것인데, 당신이하고있는 일이긴하지만, 오리엔테이션 변경 방법에서 그렇게하는 것도 좋습니다. 내가 건너려고했던 더 큰 관심사는 layoutSubviews에서 다시 작성하면 안된다는 것입니다. –

관련 문제