グラデーションを背景としてラベルに追加したいと思います。私はそれを達成するために次のコードを使用しました。ただし、問題は、グラデーションの色がラベルに表示されていても、テキストが表示されないことです。助けてください
lblPatientDetail.text=PatientsDetails;
lblPatientDetail.textColor=[UIColor blackColor];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = lblPatientDetail.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil];
[lblPatientDetail.layer addSublayer:gradient];
lblPatientDetail.backgroundColor=[UIColor clearColor];
サブレイヤーをUILabelに挿入するとテキストが非表示になるため、必要なものを取得するための最良の方法は、ラベルとグラデーションレイヤーをUIViewに追加することです。
UIView *gradientLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = gradientLabelView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor whiteColor] CGColor],(id)[[UIColor colorWithRed:255/255.0 green:239/255.0 blue:215/255.0 alpha:1.0] CGColor],nil];
[gradientLabelView.layer addSublayer:gradient];
lblPatientDetail.frame = gradientLabelView.bounds;
lblPatientDetail.backgroundColor = [UIColor clearColor];
[gradientLabelView addSubview:lblPatientDetail];
[self addSubview:gradientLabelView];
UIView内のUILabelで提案された回答は機能します。どうやらUILabelsは、背景にグラデーションカラーの背景を与えた後、テキストを含めることはできません...理由はわかりません..。
しかし、ここにソリューションの完全なコードがあります....これが誰かに役立つことを願っています:)
UIView *EnvironmentalsLabelView = [[UIView alloc] initWithFrame:CGRectMake(0, 300, 320, 20)];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = EnvironmentalsLabelView.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor darkGrayColor]CGColor], (id)[[UIColor blackColor]CGColor], nil];
[EnvironmentalsLabelView.layer insertSublayer:gradient atIndex:0];
[scroller addSubview:EnvironmentalsLabelView];
UILabel *EnviornmentalsLabelText = [[UILabel alloc] initWithFrame:EnvironmentalsLabelView.bounds];
[EnviornmentalsLabelText setFont:[UIFont fontWithName:@"Arial-BoldMT" size:12.0f]];
EnviornmentalsLabelText.textAlignment = NSTextAlignmentCenter;
EnviornmentalsLabelText.backgroundColor = [UIColor clearColor];
EnviornmentalsLabelText.text = @"Environmental Benefits";
[EnvironmentalsLabelView addSubview:EnviornmentalsLabelText];
ハッピーコーディング!!!!
正解をもう1つ考えます。カスタムビューを配置するために自動レイアウトを使用している場合、この問題が発生する可能性があります http://prntscr.com/5tj7bx
したがって、ビューのサイズは、subView-UILabelおよびsubLayer-グラデーションレイヤーとは異なります。
私はこの問題を1つの方法を追加することで解決します
class wResultView: UIView {
var label = UILabel()
var gradientLayer = CAGradientLayer()
override func layoutSubviews() {
gradientLayer.frame = self.bounds
label.frame = self.bounds
}
......
このように、UILabel
内にUILabel
を追加できます。
class GradientLabel: UILabel {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.clipsToBounds = true
DispatchQueue.main.async {
self.applyGradient(with: Color.gradientColor, gradient: GradientOrientation.topLeftBottomRight)
self.textColor = UIColor.white
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.1) {
let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height))
label.text = self.text
label.font = self.font
label.textColor = self.textColor
label.textAlignment = self.textAlignment
self.text = ""
self.addSubview(label)
}
}
}
extension UIView {
func applyGradient(with colours: [UIColor], locations: [NSNumber]? = nil) {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colours.map { $0.cgColor }
gradient.locations = locations
self.layer.insertSublayer(gradient, at: 0)
}
func applyGradient(with colours: [UIColor], gradient orientation: GradientOrientation) {
let gradient = CAGradientLayer()
gradient.frame = self.bounds
gradient.colors = colours.map { $0.cgColor }
gradient.startPoint = orientation.startPoint
gradient.endPoint = orientation.endPoint
self.layer.insertSublayer(gradient, at: 0)
}
}