2017-02-07 5 views
0

私はswift 2.2で作業していますが、このような問題を扱っています: 私はUIBezierオブジェクトの配列を持っており、それらを1つのパスとして作成する必要があります。複数のBezierPathから複数のパスを作成する方法

私はそれはいくつかの層を作成したこと、そのための特別な機能を持っていたが、そのアプローチの長所。私は一つの層を必要とするように私ベジェラインの配列から複数のパスを作成するための最良の方法は何ですか?

func createStroke(line: UIBezierPath) { 

     self.currentPath = CAShapeLayer() 
     currentPath.path = line.CGPath 
     currentPath.strokeColor = UIColor.blackColor().CGColor 
     currentPath.fillColor = UIColor.clearColor().CGColor 
     currentPath.lineWidth = 1 
     self.view.layer.addSublayer(currentPath) 

    } 

、私の要件と一緒に行く 最初のアイデアはforループサイクルを作成することですが、私はそれがきれいな方法ではないと考えています。

+0

すべてのベジェパスを追加して1つのパスを作成し、その結果をCAShapeLayerパスとして設定することができます。詳細:https://developer.apple.com/reference/uikit/uibezierpath/1624377-append – aleberguer

答えて

3

あなたはこのようなものを(これは遊び場コードで)行うことができます。

playground exemple

あなたが一層のみ、このようになります:

ここ
let myView = UIView(frame:CGRect(x: 100, y: 100, width: 250, height: 250)) 
myView.backgroundColor = UIColor.white 
let myLayer = CAShapeLayer() 

func createPath(i: Int) -> UIBezierPath { 
    let path = UIBezierPath() 
    path.move(to: CGPoint(x: 2*i, y: 9*i - 4)) 
    path.addLine(to: CGPoint(x: 10 + 5*i, y: 20 + 4*i)) 

    return path 
} 

func createStroke(line: UIBezierPath) { 
    myLayer.path = line.cgPath 
    myLayer.strokeColor = UIColor.black.cgColor 
    myLayer.fillColor = UIColor.black.cgColor 
    myLayer.lineWidth = 1 
} 

let paths = [createPath(i: 0), createPath(i: 15), createPath(i: 8), createPath(i: 10)] 
let myPath = UIBezierPath() 
for path in paths { 
    myPath.append(path) // THIS IS THE IMPORTANT PART 
} 
createStroke(line: myPath) 
myView.layer.addSublayer(myLayer) 

myView 

が、それは遊び場で次のようになります

関連する問題