转IOS的处理touch事件处理(依照手指的移动移动一个圆,开发环境用的ios7,storyboard)-- 不错

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转IOS的处理touch事件处理(依照手指的移动移动一个圆,开发环境用的ios7,storyboard)-- 不错相关的知识,希望对你有一定的参考价值。

原文网址:http://blog.csdn.net/baidu_nod/article/details/32934565

先看下页面的效果图:

技术分享

首先定义这个ball它有两个属性和两个方法:

 

@property(nonatomicCGPoint location;

@property(nonatomicCGFloat length;

-(CGPoint) getCenterPoint;

-(BOOL) isInTheBall:(CGPoint) point;

 

方法体是:

 

[objc] view plain copy
 
 技术分享技术分享
  1. //找出ball的中心点  
  2. -(CGPoint) getCenterPoint {  
  3.       
  4.     return CGPointMake((self.location.x+self.length/2), self.location.y+self.length/2);  
  5. };  
  6.   
  7.   
  8. //看点point是不是在ball的范围内  
  9. -(BOOL) isInTheBall:(CGPoint) point{  
  10.     CGPoint center = self.getCenterPoint;  
  11.     float t = (point.x - center.x) * (point.x - center.x);  
  12.     float y = (point.y - center.y) * (point.y - center.y);  
  13.       
  14.     float k = sqrtf(t+y);  
  15.     if (k < self.length/2) {  
  16.         return YES;  
  17.     }else {  
  18.         return NO;  
  19.     }  
  20. };  


定义BallView继承UIView

 

 

[objc] view plain copy
 
 技术分享技术分享
  1. @property(nonatomic) Ball* ball;  
  2. @property(nonatomic) BOOL isTouch;  //表示手指在ball的范围内移动  
  3. @property(nonatomic) CGPoint prePoint;  //手指在进入move事件之前的那个点  
  4. - (id)initWithBall:(CGRect)frame aBall:(Ball*) ball; //初始化方法  


初始化函数为:

 

 

[objc] view plain copy
 
 技术分享技术分享
  1. - (id)initWithBall:(CGRect)frame aBall:(Ball*) ball  
  2. {  
  3.     self = [super initWithFrame:frame];  
  4.     if (self) {  
  5.         // Initialization code  
  6.         self.ball = ball;  
  7.     }  
  8.     return self;  
  9. }  
  10.   
  11. -(void)awakeFromNib{  
  12.     self.backgroundColor = nil;  
  13.     self.opaque = NO;  
  14. }  
  15.   
  16. // Only override drawRect: if you perform custom drawing.  
  17. // An empty implementation adversely affects performance during animation.  
  18. - (void)drawRect:(CGRect)rect  
  19. {  
  20.     // Drawing code  
  21.     [super drawRect:rect];  
  22.       
  23.     CGContextRef contextRef = UIGraphicsGetCurrentContext();  
  24.     [[UIColor whiteColor] set];  
  25.       
  26.     //rect是整个view  
  27.     CGContextFillRect(contextRef, rect);  
  28.       
  29.     [[UIColor redColor] set];  
  30.       
  31.     //CGContextAddEllipseInRect不会填充圆圈的内部  
  32.    // CGContextAddEllipseInRect(contextRef, CGRectMake(200.0f, 200.0f, 50.0f, 50.0f));  
  33.     CGContextFillEllipseInRect(contextRef, CGRectMake(self.ball.location.x,self.ball.location.y,self.ball.length,self.ball.length));  
  34.       
  35.     CGContextStrokePath(contextRef);  
  36. }  


我们在viewController里初始化只要:

 

 

[objc] view plain copy
 
 技术分享技术分享
  1. -(void) loadView{  
  2.     [super loadView];  
  3.   
  4.     Ball* ball = [[Ball alloc] init];  
  5.     ball.location = CGPointMake(200.0f, 100.0f);  
  6.     ball.length = 80.0f;  
  7.     BallView* view = [[BallView alloc] initWithBall:[UIScreen mainScreen].bounds aBall:ball];  
  8.     [self.view addSubview:view];  
  9.       
  10.       
  11. }  


然后在下面在BallView中进行事件处理

 

 

[objc] view plain copy
 
 技术分享技术分享
  1. -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{  
  2.     NSLog(@"touchesBegan");  
  3.     //下面两句知道手指在屏幕上的点的信息  
  4.     UITouch* touch = [touches anyObject];  
  5.     CGPoint point = [touch locationInView:self];  
  6.       
  7.     if ([self.ball isInTheBall:point]) {  
  8.         self.isTouch = YES;  
  9.         self.prePoint = point;  
  10.     }else{  
  11.         self.isTouch = NO;  
  12.     }  
  13.     NSLog(@"x=%f,y=%f",point.x,point.y);  
  14. }  
  15.   
  16. -(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{  
  17.      NSLog(@"touchesMoved");  
  18.     if (self.isTouch) {  
  19.           
  20.         CGRect preRect = CGRectMake(self.ball.location.x, self.ball.location.y, self.ball.length, self.ball.length);  
  21.         //先用之前的location绘制一遍  
  22.         [self setNeedsDisplayInRect:preRect];  
  23.           
  24.         UITouch* touch = [touches anyObject];  
  25.         CGPoint point = [touch locationInView:self];  
  26.           
  27.         //cx和cy是手指的偏移量,用他们可以计算出新的location  
  28.         float cx = point.x - self.prePoint.x;  
  29.         float cy = point.y - self.prePoint.y;  
  30.           
  31.         self.ball.location = CGPointMake(self.ball.location.x + cx, self.ball.location.y+cy);  
  32.         CGRect newRect = CGRectMake(self.ball.location.x, self.ball.location.y, self.ball.length, self.ball.length);  
  33.         //用新的location绘制一遍  
  34.         [self setNeedsDisplayInRect:newRect];  
  35.         self.prePoint = point;  
  36.     }  
  37. }  
  38.   
  39.   
  40. -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{  
  41.     NSLog(@"touchesEnded");  
  42.     self.isTouch = NO;  
  43. }  



 

代码可以在http://download.csdn.net/detail/baidu_nod/7533317下载

 

ios-day17-01(UIView的拖拽(跟随手指移动))

原文网址:http://www.ithao123.cn/content-7926067.html

源码下载地址:http://download.csdn.net/detail/liu537192/8544289

 

以上是关于转IOS的处理touch事件处理(依照手指的移动移动一个圆,开发环境用的ios7,storyboard)-- 不错的主要内容,如果未能解决你的问题,请参考以下文章

移动端手指滑动事件

touch移动触屏滑动事件

JS触摸事件

H5案例分享:移动端滑屏 touch事件

H5案例分享:移动端滑屏 touch事件

JS事件监听手机屏幕触摸事件 Touch