美文网首页animation
iOS沿一个贝塞尔曲线对图层做动画

iOS沿一个贝塞尔曲线对图层做动画

作者: Desert_Eagle | 来源:发表于2018-02-07 14:53 被阅读0次
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        CGFloat bezierPathH = self.view.bounds.size.height - 200;
        UIBezierPath *bezierPath = [[UIBezierPath alloc] init];
        [bezierPath moveToPoint:CGPointMake(self.view.bounds.size.width / 2, 100)];
        
        // 三次贝塞尔曲线
        [bezierPath addCurveToPoint:CGPointMake(self.view.bounds.size.width / 2, self.view.bounds.size.height - 100) controlPoint1:CGPointMake(self.view.bounds.size.width / 4 * 3, bezierPathH / 4 + 100) controlPoint2:CGPointMake(self.view.bounds.size.width / 4, bezierPathH / 4 * 3 + 100)];
        CAShapeLayer *pathLayer = [CAShapeLayer layer];
        pathLayer.path = bezierPath.CGPath;
        pathLayer.fillColor = [UIColor clearColor].CGColor;
        pathLayer.strokeColor = [UIColor redColor].CGColor;
        pathLayer.lineWidth = 3.0f;
        [self.view.layer addSublayer:pathLayer];
        
        CALayer *shipLayer = [CALayer layer];
        shipLayer.frame = CGRectMake(0, 0, 64, 64);
        shipLayer.position = CGPointMake(self.view.bounds.size.width / 2, 100);
        shipLayer.contents = (__bridge id)[UIImage imageNamed:@"ship"].CGImage;
        [self.view.layer addSublayer:shipLayer];
        
        CAKeyframeAnimation *animation = [CAKeyframeAnimation animation];
        animation.keyPath = @"position";
        animation.path = bezierPath.CGPath;
        animation.duration = 4.0;
        animation.rotationMode = kCAAnimationRotateAuto;
        [shipLayer addAnimation:animation forKey:nil];   
    }
    

    相关文章

      网友评论

        本文标题:iOS沿一个贝塞尔曲线对图层做动画

        本文链接:https://www.haomeiwen.com/subject/nwzozxtx.html