关于触屏事件的一些操作
来源:互联网 发布:sizeof结构体数组 编辑:程序博客网 时间:2024/06/16 03:09
- //需要在你的ViewController里重写几个方法:
- //开始触摸的方法
- - (void)touchesBegan:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- messageLabel.text = @”Touches Began”;
- [self updateLabelsFromTouches:touches];
- }
- //触摸取消的方法
- - (void)touchesCancelled:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- messageLabel.text = @”Touches Cancelled”;
- [self updateLabelsFromTouches:touches];
- }
- //触摸结束的方法
- - (void)touchesEnded:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- messageLabel.text = @”Touches Stopped.”;
- [self updateLabelsFromTouches:touches];
- }
- //触摸移动的方法
- - (void)touchesMoved:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- messageLabel.text = @”Drag Detected”;
- [self updateLabelsFromTouches:touches];
- }
- //触摸-清扫:
- //开始触摸
- - (void)touchesBegan:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject];
- gestureStartPoint = [touch locationInView:self.view];
- }
- //kMinimumGestureLength 最小移动长度 kMaximumVariance最大偏移长度
- - (void)touchesMoved:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject];
- CGPoint currentPosition = [touchlocationInView:self.view];
- CGFloat deltaX = fabsf(gestureStartPoint.x - currentPosition.x);
- CGFloat deltaY = fabsf(gestureStartPoint.y - currentPosition.y);
- if(deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance)
- {
- label.text = @”Horizontal swipe detected”;
- [self performSelector:@selector(eraseText)
- withObject:nilafterDelay:2];
- }
- else if (deltaY >= kMinimumGestureLength &&
- deltaX <= kMaximumVariance)
- {
- label.text = @”Vertical swipe detected”;
- [selfperformSelector:@selector(eraseText)withObject:nilafterDelay:2];
- }
- }
- //多次轻击判断,比如双击,三击等:
- //单击动作响应事件
- - (void)singleTap
- {
- singleLabel.text = @”Single Tap Detected”;
- [selfperformSelector:@selector(eraseMe:)
- withObject:singleLabel
- afterDelay:1.6f];//1.6秒后执行eraseMe方法
- }
- //双击
- - (void)doubleTap
- {
- doubleLabel.text = @”Double Tap Detected”;
- [selfperformSelector:@selector(eraseMe:)
- withObject:doubleLabel
- afterDelay:1.6f];
- }
- //三击
- - (void)tripleTap
- {
- tripleLabel.text = @”Triple Tap Detected”;
- [selfperformSelector:@selector(eraseMe:)
- withObject:tripleLabel
- afterDelay:1.6f];
- }
- //四击
- - (void)quadrupleTap
- {
- quadrupleLabel.text = @”Quadruple Tap Detected”;
- [selfperformSelector:@selector(eraseMe:)
- withObject:quadrupleLabel
- afterDelay:1.6f];
- }
- - (void)eraseMe:(UITextField *)textField
- {
- textField.text = @"";
- }
- - (void)touchesBegan:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject]; //实例一个uitouch
- NSUInteger tapCount = [touch tapCount]; //计算touch的tapCount次数
- switch (tapCount)
- {
- case 1:
- [selfsingleTap];
- break;
- case 2:
- [selfdoubleTap];
- break;
- case 3:
- [selftripleTap];
- break;
- case 4:
- [selfquadrupleTap];
- break;
- default:
- break;
- }
- }
- //[self performSelector:@selector(eraseMe:)withObject:singleLabel afterDelay:1.6f]中
- //performSelector:@selector(eraseMe:)withObject:singleLabel afterDelay:1.6f方法为将来afterDelay1.6秒之后调用eraseMe方法
- //同样的[NSObect cancelPreviousPerformSelector:withObject :afterDelay:];
- //方法为取消这些将来的调用
- //捏合操作:
- - (void)eraseLabel
- { //清空lable
- label.text = @"";
- }
- //开始触碰
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- if([touches count] ==2)
- { //检测是否为两个手指触点
- NSArray *twoTouches = [touchesallObjects];
- UITouch *first = [twoTouchesobjectAtIndex:0];
- UITouch *second = [twoTouchesobjectAtIndex:1];
- initialDistance = distanceBetweenPoints(
- [first locationInView:self.view], [secondlocationInView:self.view]);
- }
- }
- //移动手指
- - (void)touchesMoved:(NSSet *)touches
- withEvent:(UIEvent *)event
- {
- if ([touches count] == 2)
- {
- NSArray *twoTouches = [touchesallObjects];
- UITouch *first = [twoTouchesobjectAtIndex:0];
- UITouch *second = [twoTouchesobjectAtIndex:1];
- CGFloat currentDistance =distanceBetweenPoints(
- [first locationInView:self.view],[secondlocationInView:self.view]);
- if (initialDistance ==0)
- {
- initialDistance = currentDistance;//根据移动前后的坐标距离差检测是捏合的手势还是打开的手势
- }
- else if (currentDistance - initialDistance > kMinimumPinchDelta)
- { //检测是否大于最小移动值kMinimumPinchDelta
- label.text = @”Outward Pinch”;
- [selfperformSelector:@selector(eraseLabel)
- withObject:nil
- afterDelay:1.6f];
- }
- else if (initialDistance - currentDistance > kMinimumPinchDelta)
- {
- label.text = @”Inward Pinch”;
- [selfperformSelector:@selector(eraseLabel)
- withObject:nil
- afterDelay:1.6f];
- }
- }
- }
- //触碰结束
- - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
- {
- initialDistance = 0;
- }
- //自定义手势“√”:
- - (void)eraseLabel
- {
- label.text = @"";
- }
- - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject];
- CGPoint point = [touch locationInView:self.view];
- lastPreviousPoint = point;
- lastCurrentPoint = point;
- lineLengthSoFar = 0.0f;
- }
- - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
- {
- UITouch *touch = [touches anyObject];
- CGPoint previousPoint = [touchpreviousLocationInView:self.view];
- CGPoint currentPoint = [touch locationInView:self.view];
- //计算两条线之间的角度
- CGFloat angle = angleBetweenLines(lastPreviousPoint,
- lastCurrentPoint,previousPoint,currentPoint);
- //检测手势被承认的条件 kMinimumCheckMarkAngle最小角度
- //kMaximumCheckMarkAngle最大角度
- //kMinimumCheckMarkLength画线最小长度
- if (angle >= kMinimumCheckMarkAngle &&
- angle <= kMaximumCheckMarkAngle &&
- lineLengthSoFar > kMinimumCheckMarkLength)
- {
- label.text = @”Checkmark”;
- [selfperformSelector:@selector(eraseLabel)
- withObject:nil
- afterDelay:1.6];
- }
- //lineLengthSoFar,lastPreviousPoint,lastCurrentPoint重新赋值
- lineLengthSoFar += distanceBetweenPoints(previousPoint, currentPoint);
- lastPreviousPoint = previousPoint;
- lastCurrentPoint = currentPoint;
- }
- //这里用到一个判断两条直线的角度的方法
- //angleBetweenLines(CGPoint line1Start, CGPoint line1End, CGPoint line2Start, CGPointlin2End);
0 0
- 关于触屏事件的一些操作
- iphone开发:关于触屏事件的一些操作
- iphone开发:关于触屏事件的一些操作
- 关于Onclick事件,comfirm方法等的一些操作
- 2.关于Cocos2d-x触屏事件的一些记录。
- 一些关于字符串的操作
- 一些关于字符串的操作
- 一些关于日期的操作
- 关于SQL 的一些操作
- 关于datagridview的一些操作
- 关于数据库的一些操作
- 关于集合的一些操作
- 关于NumberPicker的一些操作
- 关于表格的一些操作
- 关于树的一些操作
- 关于List的一些操作
- 关于数组的一些操作
- 关于路径的一些操作
- 学习单片机心得
- 原生JDBC的缺点
- SecureCRT中常用linux命令 和一些cp命令
- AIDL的使用
- Android长按imageview把图片保存到本地
- 关于触屏事件的一些操作
- Nginx反向代理和负载均衡
- swift中对AFNetWorking的简单封装
- Dagger2 的简单使用 (一)
- EditText点击在ListView中失去焦点
- Javascript中, event 的 target 与 currentTarget 的区别
- 解决从git克隆代码到window有关于dos格式问题
- 跨平台应用开发相关
- dns yum 安装