动画中的view,其frame不在肉眼所见的位置,所以需要其他方式接收点击事件。
步骤1:将点击事件指向view
使用layer的presentation方法,得到view在动画中的当前frame。
重写hittest方法,检查当前frame是否包含点击位置。
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
let localPoint = convert(point, to: self.superview)
if self.layer.presentation()?.frame.contains(localPoint) == true {
print("tap")
return tapBtn
} else {
return super.hitTest(point, with: event)
}
}
步骤2:让view接收事件
由于实际frame不在当前位置,当判断点击是否在view范围内时,需要返回true。
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
return true
}
这个方法仅用于touchUpInside事件,其他事件当实现欢迎大家提建议。
网友评论