objective-c - 在 Swift 中识别层内的对象

标签 objective-c swift xcode image-processing uibezierpath

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

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:

enter image description here

最佳答案

CAShapeLayer 有一个 hitTest() 函数。在你的 super View 中:

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 内并突出显示它。

我已经看过这个视频好几次了,这让我想知道 - 如果用户描绘了一个切断自由女神像头部的形状怎么办?该应用程序会做什么?砍掉雕像的头,认出完整的雕像,还是认不出?

这最后的观察并不意味着意见,而是指出这可能是一个展示应用程序“最佳案例”功能的演示。如果用户做了一些“不尽如人意”或出乎意料的事情,实际上可能会让您更好地了解它是如何完成它所做的事情的。

关于objective-c - 在 Swift 中识别层内的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232759/

相关文章:

具有泛型和 Xcode 自动完成功能的 Objective-C 方法返回类型

objective-c - 你如何从一个桥接函数中得到一个c函数指针?

ios - Clang 在 objective-c 中因退出代码 1 错误而失败

ios - Xcode 11.3 "No Conditions Available"

ios - Swift - 如何制作自定义幻灯片动画?

ios - 'QBChatRoom' 已弃用 : Use QBChatDialog instead

ios - 尝试使用 UIPanGesture 在 UIView 上绘图

ios - Realm 因 RLMException : object has been deleted or invalidated 崩溃

ios - 在 iOS 中如何使用 alert 来提示输入文本?

iphone - 在 MapKit Xcode 中设置缩放级别