2016-09-08 19 views
0

UICollectionViewのセル間に線を引いて、その領域をまたぐようにするにはどうすればよいですか? 意図した出力は、私がやったことのベストは、各セル内の行を追加することで、このような何か:UICollectionView - セル間に線を描画します

enter image description here

です。どのようにスペースを通って線を接続するのですか?

+0

あなたのユースケースは?その線は静的か動的か? – Santosh

+0

動的であることを意図しています。ユーザはセルを選択できなければならず、セルが隣接している場合はそれらの間に線が現れます。 – meowmeowmeow

+0

これで適切な 'height'を持つ' UIView'を追加し、それを 'subView'として' collectionView'に追加し、それを 'bringSubViewToFront'にすることができます。 – Santosh

答えて

1

私はあなたがこのように使用できる拡張を行った。ここで

collectionView.drawLineFrom(indexPathA, to: indexPathB, color: UIColor.greenColor()) 

は拡張したものです:

extension UICollectionView { 

    func drawLineFrom(
     from: NSIndexPath, 
     to: NSIndexPath, 
     lineWidth: CGFloat = 2, 
     strokeColor: UIColor = UIColor.blueColor() 
    ) { 
     guard 
      let fromPoint = cellForItemAtIndexPath(from)?.center, 
      let toPoint = cellForItemAtIndexPath(to)?.center 
     else { 
      return 
     } 

     let path = UIBezierPath() 

     path.moveToPoint(convertPoint(fromPoint, toView: self)) 
     path.addLineToPoint(convertPoint(toPoint, toView: self)) 

     let layer = CAShapeLayer() 

     layer.path = path.CGPath 
     layer.lineWidth = lineWidth 
     layer.strokeColor = strokeColor.CGColor 

     self.layer.addSublayer(layer) 
    } 
} 

結果は次のようになります。とは何

A line drawn from first to second cell

1

私は以下のコードでこれを達成できましたが、別のアプローチもあるかもしれません。

私はUIViewをカスタムframeと作成しています。ちょうどframeを提供するだけで、隣接するセルに基づいて計算することができます。

let cell1 = collectionView.cellForItemAtIndexPath(NSIndexPath(forRow: 0, inSection: 0)) 
    let myView = UIView.init(frame: CGRectMake((cell1?.frame.origin.x)!, ((cell1?.frame.origin.y)! + 50.0), (cell1?.frame.size.width)!*4, 10)) 
    myView.backgroundColor = UIColor.blueColor() 
    collectionView.addSubview(myView) 
    collectionView.bringSubviewToFront(myView) 

これは、height 10.0の行を描画します。これがあなたに役立つかどうか私に教えてください。

+0

私はこれを打ち、あなたに知らせるでしょう。ありがとう! – meowmeowmeow

関連する問題