在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
第一, 手势是指从用一个或多个手指接触屏幕开始,直到手指离开屏幕为止的所有事件。 注意: 在iPhone中最多同时可以支持5点触摸,iPad中最多同时可以支持11点触摸。模拟器中按下option键,可以模拟两点触摸。 第二, 手势识别器:UIGestureRecognizer 关系:UIGestureRecognizer是在Touch的基础上封装出来的; UIGestureRecognizer的子类: UITapGestureRecognizer;//轻拍识别器 UILongPressGestureRecognizer;//长按识别器 UISwipGestureRecognizer;//轻扫识别器 UIRotationGestureRecognizer;//旋转识别器 UIPinchGestureRecognizer;//捏合识别器 UIPanGestureRecognizer;//拖动识别器
下面是手势识别器的简单应用 在我们创建的根视图文件中: RootViewController.m文件中 -(void)viewDidLoad [super viewDidLoad]; imageNumber =1; // Do any additional setup after loading the view from its nib. NSArray *titles = @[@"轻拍",@"长按",@"轻扫",@"旋转",@"捏合",@"拖拽"]; //定义选择控件 UISegmentedControl *segment = [[UISegmentedControl alloc]initWithItems:titles]; segment.frame = CGRectMake(0, 460-30, 320, 30); //根据值的变化控制不同的事件 [segment addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:segment]; //生成图片视图 //全局变量 imageView = [[UIImageView alloc]initWithFrame:CGRectMake(50,80 , 220,280)]; imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"h1" ofType:@"jpeg"]]; imageView.userInteractionEnabled = YES;//允许用户交互 [self.view addSubview:imageView]; //设置动画 //滑动控件 UISlider *slider = [[UISlider alloc]initWithFrame:CGRectMake(50, 30, 220, 10)]; slider.maximumValue = 7;//设置最大值 slider.minimumValue = 0.5;//设置最小值 [slider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:slider]; //定义按钮 NSArray *titleArr = [[NSArray alloc]initWithObjects:@"动画开始",@"动画结束", nil]; for (int i=0; i<[titleArr count]; i++) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; btn.frame = CGRectMake(30+130*i, 380, 120, 30); [btn setTag:101+i]; [btn setTitle:[titleArr objectAtIndex:i] forState:UIControlStateNormal]; [btn addTarget:self action:@selector(startAction:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:btn]; } //选择事件关联方法 -(void)segmentAction:(id)sender UISegmentedControl *segmentedControl = (UISegmentedControl*)sender;//拿到segment的每个控件 //移除上一次手势 保证只有一个手势在视图上 UIGestureRecognizer手势识别器的父类 for (UIGestureRecognizer*recognizer in imageView.gestureRecognizers) { [imageView removeGestureRecognizer:recognizer]; } switch (segmentedControl.selectedSegmentIndex) { case 0: { NSLog(@"点击轻拍"); //定义轻怕手势类 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)]; // tap.numberOfTapsRequired = 1;//得到轻拍次数 [imageView addGestureRecognizer:tap]; } break; case 1: { NSLog(@"点击长按"); //定义长按手势类 UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)]; [imageView addGestureRecognizer:longPress]; } break; case 2: { NSLog(@"点击轻扫"); //定义轻扫手势类 UISwipeGestureRecognizer *swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)]; // swipe.direction = UISwipeGestureRecognizerDirectionLeft|UISwipeGestureRecognizerDirectionRight; [imageView addGestureRecognizer:swipe]; } break; case 3: { NSLog(@"点击旋转"); //定义旋转手势类 UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)]; [imageView addGestureRecognizer:rotation]; } break; case 4: { NSLog(@"点击捏合"); UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)]; [imageView addGestureRecognizer:pinch]; } break; case 5: { NSLog(@"点击拖拽"); UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)]; [imageView addGestureRecognizer:pan]; } break; default: break; } //轻拍方法 -(void)tapAction:(id)sender NSLog(@"轻拍成功"); imageNumber=arc4random()%7+1;//获取随机数1-8 imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]];//生成8个随机图片 //长按方法 -(void)longPressAction:(id)sender NSLog(@"长按方法"); if (imageNumber>6) { imageNumber = -1; } // NSLog(@"%d",imageNumber); imageNumber +=2; imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]]; //定义轻扫方法 -(void)swipeAction:(id)sender UISwipeGestureRecognizer *swipe = (UISwipeGestureRecognizer*)sender; if (swipe.direction == UISwipeGestureRecognizerDirectionRight) { if (imageNumber>1) { imageNumber-=1;//向右滑-1 }else if (imageNumber ==0) { imageNumber =1; } else if (imageNumber ==1) { imageNumber =8; } } imageView.image = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle]pathForResource:[NSString stringWithFormat:@"h%d",imageNumber] ofType:@"jpeg"]]; //定义旋转方法 -(void)rotationAction:(id)sender NSLog(@"旋转"); UIRotationGestureRecognizer *rotation = (UIRotationGestureRecognizer*)sender; imageView.transform = CGAffineTransformMakeRotation(rotation.rotation); //定义捏合方法 -(void)pinchAction:(id)sender UIPinchGestureRecognizer *pinch = (UIPinchGestureRecognizer*)sender;
imageView.transform = CGAffineTransformMakeScale(pinch.scale, pinch.scale);
//定义拖拽方法 -(void)panAction:(id)sender UIPanGestureRecognizer *pan = (UIPanGestureRecognizer*)sender; NSLog(@"拖拽"); //判断 一次 相当于touchBegin if (pan.state == UIGestureRecognizerStateBegan) { startPoint = [pan locationInView:self.view];//得到第一状态的点 } CGPoint newPoint = [pan locationInView:self.view];//得到现在状态的点 CGFloat contextOffX = newPoint.x - startPoint.x;//得到移动后的x 偏移量 CGFloat contextOffY = newPoint.y - startPoint.y;//得到移动后的y 偏移量 imageView.center = CGPointMake(imageView.center.x+contextOffX, imageView.center.y+contextOffY); startPoint = newPoint; //动画方法 -(void)startAction:(id)sender
UIButton *btn = (UIButton*)sender; if (btn.tag ==101) { NSLog(@"动画开始"); NSMutableArray *imageArr = [[NSMutableArray alloc]init]; for (int i=1; i<7; i++) { UIImage *currentImage = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"run%d",i] ofType:@"tiff"]]; [imageArr addObject:currentImage]; } imageView.animationImages = (NSArray*)imageArr; [imageView startAnimating]; }else if (btn.tag ==102) { NSLog(@"动画结束"); [imageView stopAnimating]; } -(void)sliderAction:(id)sender { UISlider *slider = (UISlider*)sender; NSLog(@"%f",slider.value); if (imageView.isAnimating) { imageView.animationDuration = slider.value; [imageView startAnimating]; } } 结果:
|
请发表评论