Подскажите пожалуйста как сделать так чтобы CAShapeLayer смещался вверх вниз вместе с View когда юзер перемещается по View вверх вниз.
Синхронное смещение CAShapeLayer и UiView
Добавил следующую функцию и соотвественно delegate для mainScrollView
func scrollViewDidScroll(_ scrollView: UIScrollView)
{
backgroundLayer.frame.origin = CGPoint(x: self.backgroundLayer.frame.origin.x, y: -mainScrollView.contentOffset.y)
}
backgroundLayer смещается но с задержкой. Как сделать без задержки ?
немного накладно, каждый раз при скроле обновлять позицию для слоя.
я делал проще, правда у меня используется 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, после чего оно фиксируется над скролом, но при этом все тачи через него проходят на скрол.
выглядит это так, выделено красным
если сравнить лейблы выше, то они белые, а в месте где вставлен слой, он градиентный, лейблы затемняются. при этом при скроле все фиксировани и ничего двигать не нужно.
надеюсь я правильно понял вашу задумку.
У вас слой фиксируется и я так понял скрол горизонтальный. Мне нужно было чтобы при скроллинге слой смещался вверх вниз одновременно с содержимым view, т. е. чтобы он закрывал содержимое под ним во время вертикального скроллинга.
Скролл у меня вертикальный. Так вам тогда нужно поместить ваш слой именно в то view, в котором оно должно закрывать содержимое и тогда оно вместе с этим view будет перемещаться, без необходимости обновления координат слоя.