2016-04-30 30 views
2

我向UICollectionView添加了渐变图层,但图层设置为屏幕宽度。我试图在滚动时保持图层静态,但找不到解决方案。尝试设置collectionView的框架和当前的VC,当我滚动图层也滚动。这是我的代码,谢谢你的帮助。如何在滚动时设置UICollectionView图层不移动/静态Swift

let gradinatLayer = CAGradientLayer() 
    gradinatLayer.frame = self.collectionView.frame //self.currentViewController.view.frame 

    let cgColors:[CGColorRef] = [UIColor.blackColor().colorWithAlphaComponent(0.7).CGColor, UIColor.clearColor().CGColor, UIColor.blackColor().colorWithAlphaComponent(0.7).CGColor] 

    gradinatLayer.colors = cgColors 
    gradinatLayer.startPoint = CGPointMake(0, 0.5) 
    gradinatLayer.endPoint = CGPointMake(1.0, 0.5) 
    gradinatLayer.locations = [0.15, 0.50, 0.85] 

    self.collectionView.layer.insertSublayer(gradinatLayer, atIndex: 0) 

//This doesn't work 
self.collectionView.layer.shouldRasterize = true 
self.collectionView.layer.rasterizationScale = UIScreen.mainScreen().scale 

回答

1

感谢您对您的所有意见。挖掘到UIView后,这是我的解决方案。不幸的是,将super viewssubviews添加到UICollectionView仍然保持视图可滚动。感谢John Stephen,他展示了如何使用其子视图创建带有userIntaractions的透明UIView,这是可能的。

我已经宣布的collectionView顶部@IBOutlet weak var passThroughView: PassThroughView!

这是现在工作的代码:

let gradinatLayer = CAGradientLayer() 
    gradinatLayer.frame = self.currentViewController.view.frame 

    let cgColors:[CGColorRef] = [UIColor.blackColor().colorWithAlphaComponent(0.7).CGColor, UIColor.clearColor().CGColor, UIColor.blackColor().colorWithAlphaComponent(0.7).CGColor] 

    gradinatLayer.colors = cgColors 
    gradinatLayer.startPoint = CGPointMake(0, 0.5) 
    gradinatLayer.endPoint = CGPointMake(1.0, 0.5) 
    gradinatLayer.locations = [0.15, 0.50, 0.85] 

    passThroughView.layer.insertSublayer(gradinatLayer, atIndex: 0) 
0

尝试添加图层到的CollectionView的backgroundview代替:

self.collectionView.backgroundView.layer.addSublayer(gradinatLayer)

+0

嗨@ JDA3,谢谢你的回答,但是这是行不通的,因为这是一个backgroundView,这意味着它是细胞的背后并不会在单元格顶部可见,因此,我们需要向collectionView添加顶层。 –

+0

如果你想要在单元格上方的渐变,那么你会想要添加一个新的视图到collectionView的.superView,使它透明,并添加渐变。 – JDA3