2016-07-14 58 views
4

我有一個滾動視圖> ContentView> TextLabel安裝程序,其中漸變顯示,但不工作,我希望如何。這是一個清晰的背景scrollView,所以我正在尋找的是一個清晰的文字漸變蒙版。 I found something類似於我正在尋找Objective-C,但該線程沒有Swift解決方案。當滾動視圖的頂部/機器人漸變時有其他內容

我的最終目標看起來像大多數人可能會用到的,所以我很驚訝這裏還沒有Swift版本。我試圖編碼的功能是:

  1. 有時文本將完全適合scrollView的固定大小,所以應該沒有漸變。
  2. 如果文本長度超過了可以放置的長度,並且它的某些部分低於scrollView的底部截止點,則視圖的底部應該淡出以清除。
  3. 一旦用戶向下滾動,頂部應該消失,表明上面還有更多。

我嘗試這樣的代碼來處理子彈#2:

 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 

但它消失的一切,包括它下面的按鈕,這顯然不是在滾動視圖:

scrollView with gradient

如果我刪除.superview並直接將其應用於scrollView,它只會淡化初始部分下方可見的所有文本:

scrollview gradient not working

有沒有人知道如何正確地實現這一點?

回答

1

想通了。首先,確保你已經添加了正確的視圖層次結構。滾動視圖需要被嵌入在容器視圖(這是什麼梯度將被應用到):

Gradient View Hierarchy

  1. 頂/容器視圖:此設置,但是你想
  2. 滾動型:銷釘(4個總約束)
  3. 滾動型內容視圖所有邊緣到容器:引腳邊緣+中心X(5個總約束)
  4. 標籤:引腳邊緣(4個總約束)

添加 「scrollViewDelegate」 到ViewController類:

class ViewController_WithScrollView: UIViewController, UIScrollViewDelegate { 
    .... 

連接上面IBOutlets列出的四個觀點。然後,設置的viewDidLoad內的滾動視圖代表:

override func viewDidLoad() { 
    super.viewDidLoad() 

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

然後實現scrollViewDidScroll FUNC,它會自動運行感謝您在上面所做的工作。

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

然後加入這個神奇的梯度代碼:

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 
} 

應該這樣做!

+0

曾經爲我添加了一個擴展到UIScrollView使用isAtTop屬性。 http://stackoverflow.com/a/14745900/4228969 – toddg

相關問題