ios - CAGradientLayer 在最简单的用例中崩溃并显示 "exc_bad_access"

标签 ios calayer cagradientlayer

一个普通的 UIView 子类,仅包含以下代码:

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if (self) {
        // Initialization code

        CAGradientLayer* gradientLayer = [CAGradientLayer layer];
        gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];
        gradientLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil];

        [self.layer addSublayer:gradientLayer];

    return self;
}

使用 EXC_BAD_ACCESS 终止运行时(不,在你问之前,没有僵尸)。

此外,这并不是 CAGradientLayer 被过度释放 - 在图层上放置多个 float 保留没有效果。

(顺便说一句,在我参与过的任何项目中,我从未见过 CAGradientLayer 真正起作用。我认为它被诅咒了:)。我不会使用它,除非我需要动画渐变,并且 Apple 的 CGGradient 类仅支持 const 数组,这使得动画代码非常容易出现错误)

最佳答案

问题可能出在这里:

gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil];

这些颜色需要与 Core Graphic 等效,这样才可能起作用。

gradientLayer.colors = [NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil]; 

关于ios - CAGradientLayer 在最简单的用例中崩溃并显示 "exc_bad_access",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10341209/

相关文章:

ios - CAGradientLayer 超出 UILabel 的框架

iphone - CAGradientLayer,不能很好地调整大小,旋转时撕裂

IOS UIActivityViewController,无法排除自定义activityType

ios - Swift 推特搜索 API 无法验证您的响应,错误

ios - Venmo 支付 iOS 集成问题

ios - 隐藏 iOS 导航栏中的所有内容,包括图标

ios - 如何创建可以在播放时取消和/或还原的延迟 CAAnimation?

objective-c - CALayer不显示

ios - 在移动的 UIView 中通过区域传递触摸事件

ios - 实际上 "calculate"是沿着 CAGradientLayer 的一点的颜色?