鑑於iOS上的任意UIView,有沒有一種使用核心圖形(CAGradientLayer想到)的方式來應用「前景透明」的漸變?UIView透明漸變
我不能使用標準CAGradientLayer,因爲背景比UIColor更復雜。我也不能覆蓋PNG,因爲隨着我的子視圖沿着它的父垂直滾動視圖滾動(參見圖片),背景將會改變。
我有一個非優雅的回退:當父滾動視圖滾動時,讓我的uiview剪輯其子視圖並移動背景的預渲染的漸變png。
鑑於iOS上的任意UIView,有沒有一種使用核心圖形(CAGradientLayer想到)的方式來應用「前景透明」的漸變?UIView透明漸變
我不能使用標準CAGradientLayer,因爲背景比UIColor更復雜。我也不能覆蓋PNG,因爲隨着我的子視圖沿着它的父垂直滾動視圖滾動(參見圖片),背景將會改變。
我有一個非優雅的回退:當父滾動視圖滾動時,讓我的uiview剪輯其子視圖並移動背景的預渲染的漸變png。
這是一個令人尷尬的簡單解決方法:應用一個CAGradientLayer作爲我的子視圖的掩碼。
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = _fileTypeScrollView.bounds;
gradientLayer.colors = [NSArray arrayWithObjects:(id)[UIColor whiteColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
gradientLayer.startPoint = CGPointMake(0.8f, 1.0f);
gradientLayer.endPoint = CGPointMake(1.0f, 1.0f);
_fileTypeScrollView.layer.mask = gradientLayer;
感謝Cocoanetics指着我在正確的方向!
我使用此代碼將梯度添加到非常類似的水平UIScrollView。它看起來很好,但是當你實際上滾動時,從右側進入的視圖是透明的。就好像漸變應用於坐在滾動視圖上的實際視圖,而不是作爲它們上方的圖層。我究竟做錯了什麼? –
這是正確的答案! – Yariv
如何創建一個垂直梯度起訴這段代碼? –
我討厭這樣說,但我認爲你是到自定義UIView的土地。我認爲我會嘗試在繪製drawRect例程的自定義UIView中實現它。通過這種方式,你可以擁有該視圖,放置在實際的滾動視圖之上,並且對所有的觸摸事件(即放棄第一響應者)進行梯度視圖(如果你願意的話)「傳遞」。
我只是碰到了同樣的問題,結束了寫我自己的類。這似乎是嚴重的矯枉過正,但這是我能找到的做透明度漸變的唯一途徑。你可以看到我的writeup and code example here
它基本上歸結爲一個自定義UIView創建兩個圖像。一個是純色,另一個是用作圖像蒙版的漸變。從那裏我將結果圖像應用到uiview.layer.content。
我希望它能幫助, 喬
這就是我要做的。
步驟1定義自定義梯度視圖(SWIFT 4):
import UIKit
class GradientView: UIView {
override open class var layerClass: AnyClass {
return CAGradientLayer.classForCoder()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
let gradientLayer = self.layer as! CAGradientLayer
gradientLayer.colors = [
UIColor.white.cgColor,
UIColor.init(white: 1, alpha: 0).cgColor
]
backgroundColor = UIColor.clear
}
}
步驟2 - 拖動並在故事板掉落UIView
並設置其自定義類來GradientView
作爲一個例子,這是上述梯度視圖的樣子:
的背景是什麼?滾動視圖滾動時它如何「改變」? –