簡體   English   中英

如何找到被按下的子層?

[英]How to find what sublayer was pressed?

我有一個UIImageView,帶有2個子層,代表2個不同的圖像。 有沒有辦法確定按下哪一層?

當前代碼

let point = sender.location(in: flagImageView) // Where you pressed

    guard let sublayers = flagImageView.layer.sublayers else { return }
    if let layer = sublayers.first(where: {$0.name == "Upper_Image"})?.hitTest(point) {
        print("Found it: \(layer)")
    }

這是添加圖像的方法

let distance: CGFloat = 4

    let downMaskPath = UIBezierPath()
    downMaskPath.move(to: CGPoint(x: 0, y: 0))
    downMaskPath.addLine(to: CGPoint(x: self.frame.width - distance, y: 0))
    downMaskPath.addLine(to: CGPoint(x: 0, y: self.frame.height))
    downMaskPath.close()

    let upperMaskPath = UIBezierPath()
    upperMaskPath.move(to: CGPoint(x: self.frame.width, y: 0))
    upperMaskPath.addLine(to: CGPoint(x: self.frame.width, y: self.frame.height))
    upperMaskPath.addLine(to: CGPoint(x: distance, y: self.frame.height))
    upperMaskPath.close()
    upperMaskPath.stroke()

    let imageLayer1 = CALayer()
    imageLayer1.borderColor = #colorLiteral(red: 0.07843137255, green: 0.1294117647, blue: 0.7176470588, alpha: 1).cgColor
    imageLayer1.borderWidth = 1
    imageLayer1.contents = image1?.cgImage // Assign your image
    imageLayer1.frame = self.frame // Define a frame

    let imageLayer2 = CALayer()
    imageLayer2.borderColor = #colorLiteral(red: 0, green: 0.4431372549, blue: 1, alpha: 1).cgColor
    imageLayer2.borderWidth = 1
    imageLayer2.contents = image2?.cgImage // Assign your image
    imageLayer2.frame = self.frame // Define a frame

    let maskLayer1 = CAShapeLayer()
    maskLayer1.path = downMaskPath.cgPath
    imageLayer1.mask = maskLayer1

    let maskLayer2 = CAShapeLayer()
    maskLayer2.path = upperMaskPath.cgPath
    imageLayer2.mask = maskLayer2

    self.layer.addSublayer(imageLayer1)
    self.layer.addSublayer(imageLayer2)

您可以將名稱屬性用於CALayer,以在各個層之間唯一地標識。

像這樣:

imageLayer1.name = "someName"

按照蘋果

 /* The name of the layer. Used by some layout managers. Defaults to nil. */

    /** Miscellaneous properties. **/
    open var name: String?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM