如何解决SWIFT:在我的tableViewController中未调用touchesEnded
因此,我有一个名为SettingsViewController的tableviewController,它具有以下touchesEnded函数:
override func touchesEnded(_ touches: Set<UITouch>,with event: UIEvent?) {
if let touch = touches.first {
print("yoyoyoyoyoyoyoyQVEWEVIWNE")
let touchLocation = touch.location(in: view)
// 290 because the width of the view is 414,and the SettingsViewController width gets set to 0.7 * the view width in SlideInTransition. 0.7 * 414 is 289.8
if touchLocation.x > 200 {
dismiss(animated: true)
}
}
}
我做了打印语句,看它是否被调用,不是。该视图控制器在自定义过渡中带有“菜单式”幻灯片。我怀疑UIView的范围就是问题所在。这是自定义转换代码:
class SlideInTransition: NSObject,UIViewControllerAnimatedTransitioning {
var isPresenting: Bool = false
func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval {
return 0.5
}
func animateTransition(using transitionContext: UIViewControllerContextTransitioning) {
// Make sure they exist
// The view controller being transitioned from,using the context (ex: here it's the MapViewController)
guard let fromViewController = transitionContext.viewController(forKey: .from),// The view controller being transitioned to,using the context (ex: here it's the SettingsTableViewController)
let toViewController = transitionContext.viewController(forKey: .to) else {return}
let containerView = transitionContext.containerView
// Constants for appearance of SettingsViewController
let vcWidth = toViewController.view.bounds.width * 0.7
let vcHeight = toViewController.view.bounds.height
if isPresenting {
// Add SettingsViewController to container
containerView.addSubview(toViewController.view)
// Initial frame for view controller,off the screen to the left to start,that way it appears to slide in
toViewController.view.frame = CGRect(x: -vcWidth,y: 0,width: vcWidth,height: vcHeight)
}
// Animate view controller onto the screen,sliding in from left
let transform = {
toViewController.view.transform = CGAffineTransform(translationX: vcWidth,y: 0)
}
// Animate back off screen
let identity = {
// .identity returns the vc to the initial frame,as created above in the isPresenting if statement
fromViewController.view.transform = .identity
}
// Animation of the transition
let duration = transitionDuration(using: transitionContext)
let isCancelled = transitionContext.transitionWasCancelled
UIView.animate(withDuration: duration,animations: {
// If presenting,transform SettingsViewController (to) onto screen,otherwise set it back off the screen.
self.isPresenting ? transform() : identity()
}) { (Bool) in
transitionContext.completeTransition(!isCancelled)
}
}
}
我编写了touchesEnded代码,以便当用户在viewController外部触摸时,它会退出(视图控制器仅是屏幕宽度的70%),但是无论我在屏幕上的什么位置,它都不会被调用点击。知道为什么吗?谢谢。
解决方法
https://developer.apple.com/documentation/uikit/uiresponder/1621084-touchesended
«如果您在不调用super的情况下重写此方法(一种常用模式),则即使您的实现不执行任何操作,也必须重写其他方法来处理触摸事件。»
这将是一个开始。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。