手势跟动画和递归调用方法的使用
手势和动画和递归调用方法的使用
第二步:
我们要设置一个BOOL行的参数,来作为 图片是否移动的标准。。。代码如下;
在着,我们还要一个手指触摸的新的当前位置
第三步:我们添加8张图片。。。如下
第五步:我们让画面刚进入的时候,为静止的。。。代码如下:
第六步:我们要获得画面再拖动时的当前位置。。。代码:
第七步:我们写最关键得代码。。我们要做的是写图片的调用方法。。代码:
图片的移动方式如下,是有
第八步:我们要控制当手指离开屏幕,图片的效果是,停止,并切,动画停止。。。。。。
第九部:当我们要放弃触摸的时候,BOOL 为NO,动画停止。。。注意:该方法是在,当手机运行时,突然有电话接入时。。。(好好想想)
序言:
在iPhone的开发中触摸/触碰的知识里,大多博客介绍的都是静态的画面,,今天我们就以动态画面的例子,来给大家介绍一个动态的手势加动画。。再次,我们有可能会学到好多,有的可能说没什么。。。。这是对于一个人的看法,是否仔细如想了,不说了。我们开始手势加动画的效果实例。。。。
正文:
第一:我们要实现的效果是:当我们的手指在手机屏幕上拖动,其中的图片向你手指方向移动。(图片我们是一个 皮卡丘的图片)
对于检测手指是否拖动,我们使用下面该方法
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
第二步:
我们要创建几个实例对象,。。。如下:
//用于显示图片 UIImageView*_ZSJImageView;
我们要设置一个BOOL行的参数,来作为 图片是否移动的标准。。。代码如下;
//移动标志 BOOL okWalk;
在着,我们还要一个手指触摸的新的当前位置
//当前手使的位置 CGPoint NowPoint;
第三步:我们添加8张图片。。。如下
并在工程里创建8个对象并将其加入数组里,代码日下。
//实现动画导入两个图片 UIImage*Image1=[UIImage imageNamed:@"one1"]; UIImage*Image2=[UIImage imageNamed:@"one2"]; UIImage*Image3=[UIImage imageNamed:@"one3"]; UIImage*Image4=[UIImage imageNamed:@"one4"]; UIImage*Image5=[UIImage imageNamed:@"one5"]; UIImage*Image6=[UIImage imageNamed:@"one6"]; UIImage*Image7=[UIImage imageNamed:@"one7"]; UIImage*Image8=[UIImage imageNamed:@"one8"]; NSArray*Images=[[NSArray alloc]initWithObjects:Image1,Image2,Image3,Image4,Image5,Image6,Image7,Image8, nil];第四步:我们将我们一开始声明的一个对象
_ZSJImageView初始化并给其添加动画效果。。。。代码如下:
//创建UiimageView 实例化 _ZSJImageView=[[UIImageView alloc]initWithImage:Image1]; //将动画图片以数值的形式设置到animationImages属性中 _ZSJImageView.animationImages=Images; //每个0.3播放一个 _ZSJImageView.animationDuration=0.3;
第五步:我们让画面刚进入的时候,为静止的。。。代码如下:
-(void)viewDidDisappear:(BOOL)animated{ [super viewDidDisappear:animated]; okWalk=NO; }
第六步:我们要获得画面再拖动时的当前位置。。。代码:
//画面拖动时保持当前的位置 -(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{ NowPoint=[[touches anyObject ]locationInView:self.view]; }
第七步:我们写最关键得代码。。我们要做的是写图片的调用方法。。代码:
//手指在画面上触摸瞬间动画开始,调用图片的移动方法 //okwalk为yes 的时候,图片持续移动 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { okWalk=YES; [_ZSJImageView startAnimating]; NowPoint=[[touches anyObject ]locationInView:self.view]; <span style="color:#FF0000;">[self movefangfa];</span> }
图片的移动方式如下,是有
<span style="color:#FF0000;">[self movefangfa];</span>该方法触发,其中,使用了递归调用的方法 来实现,动画的一直在动。。。。代码
//向手指触摸的方向移动 //okWalk 为yes ,以0.3秒调用地柜方法 -(void)movefangfa { if (!okWalk) { return;//如果为NO,就返回一个NIL,不做任何处理 } static const NSInteger Kmaxinmumstep=8;//每次移动的距离 CGPoint newpoint =_ZSJImageView.center;//图片的中心 //下面的是判断手指触摸的是那个地方,,,如 上,下,左,右 if (Kmaxinmumstep <abs(NowPoint.x-newpoint.x)) { if (NowPoint.x>newpoint.x) { newpoint.x+=Kmaxinmumstep; }else{ newpoint.x-=Kmaxinmumstep; } }else{ newpoint.x=NowPoint.x; } if (Kmaxinmumstep<abs(NowPoint.x-newpoint.y)) { if (NowPoint.y>newpoint.y) { newpoint.y+=Kmaxinmumstep; }else{ newpoint.y-=Kmaxinmumstep; } }else{ newpoint.y=NowPoint.y; } _ZSJImageView.center=newpoint; //此处是使用递归调用的方法 [self performSelector:@selector(movefangfa) withObject:nil afterDelay:0.3]; }
第八步:我们要控制当手指离开屏幕,图片的效果是,停止,并切,动画停止。。。。。。
//手指脱离画面的时候,动画停止,okWalk为no -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{ okWalk=NO; [_ZSJImageView stopAnimating]; }
第九部:当我们要放弃触摸的时候,BOOL 为NO,动画停止。。。注意:该方法是在,当手机运行时,突然有电话接入时。。。(好好想想)
//放弃触摸状态后,动画静止 okwalk 为no -(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event{ okWalk=NO; [_ZSJImageView stopAnimating]; }
效果展示:
友情快递:
touch 的几个触摸方法的调用时间细写
方法 | 调用时机 |
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event | 该方法是在手指开始触摸手机屏幕时调用 |
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event | 该方法是在手指触摸完,离手机屏幕时开始调用的 |
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event | 该方法在手指触摸手机屏幕后,并且移动的时候调用,在方法-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event之后调用 |
-(void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event | 该方法在手机睡眠,或者有电话接入时调用 |