2017-09-08 3 views
0

검정색과 맑은 두 가지 색상의 CAGradientLayer가 있습니다. 뷰가 표시되면 그래디언트가 적절하게 표시되지만 CollectionView를 스크롤하면 그래디언트의 명확한 부분이 사라집니다.검은 색 그라데이션을 지우려면보기를 스크롤 할 때 사라집니다.

let gradient: CAGradientLayer = { 
    let g = CAGradientLayer() 
    g.colors = [UIColor.black.cgColor, UIColor.clear.cgColor] 
    g.startPoint = CGPoint(x: 0.5, y: 1) 
    g.endPoint = CGPoint(x: 0.5, y: 0) 
    return g 
}() 

다음은 초기 동작입니다. Initial Behavior

아래는 스크롤 한 후의 동작입니다. Behavior After Scrolling

의견이 있으십니까?

편집 UIView의 설정과 그라디언트 레이어의 추가가 포함 된 몇 가지 추가 코드가 포함되었습니다.

let toolBar: UIView = { 
    let n = UIView() 
    n.translatesAutoresizingMaskIntoConstraints = false 
    n.backgroundColor = UIColor.clear 
    return n 
}() 

    view.addSubview(s.toolBar) 
    view.addConstraintsWithFormat("H:|[v0]|", views: s.toolBar) 
    s.toolBar.heightAnchor.constraint(equalToConstant: 50).isActive = true 
    s.toolBar.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
    s.toolBar.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true 

    s.toolBar.layer.insertSublayer(s.gradient, at: 0) 
    s.gradient.frame = CGRect(x: 0, y: 0, width: view.frame.width, height: 50) 
+0

어디에 레이어를 추가하나요? 전체 컬렉션보기? –

+0

@FangmingNing 두 번째 이미지의 검정색 막대의 프레임을 가진 UIView에 그라디언트가 추가됩니다. – Stefan

+0

UIView 추가 코드를 게시 할 수 있습니까? 그건 우리에게 당신의 레이어가 왜 없는지에 대한 더 나은 단서를 줄 것입니다. –

답변

0

는 뷰 override func viewWillLayoutSubviews() 대신보기 중첩되는 다수의 구배의 결과 불렸다 그러나 여러 번 viewWillLayoutSubviews 대해 생성 된 구배의 다른 인스턴스를 스크롤 그래서마다 override func viewDidLoad()에서 생성되고 있었다.

관련 문제