basicAnimation移动图形
目的:采用CABasicAnimation 点击屏幕上的点来是实现图像的位置移动 并且位置能够不反弹
难点:1 通过动画的KeyPath找到layer的属性
2 通过NSValue将点包装成对象 (下一点toValue的位置 对真正视图的改变)
包装的时候是【NSValue valueWithPoint】
取值的时候是【toValue CGPoint】;
注意点:当图像移动了 其实真正的涂层是没有移动的 要想让它真正的发生改变 一般在动画之后做一些具体的移动位置之类的操作
效果图:
具体实现代码
viewController.m
@interface ViewController () @property(nonatomic,strong)CALayer *subLayer; @end
[super viewDidLoad]; //子层的设置 并加入到跟层中 _subLayer = [[CALayer alloc]init]; _subLayer.backgroundColor = [[UIColor redColor]CGColor]; _subLayer.bounds = CGRectMake(0, 0, 100, 100); _subLayer.position = CGPointMake(100, 100); _subLayer.cornerRadius = 50; [self.view.layer addSublayer:self.subLayer]; //创建一个手势 UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tap:)]; //设置几根手指点 点几次 tap.numberOfTouchesRequired = 1; tap.numberOfTapsRequired = 1; //给view添加手势 [self.view addGestureRecognizer:tap ];
/*
基础动画关注的知识两个点 第一个点不设置的话就是当前点 有属性toValue表示下一点(目的点)
还有就是一定要记得给动画设置代理
*/
实现手势的代码:
-(void)tap:(UITapGestureRecognizer*)sender { /*找到点击点 然后将点击点设置成 动画的toValue*/ CGPoint location = [sender locationInView:self.view]; //创建动画 并设置其属性 CABasicAnimation *basic = [[CABasicAnimation alloc]init]; //动画时间 和 keyPath basic.duration = 3.0f; basic.keyPath = @"position"; //将下一点进行封装后 赋值给basic的下一点 NSValue *mytoValue = [NSValue valueWithCGPoint:location]; basic.toValue = mytoValue; //设置能够呆在最后的位置不动 basic.removedOnCompletion = NO; basic.fillMode = kCAFillModeForwards; //给动画添加代理(很重要) basic.delegate = self; //将动画添加给subLayer [self.subLayer addAnimation:basic forKey:@"basic"]; }
代理动画的方法:
-(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { NSValue *toValue = ((CABasicAnimation*)anim).toValue; self.subLayer.position = [toValue CGPointValue]; }
对上述的代码,有任何疑问,可以在下方留言。
也可以给我发邮件咨询:673658917@qq.com
或者是直接加qq:673658917
转载请注明出处,谢谢合作。
睡觉舒服,那是给死人准备的,加油吧,一年后你会感谢现在的自己的。