实现图片抛物线的效果

//其中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];

   

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Cesium中实现抛物线效果,可以使用贝塞尔曲线来模拟抛物线的路径。以下是实现抛物线效果的步骤: 1. 使用entity方式创建一个新的实体对象。 2. 设置实体的position为抛物线的起始点。 3. 使用polyline实例化一个新的PolylineGraphics对象。 4. 将PolylineGraphics对象的positions属性设置为一个包含抛物线路径上的点的数组。 5. 设置PolylineGraphics对象的material为所需的抛物线材质。 6. 将PolylineGraphics对象添加到viewer中。 下面是一个示例代码,展示了如何在Cesium中实现抛物线效果: ```javascript // 创建起始点和终点 var start = Cesium.Cartesian3.fromDegrees(113.9236839, 22.528061); var end = Cesium.Cartesian3.fromDegrees(113.925, 22.53); // 计算控制点 var controlPoint = new Cesium.Cartesian3( (start.x + end.x) / 2, (start.y + end.y) / 2, (start.z + end.z) / 2 + 1000 ); // 计算抛物线路径上的点 var numberOfPoints = 100; var positions = []; for (var i = 0; i <= numberOfPoints; i++) { var t = i / numberOfPoints; var x = (1 - t) * (1 - t) * start.x + 2 * (1 - t) * t * controlPoint.x + t * t * end.x; var y = (1 - t) * (1 - t) * start.y + 2 * (1 - t) * t * controlPoint.y + t * t * end.y; var z = (1 - t) * (1 - t) * start.z + 2 * (1 - t) * t * controlPoint.z + t * t * end.z; positions.push(new Cesium.Cartesian3(x, y, z)); } // 创建实体对象 viewer.entities.add({ polyline: { positions: positions, width: 10, material: new Cesium.PolylineGlowMaterialProperty({ glowPower: 0.5, color: Cesium.Color.YELLOW }) } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值