繁体   English   中英

CALayer动画从一个点移动到另一点

[英]CALayer animation to move from one point to another

我正在尝试在附加到目标C ios中的UIView的根层上设置子层的动画。 我已经尝试了这里提供的许多答案,但是子层是固定的,根本不改变其位置。

我尝试了以下方法对其进行动画处理:

    -(void)moveLayer:(CALayer*)layer to:(CGPoint)point with:(CGRect)bounds
    {
        CGMutablePathRef thePath = CGPathCreateMutable();
        CGPathMoveToPoint(thePath,NULL,74.0,74.0);


        CAKeyframeAnimation * theAnimation;

        // Create the animation object, specifying the position property as the key path.
        theAnimation=[CAKeyframeAnimation animationWithKeyPath:@"position"];
        theAnimation.path=thePath;
        theAnimation.duration=5.0;

        // Add the animation to the layer.
        [layer addAnimation:theAnimation forKey:@"position"];

    }

并使用

`
                    [featureLayer setFrame:oldRect];

                    CGRect oldBounds = oldRect;
                    CGRect newBounds = faceRect;

                    CABasicAnimation* revealAnimation = [CABasicAnimation animationWithKeyPath:@"bounds"];
                    revealAnimation.fromValue = [NSValue valueWithCGRect:oldBounds];
                    revealAnimation.toValue = [NSValue valueWithCGRect:newBounds];
                    revealAnimation.duration = 3.0;

                    // Update the bounds so the layer doesn't snap back when the animation completes.
                    featureLayer.bounds = newBounds;

                    [featureLayer addAnimation:revealAnimation forKey:@"revealAnimation"];


                    [self.previewLayer setMask:featureLayer];
`

如果有人可以帮助我,那就太好了。 提前致谢。

编辑1

只是为了确保这是根层上的蒙版图像,我要设置蒙版动画以使其从一个位置移动到另一个位置,但它保持静止。

您可以尝试以下代码。

- (void)viewDidLoad {
    [super viewDidLoad];

    CAShapeLayer *shape = [CAShapeLayer new];
    shape.path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 50, 50)].CGPath;
    shape.fillColor = [UIColor redColor].CGColor;
    shape.position = CGPointMake(self.view.bounds.size.width / 2 - 25, 100);
    [self.view.layer addSublayer:shape];

    [self performSelector:@selector(doAnimation:) withObject:shape afterDelay:1];
    //[self performSelector:@selector(doKeyFrameAnimation:) withObject:shape afterDelay:1];
}

- (void)doAnimation:(CALayer*)layer {
    NSLog(@"%@",layer);

    CABasicAnimation *anim = [CABasicAnimation new];
    anim.duration = 2;
    anim.keyPath = @"position.y";
    anim.fromValue = @(layer.position.y);
    anim.toValue = @300;

    [layer addAnimation:anim forKey:@"move_down"]; 
}

// the KeyFrameAnimation way
- (void)doKeyFrameAnimation:(CALayer*)layer {

    UIBezierPath *path = [UIBezierPath new];
    [path moveToPoint:layer.position];
    [path addLineToPoint:CGPointMake(layer.position.x, 300)];

    CAKeyframeAnimation *anim = [CAKeyframeAnimation new];
    anim.duration = 2;
    anim.keyPath = @"position";
    anim.path = path.CGPath;

    [layer addAnimation:anim forKey:@"move_down_by_keyframe"];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM