uibutton增加渐变色的时候一定要注意不能直接addsublayer,这样会导致新增加的layer在最上面,会遮挡title和image
应该使用insertSublayer将渐变色的layer增加在最下层
'''
[_adoptAnswerTagBtn.layer insertSublayer:self.gradientLayer atIndex:0];
'''
这时title就会显示出来,但,image还是会被隐藏,我猜测应该是image的层级比较靠后一些吧,具体是不是没有验证,
我强行将imageview的优先级提到最前面,使用bringSubviewToFront。
具体代码如下:
'''
- (UIButton *)adoptAnswerTagBtn
{
if(!_adoptAnswerTagBtn) {
_adoptAnswerTagBtn = [UIButton buttonWithType:UIButtonTypeCustom];
_adoptAnswerTagBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[_adoptAnswerTagBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[_adoptAnswerTagBtn addTarget:self action:@selector(adoptAnswerBtnClick) forControlEvents:UIControlEventTouchUpInside];
_adoptAnswerTagBtn.layer.cornerRadius = 11.5;
_adoptAnswerTagBtn.layer.masksToBounds = YES;
_adoptAnswerTagBtn.size = CGSizeMake(64, 23);
self.gradientLayer.frame = _adoptAnswerTagBtn.bounds;
[_adoptAnswerTagBtn.layer insertSublayer:self.gradientLayer atIndex:0];
[_adoptAnswerTagBtn setImage:[UIImage imageNamed:@"ef_fundbar_answeradopt_white"] forState:UIControlStateNormal];
[_adoptAnswerTagBtn setTitle:@"采纳" forState:UIControlStateNormal];
[_adoptAnswerTagBtn bringSubviewToFront:_adoptAnswerTagBtn.imageView];
_adoptAnswerTagBtn.hidden = YES;
}
return _adoptAnswerTagBtn;
} - (CAGradientLayer *)gradientLayer {
if (!_gradientLayer) {
_gradientLayer = [CAGradientLayer layer];
_gradientLayer.colors = @[(id)[RGB_HEX(0xE8CC94) CGColor],
(id)[RGB_HEX(0xD6AC6C) CGColor]
];
_gradientLayer.startPoint = CGPointMake(0, 0);
_gradientLayer.endPoint = CGPointMake(1.0, 1.0);
}
return _gradientLayer;
}
'''