2012-10-11 68 views
4

我有一個UITextView,帶有可滾動文本。 我試圖對其應用漸變圖層,因此可見文本的底部總是稍微淡出。將CAGradient遮罩層應用到UITextView

這裏是我的代碼:

CAGradientLayer *maskLayer = [CAGradientLayer layer]; 

maskLayer.colors = [NSArray arrayWithObjects:(id)[[UIColor clearColor] CGColor], (id)[[UIColor yellowColor] CGColor], nil]; 
maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], 
         [NSNumber numberWithFloat:0.2], 
         [NSNumber numberWithFloat:0.8], 
         [NSNumber numberWithFloat:1.0], nil]; 
maskLayer.bounds = clueTextView.bounds; 
myUITextView.layer.mask = maskLayer; 

眼下,這是導致UITextViewLayer是完全TRANSPARANT - 我看到了UIView的背景色的UITextViewLayer是作爲子視圖。雖然我可以選擇並複製文本以粘貼到筆記程序,但我看不到任何內容。

任何想法我失蹤?

回答

12

你有幾個問題。

梯度圖層的colors屬性需要具有與其locations屬性相同的計數。您提供4個位置,但只有2種顏色。

您正在設置基於clueTextView的漸變圖層邊界,但是您將其設置爲myUITextView的蒙版。您正在設置梯度圖層的bounds,但不是其position。默認position是0,0,這意味着漸變圖層的中心位於myUITextView的左上角。將漸變圖層的frame設置爲文本視圖的bounds更簡單。

如果你解決了所有這些問題,你可能會得到你正在尋找的效果。

- (void)initTextViewMask { 
    CAGradientLayer *maskLayer = [CAGradientLayer layer]; 
    maskLayer.colors = @[ 
     (id)[UIColor whiteColor].CGColor, 
     (id)[UIColor whiteColor].CGColor, 
     (id)[UIColor clearColor].CGColor]; 
    maskLayer.locations = @[ @0.0f, @0.8f, @1.0f ]; 
    maskLayer.frame = textView_.bounds; 
    textView_.layer.mask = maskLayer; 
} 

但是,您可能會發現新問題。

如果用戶可以滾動文本視圖,則會發現梯度隨文本視圖移動,這可能不是您想要的。解決這個問題的最簡單方法是將文本視圖嵌入容器UIView中,並在容器視圖上設置掩碼。

如果文本視圖可以更改大小(可能由於設備旋轉),則蒙版不會自動更改大小。您需要更新面膜的frame,在layoutSubviewsviewDidLayoutSubviews

+0

在我的情況下,我不得不在'UIView'內嵌入'UITextView',因爲當'UITextView'禁用滾動時,掩碼層不起作用。 – PiotrCh