了解事件处理,响应者和响应者链

*문서는문서는Apple文档을문서입니다。 。제가하겠습니하겠습니하겠습니다。

总览

响应者용하여사용하여이벤트를리합니다。 UIResponderUIViewUIViewControllerUIApplication 。 Responder的响应者。 UIKit是第一响应者,也是响应者,它是UIKit中的第一响应者。 에서리에서지벤트는벤트는에서에서응답자응답자체인의전달됩니로전달됩니다전달됩니다전달됩니다 响应者响应者链响应者 로다。 响应者链은지않습니다。 UIKit响应列表中的批处理列表,响应者列表中的批处理列表,响应者列表。

图1인터페이스에标签,文本字段,按钮백그라운드두백그라운드가响应者链보여줍니다。 文本字段和UIKit一起显示,UIKit文本字段和UIView一起显示,根视图也得到显示。 响应程序链,响应者链이자기컨트롤러로전환됩니다。 UIKit的UIApplication应用程序。 UIResponder响应者链和响应者链上的链接。

图1

应用中的响应链

确定事件的第一响应者

는이벤트의UI,UIKit는第一响应者하고정정하고벤트를이벤트를보먼저다。 第一响应者이는릅니다릅니다。

触摸事件

第一响应者查看입니다。

新闻活动

第一响应者포커스가응답자입니다。

震动事件

第一响应者(UIKit)提供第一响应者로지한다。

远程控制事件

第一响应者(UIKit)提供第一响应者로지한다。

编辑菜单消息

第一响应者(UIKit)提供第一响应者로지한다。

注意

가속도계,자이로스코프벤트는체인을지않습니다。 은Core Motion벤트를이벤트를사가지정。다전달합니다。 내용은核心运动框架를。

。메시지를사통신합니통신합니다。 。。。。호출합니호출합니다。 즉,메시메시지를보냅니다。 响应者链있습니다있습니다。 nil이면,UIKit메시메시를때까때까지er响应者链er사합니다。 ,UIKit, cut(_:)copy(_:)paste(_:)响应者响应。

查看手势识别器的手势,查看手势识别器的手势。 모든가가모든모든모든모든모든모든모든모든모든。모든。。。 查看UIKit响应者链위로이전달합니다。 gesutre识别器UI处理UIKit手势를。

确定哪个响应者包含触摸事件

UIKit는观看을击测试용하여이터치가결정합니다。 在UIKit中,查看view的边界。 UIViewhitTest(_:with:) 지지정된하위를view를찾기의view의탐색합니다。

注意

의의Test hitTest(_:with:) 해당와와하위다。 ,로,view clipsToBounds假해당해당해당서브서브포함반환되지않습니다。 命中测试내용은 UIView 에서 hitTest(_:with:) 참조하십시오。

UIKit포함하는포함하는로지정합니다。 UIKit的UITouch套件和产品。 使用UIKit和UITouch下载。 포함하는view는변경되지않습니다。 원본위치원본View외부로이동하더라도,터치의속성은변경되지않습니다。

改变响应者链

响应者객체의 next 오버라이딩하여响应者链있습니다。 이렇게하면,다음响应者가이객체가됩니다。

Kit UIKit클래스가이미이미정딩하고정객체를다。

UIView 객체

  • 视图提供视图控制器의视图respond,下一个响应者는视图控制器입니다。 next,下一个响应者的视图의超级视图입니다。

UIViewController 객체

  • 视图控制器의视图窗口의视图루트,下一个响应者窗口는다。
  • 视图控制器由른른의해의해되었면면면면next next next next next next next next next next next next next next。

UIWindow 객체

  • 窗口의下一个响应者는 UIApplication Application다。
  • UIApplication 객체。 下一响应者, UIResponder视图,视图控制器,视图和视图控制器。