现在的位置: 首页 > 综合 > 正文

实现图片抛物线的效果

2014年03月03日 ⁄ 综合 ⁄ 共 2668字 ⁄ 字号 评论关闭

//其中headImageView是实现动画的完后保存图片的位置

-(void)TransAnimation:(UIImage *)image

{

#define PI 3.14159265

   

    CGRect  headImageOrgRect = headImageView.frame;

    CGSize size = image.size;

   

   

    CGFloat midX = headImageView.center.x;

    CGFloat midY = headImageView.center.y;

   

    [headImageView  setFrame:CGRectMake(0, 0, size.width, size.height)];

    CALayer *TransLayer = headImageView.layer;

   

    // Create a keyframe animation to follow a path back to the center

    CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"position"];

    animation.removedOnCompletion = NO;

   

    CGFloat animationDuration = 0.3;

   

   

    // Create the path for the bounces

    CGMutablePathRef thePath = CGPathCreateMutable();

   

   

    CGFloat originalOffsetX = headImageView.center.x - midX;

    CGFloat originalOffsetY = headImageView.center.y - midY;

   

    BOOL stopAnimation = NO;

   

    CGPathMoveToPoint(thePath, NULL, headImageView.center.x, headImageView.center.y);

    float  xPosition ;

    float  yPosition ;

    float   angle = 0.0f;

   

   

    while (stopAnimation != YES) {

       

        xPosition = headImageView.center.x - originalOffsetX*sin(angle*(PI/180));

        yPosition = headImageView.center.y - originalOffsetY*sin(angle*(PI/180));

        CGPathAddLineToPoint(thePath, NULL, xPosition, yPosition);

       

       

        angle = angle +1.0f;   

       

        if(angle == 90.0f||angle > 90.0f)  

            stopAnimation = YES;

    }

   

    [headImageView  setCenter:CGPointMake(midX,midY)];

   

    animation.path = thePath;

    CGPathRelease(thePath);

    animation.duration = animationDuration;

   

   

    // Create a basic animation

    CABasicAnimation *shrinkAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];

   

    shrinkAnimation.removedOnCompletion = YES;

    shrinkAnimation.duration = animationDuration;

    shrinkAnimation.fromValue = [NSValue valueWithCGRect:headImageView.frame];

    shrinkAnimation.byValue = [NSValue valueWithCATransform3D:CATransform3DIdentity];

    shrinkAnimation.toValue = [NSValue valueWithCGRect:headImageOrgRect];

   

   

    // Create an animation group to combine the keyframe and basic animations

    CAAnimationGroup *theGroup = [CAAnimationGroup animation];

   

    // Set self as the delegate to allow for a callback to reenable user interaction

    theGroup.delegate = self;

    theGroup.duration = animationDuration;

    theGroup.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];

   

    theGroup.animations = [NSArray arrayWithObjects:animation, shrinkAnimation, nil];

   

   

    // Add the animation group to the layer

    [TransLayer addAnimation:theGroup forKey:@"animatePlacardViewToCenter"];

   

    // Set the  view's center and transformation to the original values in preparation for the end of the animation

   

    headImageView.transform = CGAffineTransformIdentity;

    [headImageView   setFrame:headImageOrgRect];

   

}

 

 

抱歉!评论已关闭.