2016-10-25 6 views
1

SwiftのUIBeizierPathからshapeLayer内のオブジェクトを認識するにはどうすればよいですか?以下は、PopAGraphアプリケーションの例です。前もって感謝します。Swiftのレイヤー内のオブジェクトを認識

https://vimeo.com/61877513

マイコード:

fileprivate func addNewPathToImage() { 
    path.lineJoinStyle = CGLineJoin.round 
    shapeLayer.path = path.cgPath 
    shapeLayer.strokeColor = strokeColor.cgColor 
    shapeLayer.fillColor = UIColor(red: 52/255, green: 152/255, blue: 219/255, alpha: 0.5).cgColor 
    shapeLayer.lineWidth = lineWidth 
    mainImageView.layer.addSublayer(shapeLayer) 
} 

私のイメージとshapeLayer:彼のhitTest()関数CAShapeLayer

enter image description here

答えて

0

private func setUpShapeLayer() { 

    self.isUserInteractionEnabled = true 

    let tapGesture = UITapGestureRecognizer() 
    tapGesture.numberOfTapsRequired = 1 
    tapGesture.addTarget(self, action: #selector(viewTapped)) 
    self.addGestureRecognizer(tapGesture) 

    [your code to add shapeLayer] 

} 

internal func viewTapped(_ recognizer:UITapGestureRecognizer) { 
    let p = recognizer.location(in: self) 
    if (shapeLayer.hitTest(p) != nil) { 

     [do something here] 

    } else if (greenLayer.hitTest(p) != nil) { 
} 

EDIT:あなたのスーパーでのコメントで述べたように、私は完全に質問が何であったか誤解します。

OPのリンクは、独自の機能が発生しているように見えるアプリ向けです。類似したiOSの機能をご利用になる場合は、次のようにしてください。

(1)アウトラインをパンすることで、ユーザーにCAShapeLayerを作成させますか?

(2)イメージ上でCoreImageフィルタ(CIEdges)を実行して、すべてのエッジを検出します。

(3)前記エッジのhitTest()がCAShapeLayer内にあり、それを強調表示する隣接(端点なしで閉じた)エッジの「最良適合」を見つける。

私はこのビデオを数回見ましたが、それは私が不思議に思っています - ユーザーが自由の女神の頭を切り落とした形をとらえたらどうでしょうか?アプリは何をしますか?像の頭を切り取ったり、完全な像を認識したりすることはできません。

この最後の見解は意見ではなく、アプリの「最良のケース」機能を示すデモかもしれないと指摘しています。また、ユーザーが「最適ではない」または予期しないことを実際に行った場合、実際にどのように達成されているかをよりよく理解できます。

+0

私はあなたが誤解していると思います。私はshapeLayer内のイメージ内でオブジェクトを取得する必要があります。既存のアプリの一例である動画リンクを見ることができます – aatalyk