2017-01-03 22 views
1

表示領域の背後にコンテンツがあるときにスクロール可能オブジェクト(UIScrollView、TableView、CollectionView)の上下にCALayerを追加して表示します。CALayerが1秒間表示されてから消えます。

class TableViewWithCALayers: UITableView { 

var topGradientLayer: CAGradientLayer? 
var bottomGradientLayer: CAGradientLayer? 

override func layoutSubviews() { 
    super.layoutSubviews() 
    guard self.topGradientLayer != nil && self.bottomGradientLayer != nil else { 
     addGradientLayerToTop() // create layer, set frame, etc. 
     addGradientLayerToBottom() 
     return 
    } 

//  addGradientLayerToTop()// if uncomment it - multiple layers are created and they are visible, but this is not the solution... 
     handleLayerAppearanceAfterLayoutSubviews() // playing with opacity here 
    } 

私は層の作成方法:

func addGradientLayerToTop() { 
    if let superview = superview { 
     self.topGradientLayer = CAGradientLayer() 
     let colorTop = UIColor.redColor().CGColor 
     let colorBottom = UIColor.clearColor().CGColor 
     if let topLayer = self.topGradientLayer { 
      topLayer.colors = [colorTop, colorBottom] 
      topLayer.locations = [0.0, 1.0] 
      topLayer.frame = CGRect(origin: self.frame.origin, size: CGSizeMake(self.frame.width, self.layerHeight)) 
      superview.layer.insertSublayer(topLayer, above: self.layer) 
      if (self.contentOffset.y == 0) { 
       //    if we are at the top - hide layer 
       // topLayer.opacity = 0.0 //temporarily disabled, so it is 1.0 
      } 
     } 
    } 
} 

TableViewWithCALayers XIBファイルとテーブルビューを使用したことを除いて、どこでも素敵な作品

class XibFilesViewController : CustomUIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet var tableView: TableViewWithCALayers! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.tableView.registerNib(UINib(nibName: "CustomTableViewCell", bundle: NSBundle.mainBundle()), forCellReuseIdentifier: "CustomTableViewCell") 
    self.tableView.layer.masksToBounds = false // this line doesn't help... 
} 

CustomUIViewController他の多くのViewControllersどこで使用されているがTableViewWithCALayersはうまく動作するので、問題は発生しません。 上下のレイヤーが1秒間表示されてから消えます。 からのログLayoutSubviews() funcは表示され、不透明度は1.0ですが、何かがそれらをカバーしています。何ができるのか、それをどう対処するのですか?

すべてのヘルプは歓迎です!)

topLayer.zPosition = 10000 //doesn't help 
topLayer.masksToBounds = false //doesn't help as well 

答えて

1

nibファイルを使用する場合、それはあなたがあなたのプロトタイプのセルに上の層を描きたいのUIView、またはヘッダー/足を追加することをお勧め、そしてデザインだし、その後そのビューを実際にレイヤーを処理しているクラスに確認させてください。

関連する問題