我已经将UISegmentedControl
子类化,并在其图层上添加了一个特殊形状,以便能够通过点击此形状来移动分段控件。
问题是我还实现了"值已更改" UISegmentedControl
的事件。
是否可以说在分段控件上点击时,"值已更改"事件被触发,当它在图层上的形状上时(我有框架,所以我可以看出是否在形状内做出了点击),另一个目标被触发了?
更新:
可以避免对图层和图像的任何误解我想,我有一个UIView
。如果我点击视图的左半部分,我会触发一个动作,如果我点击右半边,我会触发另一个动作。
答案 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")
}
我希望这会对你有所帮助。