iOS UIEvent 이벤트 및 UIresponder 응답자
4628 단어 IOS
UIEvent
하드웨어에서 포획된 사용자 조작 장치를 나타내는 대상이다. 사건은 세 가지로 나뉜다. 터치 이벤트, 흔들림 이벤트, 원격 제어 이벤트이다. 한 터치 이벤트는 한 개 또는 여러 개의 손가락을 포함하고 각 손가락은 하나의 UItouch 대상이다.이벤트가 발생할 때마다 UIEvent 대상이 발생하여 이벤트가 발생하는 시간과 유형을 기록하는 데 사용됩니다.
일반 속성:
UIEvnetType type;
UIEventSubType subtype;
NSTimeInterval timestamp;
UIResponder
응답자는 사용자 이벤트에 응답할 수 있고 이를 처리할 수 있는 대상이다.UIResponder는 응답자의 기본 클래스로 UIApplication, UIView와 UIView에서 계승된 모든 하위 클래스는 사용자 이벤트를 포착할 수 있다(모든 클래스가 사용자 이벤트를 포착할 수 있는 것은 아니다).첫 번째 응답자는 현재 이벤트를 받고 있는 응답자 대상을 가리킨다.사용자 이벤트를 포획하려면touchesBegan,touchesMoves,touchesEnded 등의 방법을 실현해야 한다.
(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
사용자의 터치 조작 이벤트 대상은touches 집합에 저장되고 그 안에 저장된 것은UItouch 손가락 대상이다.
상기 4개의 터치 이벤트 처리 방법 중 두 개의 파라미터가 있는데 하나의 완전한 터치 과정은 3개의 상태를 겪는다. 전체 과정에서 하나의 이벤트 대상인 UIEvent만 발생하고 4개의 터치 방법은 모두 같은 UIEvent 파라미터이다.
만약 두 손가락이view를 동시에 만진다면view는touchesBegin을 1회만 호출하고 매개 변수touches에는 2개의UItouch 대상이 있다.만약 두 손가락이 앞뒤로 분리되어 터치하면view는 각각 두 번의 터치 Begin을 호출하고 호출할 때마다 터치 파라미터에 1개의 UItouch 대상만 포함한다.
UITouch
터치 사건의 손가락UItouch는 터치 이벤트를 지원하고 다중 터치를 지원합니다.
-locationInView: // view
-previousLocationInView: // view
view // view
window //
tapCount //
터치 테스트(Hit-Test)
터치 테스트를 통해 터치 사건이 어느 보기에서 발생했는지 찾아내다.모든 하위 보기를 검사하고 터치점의 위치를 정한다.하나의 터치 사건이 발생할 때 루트 보기에서 시작하여 하나하나 터치가 특정한 하위 보기에서 발생했는지 판단하고 이 하위 보기에 하위 보기가 없으면 사건이 이 보기에서 발생한다.
/**
* , ;
* nil, , ; ;
*/
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if([self findLink:point]) return self;
return nil;
}
//- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
//{
// if ([self touchingLinkWithPoint:point]) {
// return YES;
// }
// return NO;
//}
응답자 체인
많은 응답자가 연결되어 조합된 체인을 응답자 체인이라고 한다.응답자 체인은 iOS에서 이벤트를 터치하는 상호작용 규칙을 정의한다.hit-test에서 검출된view에 응답 이벤트가 없으면 이벤트는 응답자 체인을 따라 위로 전달된다.만약 체인 중의 어떤 응답자가 이벤트에 응답했거나 이미 응답자가 없으면 전달이 끝납니다.구체적으로 말하면 하나의 UIView가 터치스 Began 등 방법을 정의하지 않으면 이벤트는 부모 View에 UIView Controller의 루트 보기까지 전달되고 이벤트 응답 방법이 정의되지 않으면 window, UIAPplication까지 계속 전달되며 마지막에 이벤트를 버린다.
완전한 터치 이벤트의 전달 응답 과정
UIAPplication – > UIWindow – > 이벤트를 처리하기에 가장 적합한 컨트롤 컨트롤을 찾아 터치 방법을 호출합니다 -> 터치 방법을 실현하는지 판단합니다 -> 기본값이 없으면 이벤트를 이전 응답자에게 전달합니다 -> 이전 응답자를 찾습니다
기본 방법은 이벤트를 응답자 체인에 따라 위로 전달하고 이벤트를 이전 응답자에게 맡겨 처리하는 것이다.현재 응답자의 이전 응답자가 누구인지 어떻게 판단합니까?
현재 응답자가 컨트롤러의view인지 판단하고 컨트롤러의view라면 이전 응답자가 컨트롤러입니다.현재 응답자가 컨트롤러의view가 아니라면, 이전 응답자가 부모 컨트롤러입니다.
응답자 체인 작용?
하나의 터치 이벤트가 발생할 때 여러 응답자가 동시에 해당 이벤트를 울릴 수 있도록 할 수 있다.[super touchesXxx] 호출하기;
이벤트 전달 조정
UIView에 대해userInteractionEnabled 속성을 NO로 설정하거나 보기hidden 속성이 YES 또는alpha가 0일 때 보기도 이벤트를 받을 수 없습니다.
응용 프로그램의 경우 UIAPplication의beginIgnoringInteraction Events와endIgnoringInteraction Evnets를 통해 이벤트 전달을 닫거나 열 수 있습니다.
멀티 터치
UIView에서 multipleTouchEnabled 속성을 YES로 설정합니다.여러 개의 터치가 열려 있으면 터치와 UIEvent에 여러 개의 UITOuch 대상이 존재하고, 그렇지 않으면 터치에서 하나의 UITOuch 대상만 존재합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
IOS에서 ReplayKit 및 RTC 사용 방법응용된 소리와 아나운서의 소리를 포함한다.이 두 가지 수요를 감안하여 우리는 스크린 공유를 하는 생방송에 필요한 미디어 흐름을 간단하게 분석할 수 있다. 만약 우리가 Audio App과 Audio Mic를 두 개의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.