iphone - 如何向 ScrollView 添加渐变?

标签 iphone ios uitableview uiscrollview gradient

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

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

但我的问题是,通过在 layoutSubviews 方法中插入渐变与在 viewDidLoad 方法中设置渐变相比,您可以获得哪些优势/好处?我意识到,通过进入 viewDidLoad 路线,您必须在方向更改时手动更新 View ,但从性能的角度来看,此方法似乎只会在 View 加载时调用一次,然后在方向更改时再次调用。相比之下,每次 View 更改时都会调用 layoutSubviews 方法,这在 ScrollView /表格 View 的情况下很多!

//
// 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 方法中初始化渐变并调整其大小,然后在/如果方向发生变化时进行任何调整,这不是更好吗?

很确定我在这里遗漏了一些东西,所以任何澄清将不胜感激。

谢谢

最佳答案

我不会在 layoutSubviews 中创建渐变。布局 subview 的调用频率可能高于此类绘图的最佳调用频率。通过在布局 subview 中执行一些 CPU 密集型操作,例如创建渐变,您可能会对性能产生不利影响。

相反,我要做的是将渐变放在 subview 上,然后将 subview 添加到 ScrollView 中(viewDidLoad、init 或 awakeFromNib 对此很有用)并让它自动处理绘图。然后,在 layoutSubviews 中,调整 subview 的布局,并让它处理确定 View 的哪些部分需要重绘以更新内容。

关于iphone - 如何向 ScrollView 添加渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5733890/

相关文章:

ios - 以流畅的动画展开 UITableViewCell

ios - 尽管设置了委托(delegate),但永远不会调用 heightForRowAtIndexPath

iphone - 如何通知 UITableViewController 数据已准备好显示?

php - iphone SDK : Upload image from iphone to a php Server send empty file ?(里面有示例代码链接)

ios - 以编程方式从 UIView 执行 Segue

ios - Swift - 如何在安装之前在应用程序中保存 json 文件

ios - 与其他应用程序共享应用程序商店 URL

ios - SkobblerFrameWork 未获取确切位置

iphone - 检测私有(private) API 的使用

ios - 如何在函数之外获取加速度计数据?