为啥在使用 CAGradientLayer 时应用会崩溃
Posted
技术标签:
【中文标题】为啥在使用 CAGradientLayer 时应用会崩溃【英文标题】:Why does the app crash when using CAGradientLayer为什么在使用 CAGradientLayer 时应用会崩溃 【发布时间】:2012-03-29 21:32:07 【问题描述】:我已开始使用 CAGradientLayer,但我的应用崩溃了
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = headerView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[UIColor redColor],(id)[UIColor greenColor], nil];
[headerView.layer addSublayer:gradient];
EXEC_BAD_ACCESS
我的实现是否有错误?
【问题讨论】:
【参考方案1】:这是一个小错误 - 您需要使用 CGColorRef
指针数组:
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor redColor] CGColor], (id)[[UIColor greenColor] CGColor], nil];
【讨论】:
非常感谢,编译时没有验证有什么原因吗? 这是个好问题——Objective-C 使用动态运行时,所以在创建数组时,编译器并不真正关心数组中的什么。当我们使用动态运行时,我们会丢失这些类型的编译时完整性检查,但这是值得的 :)【参考方案2】:CAGradientLayer 使用 CGColorRef 值。使用 UIColor 的 CGColor 属性。示例:
[UIColor redColor].CGColor
【讨论】:
以上是关于为啥在使用 CAGradientLayer 时应用会崩溃的主要内容,如果未能解决你的问题,请参考以下文章
为啥我不能在 ARC 中使用自定义颜色创建 CAGradientLayer?
为啥在模态视图控制器被解除后 CAGradientLayer 从视图中删除