iOS贝塞尔曲线画哆啦A梦的代码实例

2020-01-20 23:57:39刘景俊

5、画左手部分


 //左手
  CAShapeLayer *leftHandLayer = [CAShapeLayer layer];
  UIBezierPath *leftHandPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX-95, arcCenterY+110) radius:20 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:leftHandLayer path:leftHandPath ];

  //左胳膊
  CGFloat distanceXToArcCenter = 80*cos(M_PI_2*4/9);
  CGFloat distanceYToArcCenter = 80*sin(M_PI_2*4/9);
  CAShapeLayer *leftArmLayer = [CAShapeLayer layer];
  UIBezierPath *leftArmPath = [UIBezierPath bezierPath];
  [leftArmPath moveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+distanceYToArcCenter)];
  [leftArmPath addLineToPoint:CGPointMake(arcCenterX-95, arcCenterY+90)];
  [leftArmPath addQuadCurveToPoint:CGPointMake(arcCenterX-75, arcCenterY+110) controlPoint:CGPointMake(arcCenterX-92, arcCenterY+107)];
  [leftArmPath addLineToPoint:CGPointMake(arcCenterX-distanceXToArcCenter+1.5, arcCenterY+95)];
  [self setLayer:leftArmLayer path:leftArmPath ];

6、画身体部分


//围巾
  CAShapeLayer *mufflerLayer = [CAShapeLayer layer];
  UIBezierPath *mufflerPath = [UIBezierPath bezierPath];
  [mufflerPath moveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+distanceYToArcCenter)];
  [mufflerPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter, arcCenterY+distanceYToArcCenter) controlPoint:CGPointMake(arcCenterX, arcCenterY+109)];
  [mufflerPath addLineToPoint:CGPointMake(arcCenterX+distanceXToArcCenter+2, arcCenterY+distanceYToArcCenter+7)];
  [mufflerPath addQuadCurveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter-4, arcCenterY+distanceYToArcCenter+5) controlPoint:CGPointMake(arcCenterX, arcCenterY+115)];
  [mufflerPath addLineToPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+distanceYToArcCenter)];
  [self setLayer:mufflerLayer path:mufflerPath ];

  //身体
  CAShapeLayer *bodyLayer = [CAShapeLayer layer];
  UIBezierPath *bodyPath = [UIBezierPath bezierPath];
  [bodyPath moveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+distanceYToArcCenter+7)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter+5, arcCenterY+150) controlPoint:CGPointMake(arcCenterX-distanceXToArcCenter+2, arcCenterY+140)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter+3, arcCenterY+170) controlPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+160)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX-8, arcCenterY+170) controlPoint:CGPointMake(arcCenterX-(distanceXToArcCenter+5)/2, arcCenterY+175)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX+8, arcCenterY+170) controlPoint:CGPointMake(arcCenterX, arcCenterY+155)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter-3, arcCenterY+170) controlPoint:CGPointMake(arcCenterX+(distanceXToArcCenter+5)/2, arcCenterY+175)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter-5, arcCenterY+150) controlPoint:CGPointMake(arcCenterX+distanceXToArcCenter-2, arcCenterY+160)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter, arcCenterY+distanceYToArcCenter+8) controlPoint:CGPointMake(arcCenterX+distanceXToArcCenter-2, arcCenterY+140)];
  [bodyPath addQuadCurveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter, arcCenterY+distanceYToArcCenter+7) controlPoint:CGPointMake(arcCenterX, arcCenterY+115)];
  [self setLayer:bodyLayer path:bodyPath ];


  //左脚
  CAShapeLayer *leftFootLayer = [CAShapeLayer layer];
  UIBezierPath *leftFootPath = [UIBezierPath bezierPath];
  [leftFootPath moveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter+3, arcCenterY+170)];
  [leftFootPath addQuadCurveToPoint:CGPointMake(arcCenterX-distanceXToArcCenter+3, arcCenterY+195) controlPoint:CGPointMake(arcCenterX-distanceXToArcCenter-20, arcCenterY+185)];
  [leftFootPath addQuadCurveToPoint:CGPointMake(arcCenterX-13, arcCenterY+195) controlPoint:CGPointMake(arcCenterX-(distanceXToArcCenter+10)/2, arcCenterY+200)];
  [leftFootPath addQuadCurveToPoint:CGPointMake(arcCenterX-10, arcCenterY+170) controlPoint:CGPointMake(arcCenterX+8, arcCenterY+187)];
  [self setLayer:leftFootLayer path:leftFootPath ];


  //右脚
  CAShapeLayer *rightFootLayer = [CAShapeLayer layer];
  UIBezierPath *rightFootPath = [UIBezierPath bezierPath];
  [rightFootPath moveToPoint:CGPointMake(arcCenterX+10, arcCenterY+170)];
  [rightFootPath addQuadCurveToPoint:CGPointMake(arcCenterX+15, arcCenterY+195) controlPoint:CGPointMake(arcCenterX-12, arcCenterY+185)];
  [rightFootPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter-5, arcCenterY+195) controlPoint:CGPointMake(arcCenterX+(distanceXToArcCenter+20)/2, arcCenterY+200)];
  [rightFootPath addQuadCurveToPoint:CGPointMake(arcCenterX+distanceXToArcCenter-3, arcCenterY+170) controlPoint:CGPointMake(arcCenterX+distanceXToArcCenter+18, arcCenterY+185)];
  [self setLayer:rightFootLayer path:rightFootPath];

  //肚子
  CAShapeLayer *bellyLayer = [CAShapeLayer layer];
  UIBezierPath *bellyPath = [UIBezierPath bezierPath];
  [bellyPath moveToPoint:CGPointMake(arcCenterX-30, arcCenterY+80)];
  [bellyPath addCurveToPoint:CGPointMake(arcCenterX-30, arcCenterY+150) controlPoint1:CGPointMake(arcCenterX-65, arcCenterY+95) controlPoint2:CGPointMake(arcCenterX-60, arcCenterY+140)];
  [bellyPath addQuadCurveToPoint:CGPointMake(arcCenterX+30, arcCenterY+150) controlPoint:CGPointMake(arcCenterX, arcCenterY+160)];
  [bellyPath addCurveToPoint:CGPointMake(arcCenterX+30, arcCenterY+80) controlPoint1:CGPointMake(arcCenterX+60, arcCenterY+140) controlPoint2:CGPointMake(arcCenterX+65, arcCenterY+95)];
  [bellyPath addQuadCurveToPoint:CGPointMake(arcCenterX-30, arcCenterY+80) controlPoint:CGPointMake(arcCenterX, arcCenterY+92)];
  [self setLayer:bellyLayer path:bellyPath ];

  //铃铛
  CAShapeLayer *bellLayer = [CAShapeLayer layer];
  UIBezierPath *bellPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX, arcCenterY+97) radius:15 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:bellLayer path:bellPath ];


  //铃铛上的线
  CAShapeLayer *bellLineLayer = [CAShapeLayer layer];
  UIBezierPath *BellLinePath = [UIBezierPath bezierPath];
  [BellLinePath moveToPoint:CGPointMake(arcCenterX-(sqrt(pow(15.0, 2)-pow(5.0, 2))), arcCenterY+92)];
  [BellLinePath addLineToPoint:CGPointMake(arcCenterX+(sqrt(pow(15.0, 2)-pow(5.0, 2))), arcCenterY+92)];
  [BellLinePath moveToPoint:CGPointMake(arcCenterX+(sqrt(pow(15.0, 2)-pow(2.0, 2))), arcCenterY+95)];
  [BellLinePath addLineToPoint:CGPointMake(arcCenterX-(sqrt(pow(15.0, 2)-pow(2.0, 2))), arcCenterY+95)];
  [self setLayer:bellLineLayer path:BellLinePath ];


  //铃铛上的小圆点
  CAShapeLayer *bellCirLayer = [CAShapeLayer layer];
  UIBezierPath *bellCirPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX, arcCenterY+102) radius:2.5 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [bellCirPath moveToPoint:CGPointMake(arcCenterX, arcCenterY+104.5)];
  [bellCirPath addLineToPoint:CGPointMake(arcCenterX, arcCenterY+112)];
  [self setLayer:bellCirLayer path:bellCirPath ];

  //口袋
  CAShapeLayer *bagLayer = [CAShapeLayer layer];
  UIBezierPath *bagPath = [UIBezierPath bezierPath];
  [bagPath moveToPoint:CGPointMake(arcCenterX-40, arcCenterY+112)];
  [bagPath addQuadCurveToPoint:CGPointMake(arcCenterX+40, arcCenterY+112) controlPoint:CGPointMake(arcCenterX, arcCenterY+120)];
  [bagPath addCurveToPoint:CGPointMake(arcCenterX-40, arcCenterY+112) controlPoint1:CGPointMake(arcCenterX+28, arcCenterY+160) controlPoint2:CGPointMake(arcCenterX-28, arcCenterY+160)];
  [self setLayer:bagLayer path:bagPath ];