2011-04-20 81 views
1

我想添加一堆漸變到不同的UIScrollView和UITableView的。我所遇到的如何實現這一目標的最常見的例子是馬特Galagher的真棒博客裏,他貼出瞭如何在這裏使用梯度的例子:如何向scrollview添加漸變?

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

我的問題,雖然是什麼優勢/好處做你通過在layoutSubviews方法中插入漸變與在viewDidLoad方法中設置漸變來獲得好處?我意識到,通過佈置viewDidLoad路線,當方向改變時,您將不得不手動更新視圖,但從性能的角度來看,這種方法只會在視圖加載時調用一次,然後在方向改變時再次調用。相比之下,layoutSubviews方法每次在scrollview/tableview的情況下視圖改變時都會被調用!

// 
// 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密集型操作,例如創建漸變,可能會對性能產生負面影響。

相反,我會做的是將你的漸變放在子視圖上,然後將你的子視圖添加到你的滾動視圖中(viewDidLoad,init或awakeFromNib對此很有用),並讓它自動處理它。然後,在layoutSubviews中,調整子視圖的佈局,並讓它處理確定需要重繪視圖的哪些部分以更新內容。

+0

嗨,thx的迴應。我已經有一個支持視圖,我的scrollview放在頂部,所以我已經添加了漸變到viewDidLoad方法的底部視圖。任何理由爲什麼我應該調整layoutSubviews中的視圖改變時建議調整漸變大小vs只是手動調用一個方法來調整漸變的大小,一旦我收到我的viewcontroller方向變化? – HenryH 2011-04-21 20:38:07

+0

完全沒有,如果您願意,可以根據方向更改來調整它的大小。 layoutSubviews是專爲佈局設計的,這是你在做什麼,但是在orientation orientation方法中也可以。我試圖解決的更大問題是,您不應該在layoutSubviews中重新創建它。 – 2011-04-22 17:18:30