每个人都知道,当你在按钮外拖动时,它不会立即取消UIButton默认的突出显示状态。 UIControlEventTouchDragExit在70像素之外触发。我希望距离为0.所以在搜索它的解决方案后,我尝试创建一个这样的子类:
import UIKit
class UINewButton: UIButton {
override func continueTrackingWithTouch(touch: UITouch, withEvent event: UIEvent?) -> Bool {
print("here")
let touchOutside = !CGRectContainsPoint(self.bounds, touch.locationInView(self))
if touchOutside {
let previousTochInside = CGRectContainsPoint(self.bounds, touch.previousLocationInView(self))
if previousTochInside {
print("Sending UIControlEventTouchDragExit")
self.sendActionsForControlEvents(.TouchDragExit)
self.highlighted = false
self.selected = false
}else{
print("Sending UIControlEventTouchDragOutside")
self.sendActionsForControlEvents(.TouchDragOutside)
}
}else{
let previousTouchOutside = !CGRectContainsPoint(self.bounds, touch.previousLocationInView(self))
if previousTouchOutside{
print("Sending UIControlEventTouchDragEnter")
self.sendActionsForControlEvents(.TouchDragEnter)
}else{
print("Sending UIControlEventTouchDragInside")
self.sendActionsForControlEvents(.TouchUpInside)
}
}
return super.continueTrackingWithTouch(touch, withEvent: event)
}
}
并在UIViewController中创建一个这样的按钮
@IBOutlet var confirmButton: UINewButton!
我假设UIButton被触摸和拖动。它会按以下顺序调用函数:
beginTrackingWithTouch(触摸时) - > continueTrackingWithTouch(拖动时) - > endTrackingWithTouch(当离开时)
但这是奇怪的部分。即使我重写函数continueTrackingWithTouch,它仍然没有被调用。导致控制台窗口没有显示" here"我放在那里的地方。结果仍然是默认距离70.那怎么样?
我尝试调用上面提到的三个函数,如果需要,则返回true。 我错过了什么?
阅读本文后:UIControlEventTouchDragExit triggers when 100 pixels away from UIButton 仍然没有帮助:((加上它写在Objective-C ...)
这个功能的属性是不是70px的距离所以我可以改变?(顺便提一下,我怎样才能看到原来的功能?Apple Developer Documentation中没有详细信息......) 我应该在UIViewController中使用button.addtarget吗?但这似乎是另一种方式。
这是另一个问题: 如果我想在按钮外拖动时取消突出显示状态,这是对的吗?
self.highlighted = false
self.selected = false
我不知道哪一个是正确的,所以我全部使用它。
请帮忙!只是一个快速的新手,但我已经陷入这个问题3天。 QQ
答案 0 :(得分:0)
在Swift 3中,函数签名已更改。现在是:
func continueTracking(_ touch: UITouch, with event: UIEvent?) -> Bool