是否可以针对不同位置的触摸设置不同的目标?

时间:2015-06-27 07:11:50

标签: ios swift

我已经将UISegmentedControl子类化,并在其图层上添加了一个特殊形状,以便能够通过点击此形状来移动分段控件。

问题是我还实现了"值已更改" UISegmentedControl的事件。

是否可以说在分段控件上点击时,"值已更改"事件被触发,当它在图层上的形状上时(我有框架,所以我可以看出是否在形状内做出了点击),另一个目标被触发了?

更新:

可以避免对图层和图像的任何误解我想,我有一个UIView。如果我点击视图的左半部分,我会触发一个动作,如果我点击右半边,我会触发另一个动作。

1 个答案:

答案 0 :(得分:1)

我已经实现了子类UISegmentedControl

class MySegmentedControl: UISegmentedControl {

    var subLayer: CALayer?

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

        if let subLayer = subLayer {
            let touch = touches.first as! UITouch
            let point = touch.locationInView(self)

            if subLayer.frame.contains(point) {
                println("tapped on subLayer")
            } else {
                super.touchesBegan(touches, withEvent: event)
            }
        } else {
            super.touchesBegan(touches, withEvent: event)
        }
    }

}

这是我的测试代码:

// ViewController.swift

override func viewDidLoad() {
    super.viewDidLoad()

    let control = MySegmentedControl(items: ["One", "Two", "Three"])
    control.frame = CGRect(x: 20, y: 300, width: 200, height: 30)
    control.addTarget(self, action: "valueChanged", forControlEvents: .ValueChanged)
    view.addSubview(control)

    let subLayer = CAShapeLayer()
    subLayer.backgroundColor = UIColor.redColor().CGColor
    subLayer.frame = CGRect(x: 0, y: 0, width: 40, height: 30)
    control.layer.addSublayer(subLayer)

    control.subLayer = subLayer
}

func valueChanged() {
    println("test")
}

我希望这会对你有所帮助。