识别Swift中图层内的对象

时间:2016-10-25 06:25:19

标签: objective-c swift xcode image-processing uibezierpath

如何从Swift中的UIBeizierPath识别shapeLayer中的对象?下面是示例应用程序PopAGraph。提前谢谢。

https://vimeo.com/61877513

我的代码:

int delay = 5000;   // delay for 5 sec.
int interval = 30000;  // iterate every 30 sec.
Timer timer = new Timer();

timer.scheduleAtFixedRate(new TimerTask() {
      public void run() {
          getCurrentLocation // Your method from above .. 
      }
  }, delay, interval);

我的形象和形状:

enter image description here

1 个答案:

答案 0 :(得分:0)

CAShapeLayer是一个hitTest()函数。在您的超级视图中:

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) {
}
编辑:正如评论中所提到的,我完全误解了问题是什么。

OP中的链接指向一个看起来正在发生某些专有功能的应用。如果你想要类似的iOS“开箱即用”功能,这里是你能做的最好的事情:

(1)让用户通过平移轮廓来创建CAShapeLayer。

(2)在图像上运行CoreImage过滤器(CIEdges)以检测所有边缘。

(3)找到连续(没有端点关闭)边缘的“最佳拟合”,其中所述边的hitTest()位于CAShapeLayer中并突出显示它。

我已经看过几次这个视频了,它让我感到疑惑 - 如果用户追踪的形状会切断自由女神像头?该应用程序会做什么?切断雕像头,识别完整的雕像,或导致无法识别?

最后一次观察不是意见,而是指出这可能是一个演示应用程序的“最佳案例”功能的演示。如果用户做了“不太理想”或意外的事情,事实上可能会让你更好地了解它如何完成它的工作。