UIKit 프레임 워 크(16)제스처 인식 기
5663 단어 iOSUIKitUIGestureUIKit 프레임 워 크
제스처 인식 기 를 이용 하여 사용자 가 특정한 view 에서 흔히 볼 수 있 는 제스처 를 하 는 것 을 쉽게 식별 할 수 있다.
UIGesture Recognizer 는 추상 적 인 클래스 로 모든 제스처 의 기본 행 위 를 정의 합 니 다.하위 클래스 를 사용 해 야 구체 적 인 제스처 를 처리 할 수 있 습 니 다.
UITapGestureRecognizer 두드리다
UIPinchGestureRecognizer 손짓 을 맞추다
UIPanGestureRecognizer 끌다
UISwipeGestureRecognizer 가볍게 쓸다
UIRotationGestureRecognizer 빙빙 돌다
UILongPressGestureRecognizer 길 게 누르다
4.567917.제스처 식별 기 가 사용 하 는 일반적인 절차(두 드 리 는 제스처 를 예 로 들 면)제스처 인식 기 대상 만 들 기
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc] init];
제스처 식별 기 대상 의 구체 적 인 속성 설정:
// 2
tap.numberOfTapsRequired = 2;
tap.numberOfTouchesRequired = 2;
view 에 제스처 인식 기 추가 하기:
[self.iconView addGestureRecognizer:tap];
감청 제스처 의 촉발:
[tap addTarger:self action:@selector(tapIconView:)];
촉발 을 실현 하 는 방법
- (void) tapIconView:(UITapGestureRecognizer*) tapGR
{
NSLog(@"tap ");
}
제스처 인식 기의 상태
제스처 인식 기의 대리
에이전트 프로 토 콜
// touch ( YES),
- (BOOL) gestureRecognizer:(UIGestureRecognizer*) gestureRecognizer shouldReceiveTouch:(UITouch*) touch;
//
- (BOOL) gestureRecognizer:(UIGestureRecognizer*) gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer*) otherGestureRecognizer;
예:UITabBarController 의 미끄럼 제스처 제어1)UITabBarController 하위 클래스,모든 하위 컨트롤 러 캡 처 저장
UIImage 개체 배열 추가
@property (nonatomic, strong) NSMutableArray * picArray;
배열 이 빈 대상 으로 초기 화 됨
NSMutableArray * arr1 = [NSMutableArray array];
for ( int i =0; i
selectedIndex setter : ,
- (void)setSelectedIndex:(NSUInteger)selectedIndex
{
//
float width = [UIScreen mainScreen].bounds.size.width;
float height = [UIScreen mainScreen].bounds.size.height;
UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef context = UIGraphicsGetCurrentContext();
[[UIApplication sharedApplication].keyWindow.layer renderInContext:context];
UIImage *p_w_picpath = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//
NSLog(@"selectedIndex=%ld", self.selectedIndex);
self.picArray[self.selectedIndex] = p_w_picpath;
[super setSelectedIndex:selectedIndex];
}
현재 하위 컨트롤 러 의 앞 뒤 두 하위 컨트롤 러 캡 처 방법 을 제공 합 니 다.- (UIImage *) p_w_picpathForCurrentViewControllerLeft
{
if ( self.selectedIndex == 0 ) {
return nil;
}
return self.picArray[self.selectedIndex-1];
}
- (UIImage *) p_w_picpathForCurrentViewControllerRight
{
if ( self.selectedIndex == self.viewControllers.count - 1 ) {
return nil;
}
return self.picArray[self.selectedIndex+1];
}
2)하위 컨트롤 러 의 공용 부모 클래스 추가
UITab BarController 의 모든 하위 컨트롤 러 유형 은 공용 부모 클래스 에서 계승 하 는 것 입 니 다.
부모 클래스 에 미끄럼 제스처 식별 기 추가UIPanGestureRecognizer * gr1 = [[UIPanGestureRecognizer alloc] init];
[gr1 addTarget:self action:@selector(panGR:)];
[self.view addGestureRecognizer:gr1];
부모 클래스 에 UIImageView 속성 을 추가 하여 현재 페이지 좌우 두 개의 캡 처 p 저장w_picpathView @property (nonatomic, weak) UIImageView * ivLeft;
@property (nonatomic, weak) UIImageView * ivRight;
제스처 인식 기:제스처 시작 시 현재 view 좌우 캡 처UIImage * imgLeft = [((ViewController*)self.tabBarController) p_w_picpathForCurrentViewControllerLeft];
if ( imgLeft == nil ) {
self.ivLeft = nil;
}
else {
if ( [imgLeft isKindOfClass:[NSNull class]] ) {
// ***
imgLeft = [UIImage p_w_picpathNamed:@"white_bg"];
}
UIImageView * ivLeft = [[UIImageView alloc] initWithImage:imgLeft];
self.ivLeft = ivLeft;
[self.view addSubview:ivLeft];
self.ivLeft.frame = CGRectMake(-self.view.frame.size.width, 0, self.view.frame.size.width, self.view.frame.size.height);
}
UIImage * imgRight = [((ViewController*)self.tabBarController) p_w_picpathForCurrentViewControllerRight];
if ( imgRight == nil ) {
self.ivRight = nil;
}
else {
if ( [imgRight isKindOfClass:[NSNull class]] ) {
imgRight = [UIImage p_w_picpathNamed:@"white_bg"];
}
UIImageView * ivRight= [[UIImageView alloc] initWithImage:imgRight];
self.ivRight = ivRight;
[self.view addSubview:self.ivRight];
self.ivRight.frame = CGRectMake(self.view.frame.size.width, 0, self.view.frame.size.width, self.view.frame.size.height);
}
제스처 인식 기:제스처 가 미 끄 러 질 때 현재 view 가 미 끄 러 집 니 다.if ( p.x > 0 && self.ivLeft == nil ) {
return ;
}
if ( p.x
, ,
if ( self.view.transform.tx > self.view.frame.size.width/2 && self.ivLeft != nil ) {
self.view.transform = CGAffineTransformIdentity;
self.tabBarController.selectedIndex--;
if ( self.ivLeft != nil ) {
[self.ivLeft removeFromSuperview];
self.ivLeft = nil;
}
if ( self.ivRight != nil ) {
[self.ivRight removeFromSuperview];
self.ivRight = nil;
}
return ;
}
if ( self.view.transform.tx
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.