2016-07-14 22 views
4

Ich habe eine scrollview> ContentView> TextLabel-Setup, wo der Verlauf angezeigt wird, aber nicht funktioniert, wie ich es will. Es ist ein klarer Hintergrund scrollView, also suche ich nur nach einer klaren Verlaufsmaske über dem Text. I found something ähnlich wie ich in Objective-C suche, aber dieser Thread hat keine Swift-Lösung.Farbverlauf am Anfang/Bot von Scrollview Wenn es zusätzlichen Inhalt gibt

Mein Endziel scheint etwas zu sein, das die meisten Leute benutzen könnten, also bin ich überrascht, dass es noch keine Swift-Version gibt. Die Funktionalität, die ich versuche zu kodieren ist:

  1. Manchmal passt der Text perfekt in die feste Größe der scrollView, so dass es keinen Farbverlauf geben sollte.
  2. Wenn der Text länger ist als passen kann und sich ein Teil davon unterhalb der unteren Grenze des scrollView befindet, sollte der untere Teil der Ansicht zum Löschen verschwinden.
  3. Sobald der Benutzer scrollt nach unten und die Spitze sollte verblassen, was darauf hinweist, dass es oben mehr gibt.

habe ich versucht, diesen Code Kugel # 2 zu handhaben:

 let gradient = CAGradientLayer() 
     gradient.frame = self.bio_ScrollView.superview!.bounds ?? CGRectNull 
     gradient.colors = [UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor] 
     //gradient.locations = [0, 0.15, 0.25, 0.75, 0.85, 1.0] 
     gradient.locations = [0.6, 1.0] 
     self.bio_ScrollView.superview!.layer.mask = gradient 

Aber es blendet alles, einschließlich der Taste darunter, die in der Scroll eindeutig nicht ist:

scrollView with gradient

Wenn ich die .superview entferne und sie direkt auf die scrollView anwende, blendet sie nur den gesamten Text unterhalb des sichtbaren Teils aus:

scrollview gradient not working

Weiß jemand etwas darüber, wie man das richtig umsetzt?

Antwort

1

Ich habe es herausgefunden. Stellen Sie zunächst sicher, dass Sie die richtige Ansichtshierarchie hinzugefügt haben. Die Scroll-Ansicht muss in einem Behälter Ansicht eingebettet werden (was ist das, was der Gradient angewendet werden): Gradient View Hierarchy

  1. Top/Container Ansicht

    : Stellen Sie diese nach oben aber Sie

  2. Scroll wollen: Pin alle Kanten in den Behälter (4 insgesamt constraints)
  3. Scrollseiten: Pin + Kanten Zentrum X (5 insgesamt constraints)
  4. Label: Pin Kanten (4 Gesamt constraints)
012.

hinzufügen "scrollViewDelegate" die Viewcontroller Klasse:

class ViewController_WithScrollView: UIViewController, UIScrollViewDelegate { 
    .... 

die vier Ansichten oben mit IBOutlets aufgeführten Verbindung. Dann stellen Sie Ihre Scroll Delegierten im viewDidLoad:

override func viewDidLoad() { 
    super.viewDidLoad() 

    yourScrollView.delegate = self 
    //+All your other viewDidLoad stuff 
} 

Dann implementieren die scrollViewDidScroll func, die automatisch durch die Arbeit ausgeführt werden Sie oben getan haben.

func scrollViewDidScroll (scrollView: UIScrollView) { 
    if scrollView.isAtTop { 
     self.applyGradient_To("Bot") 
    } else if scrollView.isAtBottom { 
     self.applyGradient_To("Top") 
    } else { 
     self.applyGradient_To("Both") 
    } 
} 

Dann diesen magischen Gradienten Code hinzu:

func applyGradient_To (state: String) { 
    let gradient = CAGradientLayer() 
    gradient.frame = self.yourScrollView.superview!.bounds ?? CGRectNull 

    switch state { 
    case "Top": 
     gradient.colors = [UIColor.clearColor().CGColor,UIColor.whiteColor().CGColor] 
     gradient.locations = [0.0,0.2] 
    case "Bot": 
     gradient.colors = [UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor] 
     gradient.locations = [0.8,1.0] 
    default: 
     gradient.colors = [UIColor.clearColor().CGColor,UIColor.whiteColor().CGColor,UIColor.whiteColor().CGColor, UIColor.clearColor().CGColor] 
     gradient.locations = [0.0,0.2,0.8,1.0] 
    } 
    self.yourScrollView.superview!.layer.mask = nil 
    self.yourScrollView.superview!.layer.mask = gradient 
} 

Das sollte es tun!

+0

Arbeitete für mich, nachdem ich eine Erweiterung zu UIScrollView hinzugefügt, um die IsAtTop-Eigenschaft zu verwenden. http://stackoverflow.com/a/14745900/4228969 – toddg