简体   繁体   English

CAGradientLayer提供EXC_BAD_ACCESS吗?

[英]CAGradientLayer giving EXC_BAD_ACCESS?

I'm trying to make the ends of my UIScrollView fade out - just like one would a UITableView. 我试图使我的UIScrollView的末端淡出-就像一个UITableView一样。 I found the below code. 我找到了下面的代码。 I'm using it in a UIScrollView subclass in a method called inside initWithFrame:... . 我在initWithFrame:...内部调用方法的UIScrollView子类中使用它。

if (!maskLayer)
{
    maskLayer = [CAGradientLayer layer];

    CGColorRef outerColor = [UIColor colorWithWhite:0 alpha:1.0].CGColor;
    CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:0.0].CGColor;

    maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)outerColor,
                        (__bridge id)innerColor, (__bridge id)innerColor, (__bridge id)outerColor, nil];
    maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                           [NSNumber numberWithFloat:0.2],
                           [NSNumber numberWithFloat:0.8],
                           [NSNumber numberWithFloat:1.0], nil];

    maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    maskLayer.anchorPoint = CGPointZero;
    CGColorRelease(outerColor);
    CGColorRelease(innerColor);
    self.layer.mask = maskLayer;
}

NOTE: I've already seen this question , but I already have __bridge before my colors. 注意:我已经看到了这个问题 ,但是我的颜色之前已经有__bridge

I'm sure it's something really basic, but I just can't figure it out. 我敢肯定这是非常基本的东西,但我只是想不通。 I added the CGColorRelease lines in hope that would fix it, but it didn't... 我添加了CGColorRelease行,希望可以解决该问题,但是并没有...

Does anyone see anything I don't? 有人看到我没看到的东西吗?

Assuming you are setting up the scrollview in a XIB, drop the if statement and place the code into an awakeFromNib in your subclass. 假设您正在XIB中设置滚动视图,则删除if语句并将代码放入子类中的awakeFromNib中。 If manually creating the scroll view object, call that code after performing the inithWithFrame. 如果手动创建滚动视图对象,请在执行inithWithFrame之后调用该代码。

Also, flip the alpha values of the outerColor and innerColor variables. 同样,翻转outerColor和innerColor变量的alpha值。 Here is the code. 这是代码。

- (void) setGradient
{
    CAGradientLayer * maskLayer = [CAGradientLayer layer];

    // Flipped your alpha values around.
    CGColorRef outerColor = [UIColor colorWithWhite:0 alpha:0.0].CGColor;
    CGColorRef innerColor = [UIColor colorWithWhite:1.0 alpha:1.0].CGColor;

    maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)outerColor,
                        (__bridge id)innerColor, (__bridge id)innerColor, (__bridge id)outerColor, nil];
    maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                           [NSNumber numberWithFloat:0.2],
                           [NSNumber numberWithFloat:0.8],
                           [NSNumber numberWithFloat:1.0], nil];

    maskLayer.bounds = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    maskLayer.anchorPoint = CGPointZero;
    CGColorRelease(outerColor);
    CGColorRelease(innerColor);
    self.layer.mask = maskLayer;

}
- (void)awakeFromNib
{
    [self setGradient];
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM