如何在scrollview中添加渐变?

时间:2011-04-20 16:54:55

标签: iphone ios uitableview uiscrollview gradient

我正在尝试将一堆渐变添加到不同的UIScrollView和UITableView。我遇到的最常见的如何实现这一点的例子来自Matt Galagher的博客,他在这里发布了一个如何使用渐变的例子:

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

我的问题是,通过在layoutSubviews方法中插入渐变与在viewDidLoad方法中设置渐变,您获得了哪些优势/好处?我意识到,通过goin 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

1 个答案:

答案 0 :(得分:0)

我不会在layoutSubviews中创建渐变。布局子视图可能比这种绘图更适合调用。通过在layoutSubviews中执行CPU密集型操作(如创建渐变),可能会对性能产生负面影响。

相反,我要做的是将渐变放在子视图上,然后将子视图添加到滚动视图中(viewDidLoad,init或awakeFromNib对此有好处)并让它自动处理它的绘图。然后,在layoutSubviews中,调整子视图的布局,让它处理需要重新绘制视图的哪些部分以进行更新。