IOS实例 CALayer层动画点击是本文要介绍的内容,利用CALayer可以实现复杂的动画效果,同时CALayer在运动过程中,需要点击CALayer,同时能够监控到点击的对象。下面是实现的效果和过程。如图所示:
实现过程:
- #import "AnimView.h"
- @implementation AnimView
- - (id)initWithFrame:(CGRect)frame {
- self = [super initWithFrame:frame];
- if (self) {
- [self setBackgroundColor:[UIColor clearColor]];
- UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(touchesPoint:)];
- [self addGestureRecognizer:tapGesture];
- [tapGesture release];
- }
- return self;
- }
- -(void) drawRect:(CGRect)rect
- {
- [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(stratAnim:) userInfo:nil repeats: NO];
- }
- -(void)stratAnim:(id)sender
- {
- //添加层
- layer2 = [CALayer layer];
- [layer2 setBackgroundColor:[[UIColor redColor] CGColor]];
- layer2.bounds = CGRectMake(0, 0, 60,40);//层设置为图片大小
- layer2.position = CGPointMake(25,25);//层在view的位置
- [self.layer addSublayer:layer2];//将层加到当前View的默认layer下
- [self startFlyStarAnimation];
- }
- -(void) startFlyStarAnimation
- {
- //运动轨迹
- CGMutablePathRef thePath=CGPathCreateMutable();
- CGPathMoveToPoint(thePath,NULL,self.center.x,self.center.y);
- CGPathAddLineToPoint(thePath, NULL, self.center.x, self.center.y-45);
- CGPathAddLineToPoint(thePath, NULL, self.center.x, self.center.y+45);
- CGPathAddLineToPoint(thePath, NULL, self.center.x, self.center.y);
- //添加动画
- CAKeyframeAnimation * animation;
- animation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
- animation.path=thePath;
- animation.duration=3.0;
- animation.repeatCount=2;
- CFRelease(thePath);
- [animation setDelegate:self];
- //[self animationDidStop:animation finished:YES];
- [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
- [layer2 addAnimation:animation forKey:kCATransition];
- }
- //动画停止
- -(void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
- {
- NSLog(@">>>>动画停止了");
- }
- //touch事件
- -(void)touchesPoint:(UITapGestureRecognizer *)gestureRecognizer
- {
- CGPoint locationInView = [gestureRecognizer locationInView:self];
- //presentationLayer layer的动画层
- CALayer *layer1=[[layer2 presentationLayer] hitTest:locationInView];
- if (layer1!=nil) {
- NSLog(@"点击了运动的layer");
- }
- }
- - (void)dealloc {
- [super dealloc];
- }
- @end
其中presentationLayer是CALayer动画的位置层。
源代码:http://easymorse-iphone.googlecode.com/svn/trunk/iphone.presentlayer/
小结:IOS实例 CALayer层动画点击的内容介绍完了,希望本文对你有所帮助!