2017-02-13 3 views
2

Я пытаюсь программно установить фоновый градиент, как это в Xamarin прошивкой:Xamarin - Gradient фон

CGColor[] colors = new CGColor[] { new UIColor(red: 0.05f, green:0.44f, blue:0.73f, alpha:1.0f).CGColor, 
       new UIColor(red: 45/255, green: 128/255, blue: 153/255, alpha: 0.01f).CGColor}; 
      CAGradientLayer gradientLayer = new CAGradientLayer(); 
      gradientLayer.Frame = this.View.Bounds; 
      gradientLayer.Colors = colors; 
      this.View.Layer.AddSublayer(gradientLayer); 

И это работает, но у меня есть элементы формы на экране (метки, кнопки и т.д.) и это приводит к тому, что все они выглядят бледными, как если бы слой отображался непосредственно сверху элементов. Я думаю, что это то, что делает код - это рендеринг всей страницы, а затем добавление слоя с непрозрачностью поверх экрана (вместо этого я хочу его позади).

Вместо этого я хочу, чтобы фон был установлен как градиент, но любые элементы, которые я добавляю, не будут выцветшими и попробуют сопоставить цвета фона.

Я попытался добавить представление сверху стандартного представления и установить альфа-1 на белый, но это, похоже, не помогло (предлагая мою теорию, что программно она добавляет слой поверх всего после он отображается).

Что я делаю неправильно? Спасибо!

ответ

1

Ваш слой градиента, назначенный корню ViewViewController, отображается «позади» всех остальных видов.

По умолчанию, просмотры (UILabel, UIButton и т.д.) не имеют набора цвета фона и, таким образом, будет смеси с этим фоновым слоем, если это не тот эффект, который вы ищете назначить фон для них:

enter image description here

var button = new UIButton(UIButtonType.System); 
button.Frame = new CGRect(40, 300, 120, 40); 
button.SetTitle("No Background", UIControlState.Normal); 
button.TintColor = UIColor.Red; 
View.AddSubview(button); 

var button2 = new UIButton(UIButtonType.System); 
button2.Frame = new CGRect(180, 300, 100, 40); 
button2.SetTitle("Background", UIControlState.Normal); 
button2.TintColor = UIColor.Red; 
button2.BackgroundColor = UIColor.White; 
View.AddSubview(button2); 
+0

Хмм, так что это не похоже на меня; белый в вашем примере выцветает и соответствует цвету фона. Я даже задал фоном представления, чтобы он был красным, но красный смешивается с градиентом. Также для моих ярлыков я просто хочу, чтобы цвет ярлыка был ярко-белым и не исчезал. Мне не нужен цвет фона на моих ярлыках. Есть предположения? TY! – NullHypothesis

+0

@NullHypothesis «Это» в 'this.View.Layer.AddSublayer' в вашем примере контроллера? – SushiHangover

+0

Да, это правильно. – NullHypothesis

2

Я знаю, что я опоздал на шоу, но и для дальнейшего использования, я использую:

this.View.Layer.InsertSublayer(gradientLayer, 0); 

0 представляет собой индекс.