大佬教程收集整理的这篇文章主要介绍了iphone开发:关于触屏事件的一些操作,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
//轻击: //需要在你的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); //给一个几何方法集的接口方法: //CGPointUtils.h 头文件 #import <CoreGraphics/CoreGraphics.h> CGFloat distancebetweenPoints (CGPoint first,CGPoint second); CGFloat anglebetweenPoints(CGPoint first,CGPoint second); CGFloat anglebetweenLines(CGPoint line1Start,CGPoint lin2End); //.c文件 CGPointUtils.c #include ”CGPointUtils.h” #include <math.h> #define pi 3.14159265358979323846 #define degreesToRadian(X) (pi * x / 180.0) #define radiansTodegrees(X) (180.0 * x / pi) CGFloat distancebetweenPoints (CGPoint first,CGPoint second) { CGFloat deltaX = second.x - first.x; CGFloat deltaY = second.y - first.y; return sqrt(deltaX*deltaX + deltaY*deltaY ); }; CGFloat anglebetweenPoints(CGPoint first,CGPoint second) { CGFloat height = second.y - first.y; CGFloat width = first.x - second.x; CGFloat rads = atan(height/width); returnradiansTodegrees(rads); //degs = degrees(atan((top – bottom)/(right – left))) } CGFloat anglebetweenLines(CGPoint line1Start,CGPoint line2End) { CGFloat a = line1End.x - line1Start.x; CGFloat b = line1End.y - line1Start.y; CGFloat c = line2End.x - line2Start.x; CGFloat d = line2End.y - line2Start.y; CGFloat rads = acos(((a*C) + (b*d)) / ((sqrt(a*a + b*b)) * (sqrt(c*c + d*d)))); returnradiansTodegrees(rads); }
以上是大佬教程为你收集整理的iphone开发:关于触屏事件的一些操作全部内容,希望文章能够帮你解决iphone开发:关于触屏事件的一些操作所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。