Я добавил слой градиента в UICollectionView, но для этого слоя задана ширина экрана. Я пытаюсь сохранить статический слой во время прокрутки, но не могу найти решение. Пытался установить как фрейм collectionView, так и currentVC, когда я прокручиваю слой, также прокручивается. Это мой код, спасибо за вашу помощь.

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
3
Tal Zion 30 Апр 2016 в 19:52

2 ответа

Лучший ответ

Спасибо вам за все ваши комментарии. Это было моим решением после того, как я покопался в UIView. К сожалению, добавление super views и subviews в UICollectionView по-прежнему сохраняет возможность прокрутки. Благодаря Джону Стивену, который показал, как создать прозрачный UIView с userIntaractions с его дочерними представлениями, это стало возможным.

Я объявил @IBOutlet weak var passThroughView: PassThroughView! поверх collectionView.

Вот код, который сейчас работает:

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)
2
Community 23 Май 2017 в 11:52

Попробуйте вместо этого добавить свой слой в backgroundview collectionView:

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

0
JDA3 30 Апр 2016 в 17:34