禁用按钮时更改或删除我的CAGradientLayer

时间:2014-07-15 23:29:13

标签: ios objective-c uibutton cagradientlayer

我正在使用CAGradientLayer作为我的按钮的背景。

cell.showOnMap.clipsToBounds = YES;
cell.showOnMap.layer.cornerRadius = 10.0f;
UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.showOnMap.frame.size.width, cell.showOnMap.frame.size.height)];
CAGradientLayer *gradient2 = [CAGradientLayer layer];
gradient2.frame = view2.bounds;
gradient2.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithRed:0.00 green:0.66 blue:0.71 alpha:1.0]  CGColor], (id)[[UIColor colorWithRed:0.18 green:0.27 blue:0.75 alpha:1.0] CGColor], nil];
[cell.showOnMap.layer insertSublayer:gradient2 atIndex:0];
[cell.showOnMap bringSubviewToFront:cell.showOnMap.imageView];

在某些情况下,我的按钮showOnMap将被禁用。在这种情况下,我希望CAGradient图层从lightGrayColor更改为grayColor或完全删除图层。这是启用/禁用代码。

if(entry.address == nil)
{   [cell.showOnMap setEnabled:NO];
    cell.showOnMap.layer.sublayers = nil;
}
else
    [cell.showOnMap setEnabled:YES];

到目前为止,我已经尝试将整个渐变代码放在else部分中,然后将相同的代码放在if(entry.address == nil)中,但使用灰色作为渐变。这没用;按钮始终是初始的蓝色渐变。

我也试过了cell.showOnMap.layer.sublayers = nil;,但这删除了我的文字和按钮图像,只留下带圆边的背景。

[[cell.showOnMap.layer.sublayers objectAtIndex:0] removeFromSuperlayer];未发生任何更改,[[cell.showOnMap.layer.sublayers objectAtIndex:0] removeFromSuperview];导致崩溃

如何在我的按钮被禁用时引用我的CAgradient图层并将其删除?

1 个答案:

答案 0 :(得分:2)

在单元格内创建gradientLayer属性。然后将gradientLayer初始化为此属性。然后您可以在以后安全地引用它来修改它或removeFromSuperlayer