Синхронное смещение CAShapeLayer и UiView


#1

Подскажите пожалуйста как сделать так чтобы CAShapeLayer смещался вверх вниз вместе с View когда юзер перемещается по View вверх вниз.


#2

Добавил следующую функцию и соотвественно delegate для mainScrollView

 func scrollViewDidScroll(_ scrollView: UIScrollView)
{
    backgroundLayer.frame.origin = CGPoint(x: self.backgroundLayer.frame.origin.x, y: -mainScrollView.contentOffset.y)
}

backgroundLayer смещается но с задержкой. Как сделать без задержки ?


#3

немного накладно, каждый раз при скроле обновлять позицию для слоя.
я делал проще, правда у меня используется CAGradientLayer.

private var bottomFade: CAGradientLayer!

public func setupBottomFade() {
    if bottomFade != nil { bottomFade.removeFromSuperlayer() }

    bottomFade = CAGradientLayer()

    bottomFade.frame = view.bounds
    bottomFade.colors = [
        UIColor(red: 0.05, green: 0.07, blue: 0.13, alpha: 0).cgColor,
        UIColor(red: 0.08, green: 0.10, blue: 0.16, alpha: 1).cgColor
    ]
    bottomFade.locations = [0.75, 1.0]
    view.layer.addSublayer(bottomFade)
}

вызывается один раз в viewDidLoad, после чего оно фиксируется над скролом, но при этом все тачи через него проходят на скрол.
выглядит это так, выделено красным

если сравнить лейблы выше, то они белые, а в месте где вставлен слой, он градиентный, лейблы затемняются. при этом при скроле все фиксировани и ничего двигать не нужно.
надеюсь я правильно понял вашу задумку.


#4

У вас слой фиксируется и я так понял скрол горизонтальный. Мне нужно было чтобы при скроллинге слой смещался вверх вниз одновременно с содержимым view, т. е. чтобы он закрывал содержимое под ним во время вертикального скроллинга.


#5

Скролл у меня вертикальный. Так вам тогда нужно поместить ваш слой именно в то view, в котором оно должно закрывать содержимое и тогда оно вместе с этим view будет перемещаться, без необходимости обновления координат слоя.