The Core iOS CookBook 1장 학습 노트 - 제스처 및 터치
터치 제어는 iOS 시스템 상호작용의 핵심 방식이다.
터치 컨트롤
코코아 터치는 가능한 한 간단한 방식으로 직접적인 조종을 실현했다.터치 이벤트를 상호작용 중인 보기에 보냅니다.
터치할 때마다 터치가 발생하는 위치, 화면을 클릭한 횟수, 터치가 발생하는 시간 등 많은 정보를 전달한다.
iOS는 responder chain (스피커 체인) 을 사용하여 터치 제어에 응답해야 하는 대상이 누구인지 확인합니다.응답자 (responders) 는 응답 이벤트 (이벤트) 의 대상입니다.이 응답자들이 맡은 역할은 일련의 관리자가 이 사건(event)을 관리하는 것과 같다.사용자가 화면을 터치할 때, 프로그램은 터치 이벤트를 처리할 대상을 찾을 것이다.터치 (touch) 는 한 보기에서 다른 보기로 전달되며, 일부 대상이 이 사건 (이벤트) 에 응답할 때까지 전달됩니다.
대부분의 경우 터치(touches)와 그 정보는 UITOuch 대상에 저장되고 터치(touches)는 한 그룹 한 그룹의 형식으로 UIEvent 대상에 전달된다.모든 UIEvent 객체는 단일 터치 이벤트를 나타내며 한 번 또는 여러 번의 터치를 포함합니다.이 점은 개발자가 사용자의 조작에 어떻게 응답하는지를 결정할 뿐만 아니라 사용자가 화면에서 어떻게 조작하는지도 결정한다.
당신의 응용 프로그램은 보기나 보기 컨트롤러를 통해 터치 (touches) 를 수신합니다.터치(touch) 처리를 실현하는 클래스는 UIResponder 클래스를 계승하여 실현해야 한다.터치(touches)를 어디서 처리하고 응답할지 결정할 것입니다.responder 클래스를 사용하지 않고 간단한 제스처 제어를 시도하는 개발 신인들은 많은 어려움을 겪을 것이다.
보기에서 터치(touches)를 처리하는 것은 직감에 어긋나는 것 같다.인터페이스에 표시되는 방식과 터치즈에 대한 응답 방식을 분리하고 싶을 수도 있습니다.더욱이 보기가 터치 제어에 직접 응답하여 상호작용을 실현하는 것은 MVC 디자인 모델에 어긋나는 것 같지만 이렇게 하는 것은 매우 필요할 뿐만 아니라 봉인성을 높일 수 있다.
단계.
터치스는 생명 주기를 가지고 있다.어떤 터치든지 다섯 단계를 겪는다.
이 다섯 단계는 터치 이벤트 발생 과정의 전체 절차를 구분하는 데 쓰인다.
터치 및 응답 방법
UIView와 UIView Controller를 포함한 모든 UIresponder 클래스의 하위 클래스는 터치에 응답합니다.모든 종류는 자신이 응답할지, 어떻게 응답할지 결정한다.응답이 필요할 때, 이러한 종류의 실례는 사용자의 터치 제어에 대해 자신의 방식으로 응답할 것이다.
미리 정의된 리셋 방법은 터치 시작, 터치 이동, 터치 끝을 처리할 수 있다.단계(Phase)에 해당합니다.방법은 다음과 같습니다.
터치된 뷰
멀티 터치
제스처 식별기
제스처 식별기 종류를 통해 사용자가 가볍게 치기, 축소, 회전, 휩쓸기, 드래그, 또는 긴 누르는 동작을 할 때 우리는 리셋 방법을 터치할 수 있다.
몇 가지 흔한 제스처Taps - 번트, 1손가락 또는 2손가락스윙스 - 싹쓸이 3.Pinches - 축소 4.Rotations - 두 손가락으로 뷰 회전 5.Pans - 끌어서 변환 6.Long presses - 길게 누르기
방법1: 직접 조작하는 인터페이스 추가
직접 조종을 처리할 때, 디자인 센터는 UIView Controller에서 UIView로 이동합니다.더 정확히 말하면 UIresponder로 옮긴 것 같다.UIResponder 클래스에서 얻을 수 있는 방법을 사용자 정의해서 터치할 수 있는 인터페이스를 만듭니다.
방법1-1 이 예는 DragView라는 UIImageView 클래스의 하위 클래스를 만들고 터치 응답을 이 하위 클래스에 추가합니다.이것은 그림 보기이기 때문에 사용자와 상호작용을 할 수 있는 것이 특히 중요하다. (즉 setUserInteractionEnabled 속성은 YES로 설정되어야 한다.)이 속성은 이 보기 자체와 모든 하위 보기에 영향을 줄 것이다.코드는 다음과 같습니다.
@implementation DragView
{
CGPoint startLocation;
}
//
- (id)initWithImage:(UIImage *)image {
self = [super initWithImage:image];
if (self) {
// , DragView
self.userInteractionEnabled = YES;
}
return self;
}
// Responder
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
// ,
startLocation = [[touches anyObject] locationInView:self];
[self.superview bringSubviewToFront:self];
}
// Responder
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
//
CGPoint point = [[touches anyObject] locationInView:self];
float dx = point.x - startLocation.x;
float dy = point.y - startLocation.y;
//
CGPoint newCenter = CGPointMake(self.center.x + dx, self.center.y + dy);
//
self.center = newCenter;
}
방법2: 제스처 식별기를 이용하여 보기의 제스처 제어를 실현한다
지식 준비
frame: 이view는 부모view 좌표 시스템의 위치와 크기입니다.(참조점은 아버지의 좌표 시스템)bounds: 이view는 로컬 좌표 시스템의 위치와 크기입니다.(참조점은 로컬 좌표 시스템으로 ViewB 자체의 좌표 시스템에 해당하며 0, 0점을 기점으로 한다)center: 이view의 중심점은 부모view 좌표 시스템의 위치와 크기입니다.(참조점은 아버지의 좌표계)
-(CGRect)frame{
return CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height);
}
-(CGRect)bounds{
return CGRectMake(0,0,self.frame.size.width,self.frame.size.height);
}
Jan 4, 2015
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.