2016-05-24 17 views
3

Hallo Masters of iOS und Swift ist,CAGradientLayer verursacht Subviews nicht sichtbar

nach zwei frustrierenden Tagen, entschied ich mich verzweifelt hier zu fragen. Das Problem:

Beim Hinzufügen einer CAGradiantLayer werden die Untersichten nicht angezeigt.

Details:

  • ich eine Methode gemacht haben CAGradientLayer in einer Verlängerung von UIView
  • ich rufen Sie einfach die Methode auf einer beliebigen Ansicht und dies selbst funktioniert perfekt
  • Aber wenn ich hinzufügen versuchen, diese Methode für eine UIView in einer Viewhierarchie (als Hintergrund) zu verwenden, leider sind alle Subviews nicht mehr sichtbar, der Gradient scheint alle Subviews zu überlagern
  • wenn ich t nicht anrufe er "addGradient" -Methode in der Containeransicht, alle Unteransichten werden korrekt angezeigt
  • erstaunliches Detail: Obwohl die Untersichten nicht sichtbar sind, sind sie irgendwie vorhanden und "aktiv" (z. ein „unsichtbares“ UIButton Feuer ")
  • I Automatische Anordnung

bin mit Jede mögliche Idee geschätzt! Vielen Dank im Voraus.

+0

Ich habe meine Antwort aktualisiert und versucht, mit dem Code ein ImageView als SubView hinzugefügt arbeitete gut für mich. Schau mal, ob es auch für dich funktionierte –

Antwort

8

LukeSideWalker,

Nicht sicher, aber Sie können immer versuchen, Ihre Schicht unter allen anderen Schicht hinzuzufügen, so wird es nicht vorhandenen Subviews zu decken. Versuchen Sie dies in Ihrer Erweiterung, wo Sie Schicht hinzufügen

self.layer.insertSublayer(layer, atIndex: 0) 

Versuchte zu sehen Hinzufügen Image als Subview fein gearbeitet :) Sollte auch Ihr Problem lösen.

+0

Danke Sandeep, aber weder "oben" noch "unten" lösten mein Problem. Ich benutze die Methode: self.layer.addSublayer (gradientLayer), die sowieso "unten" laden soll, oder? – LukeSideWalker

+0

@lukesidewalker: Überraschenderweise erwähnte meine erste Antwort das gleiche und bat darum, unten zu verwenden :) Aber als ich versuchte, den Code selbst auszuführen, funktionierte es. Aber die Angabe des Index als 0 hat den Trick gemacht :) –

+0

Was meinst du mit "Aber die Angabe des Index als 0 hat den Trick gemacht :)" ?? – LukeSideWalker

0

ich ein ähnliches Problem aufgetreten bevor und das Problem gelöst, indem ein Hintergrund Hinzufügen . Blick auf meine Ansicht So ist der Ansicht Hierarchie wäre wie:

view 
    backgroundView 
    someView 
    someViewInsideView 
    someOtherView 

Top Ansichten alpha scheint zu subview Alpha beeinflussen So verwende ich eine Ansicht mit einem klaren Hintergrundfarbe und verwenden backgroundView Ansicht des geben. Hintergrundfarbe und andere Eigenschaft mit Alpha-Modifikatoren.

+0

Danke Murat, ich werde das versuchen, aber im Moment kann ich mir nicht vorstellen, wie es funktionieren soll, denn das Problem scheint das gleiche zu sein, obwohl eine andere Sicht auf die Ansicht gebracht wird Hierarchie ... – LukeSideWalker

+0

Wie ich das Problem verstanden habe, wenn Sie die Root-Ansicht ändern, werden alle Ihre Subviews durch die gleichen Alpha-Modifikatoren beeinflusst. Ihre Unteransichten werden also nicht korrekt angezeigt. Was ich vorschlage, ist, dass Sie nur die backgroundView ändern sollten (in diesem Fall fügen Sie die Farbverlaufsschicht hinzu) und lassen Sie die Root-Ansicht unberührt. Andere Ansichten teilen keine Modifikatoren mit backgroundView, so dass sie nicht beeinflusst werden. –

+0

Nochmals vielen Dank, vor allem für Ihre letzte Erklärung. Wie Sie sehen, hat Sandeep mir bereits eine perfekte Lösung gegeben. – LukeSideWalker