Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应用水平和垂直两种方法;垂直CAGradientLayer遮罩到UIScrollView/UICollectionView_Ios_Swift_Uiscrollview_Cagradientlayer - Fatal编程技术网

Ios 应用水平和垂直两种方法;垂直CAGradientLayer遮罩到UIScrollView/UICollectionView

Ios 应用水平和垂直两种方法;垂直CAGradientLayer遮罩到UIScrollView/UICollectionView,ios,swift,uiscrollview,cagradientlayer,Ios,Swift,Uiscrollview,Cagradientlayer,我有一个UICollectionView,可以在X轴和Y轴上滚动,我想通过在任何有可滚动内容的方向上添加一点淡入淡出来应用一个很酷的UI效果。假设,页面可以同时显示所有四条边缘,或者根据情况完全不显示 我目前已经实现了一个CAGradientLayer,它可以为页面的顶部或底部(垂直/y轴)增加透明度,但我不知道如何添加第二个,以实现额外的左右渐变 @IBOutlet var collectionView: UICollectionView! let fadeOffset: CGFloat =

我有一个UICollectionView,可以在X轴和Y轴上滚动,我想通过在任何有可滚动内容的方向上添加一点淡入淡出来应用一个很酷的UI效果。假设,页面可以同时显示所有四条边缘,或者根据情况完全不显示

我目前已经实现了一个CAGradientLayer,它可以为页面的顶部或底部(垂直/y轴)增加透明度,但我不知道如何添加第二个,以实现额外的左右渐变

@IBOutlet var collectionView: UICollectionView!
let fadeOffset: CGFloat = 10

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if self.collectionView.layer.mask == nil {

        let maskLayer = CAGradientLayer()
        maskLayer.locations =
            [
                NSNumber(value: 0.0),
                NSNumber(value: 0.2),
                NSNumber(value: 0.8),
                NSNumber(value: 1.0)
            ]

        let bounds = CGRect(origin: CGPoint.zero,
                                 size: self.collectionView.frame.size)
        maskLayer.bounds = bounds
        maskLayer.anchorPoint = CGPoint.zero

        self.collectionView.layer.mask = maskLayer
    }

    self.scrollViewDidScroll(self.collectionView)
}

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView == self.collectionView {

        let outerColor = UIColor(white: 1, alpha: 0).cgColor
        let innerColor = UIColor(white: 1, alpha: 1).cgColor
        var colors: [CGColor] = []

        let x = scrollView.contentOffset.x
        let y = scrollView.contentOffset.y

        // CALCULATE TOP FADE
        colors += [y + scrollView.contentInset.top <= self.fadeOffset ?
            innerColor : outerColor]
        colors += [innerColor]

        // CALCULATE BOTTOM FADE
        colors += [innerColor]
        colors += [y + scrollView.frame.height >= scrollView.contentSize.height - self.fadeOffset ?
            innerColor : outerColor]

        // APPLY MASK COLORS
        if let mask = scrollView.layer.mask as? CAGradientLayer {
            mask.colors = colors

            CATransaction.begin()

            CATransaction.setDisableActions(true)
            mask.position = CGPoint(x, y)

            CATransaction.commit()
        }
    }
}
@IBOutlet var collectionView:UICollectionView!
让fadeOffset:CGFloat=10
重写func viewdilayoutsubviews(){
super.viewDidLayoutSubviews()
如果self.collectionView.layer.mask==nil{
设maskLayer=CAGradientLayer()
maskLayer.地点=
[
NSNumber(值:0.0),
NSNumber(值:0.2),
NSNumber(值:0.8),
NSNumber(值:1.0)
]
设边界=CGRect(原点:CGPoint.zero,
大小:self.collectionView.frame.size)
maskLayer.bounds=边界
maskLayer.anchorPoint=CGPoint.zero
self.collectionView.layer.mask=maskLayer
}
self.scrollViewDidScroll(self.collectionView)
}
func scrollViewDidScroll(scrollView:UIScrollView){
如果scrollView==self.collectionView{
设outerColor=UIColor(白色:1,alpha:0).cgColor
让innerColor=UIColor(白色:1,alpha:1).cgColor
变量颜色:[CGColor]=[]
设x=scrollView.contentOffset.x
设y=scrollView.contentOffset.y
//计算顶部淡入度
颜色+=[y+scrollView.contentInset.top=scrollView.contentSize.height-self.fadeOffset?
内颜色:外颜色]
//应用遮罩颜色
如果let mask=scrollView.layer.mask as?CAGradientLayer{
mask.colors=颜色
CATransaction.begin()
CATTransaction.setDisableActions(true)
mask.position=CGPoint(x,y)
CATransaction.commit()
}
}
}

是否可以为水平轴添加另一个CAGradientLayer?或者也许有更简单/更好的方法?

看起来你在要求双线性梯度。是的,你是怎么做到的?!!?