您的位置:首页 > 移动开发 > IOS开发

ios实现CALayer层的动画点击

2012-10-31 17:08 316 查看


from:http://wangjun.easymorse.com/?p=1267


利用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/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: