UIView透明渐变

jps*_*sim 35 iphone core-graphics ios cagradientlayer

鉴于iOS上的任意UIView,是否有一种方法可以使用Core Graphics(CAGradientLayer)来应用"前景透明"渐变?

我不能使用标准的CAGradientLayer,因为背景比UIColor更复杂.我也无法覆盖PNG,因为背景会随着我的子视图沿其父垂直滚动视图滚动而改变(见图).

我有一个非优雅的后备:让我的uiview剪辑其子视图,并在滚动父滚动视图时移动背景的预渲染渐变png.

透明的uiview渐变问题

jps*_*sim 97

这是一个令人尴尬的简单修复:应用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;
Run Code Online (Sandbox Code Playgroud)

感谢Cocoanetics指出我正确的方向!

  • 我使用此代码将渐变添加到非常相似的水平UIScrollView.它看起来很好,但是当你实际滚动时 - 从右边进入的视图是透明的.就好像渐变应用于坐在滚动视图上的实际视图而不是它们上面的层.我究竟做错了什么? (7认同)

Yuc*_*ong 8

这就是我要做的。

步骤1定义自定义渐变视图(快速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
    }
}
Run Code Online (Sandbox Code Playgroud)

第2步 -将a拖放到UIView情节提要中并将其自定义类设置为GradientView

在此处输入图片说明

例如,上面的渐变视图如下所示:


https://github.com/yzhong52/GradientViewDemo