看到这张图,是不是觉得挺萌的,那是如何实现的呢?在iOS中有一个类叫UIBezierPath(贝塞尔曲线),这两天研究了一下UIBezierPath和CAShapeLayer,根据别人分享的教程,画了这个萌萌的哆啦A梦。

UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径.此类是Core Graphics框架关于path的一个OC封装。使用此类可以定义常见的圆形、多边形等形状 。我们使用直线、弧(arc)来创建复杂的曲线形状。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。

CAShapeLayer: 继承于CALayer。 每个CAShapeLayer对象都代表着将要被渲染到屏幕上的一个任意的形状(shape)。具体的形状由其path(类型为CGPathRef)属性指定。 普通的CALayer是矩形,所以需要frame属性。CAShapeLayer它本身没有形状,它的形状来源于其属性path 。CAShapeLayer有不同于CALayer的属性,它从CALayer继承而来的属性在绘制时是不起作用的。

基本用法:

画圆弧: (instancetype)bezierPathWithArcCenter:(CGPoint)center radius:(CGFloat)radius startAngle:(CGFloat)startAngle endAngle:(CGFloat)endAngle clockwise:(BOOL)clockwise;

  1. center表示圆心
  2. radius表示半径
  3. startAngle表示开始角度
  4. endAngle表示结束角度
  5. clockwise表示是否是顺时针方向

画二元曲线和三元曲线,一般和moveToPoint配合使用。

  1. 二元曲线:- (void)addQuadCurveToPoint:(CGPoint)endPoint controlPoint:(CGPoint)controlPoint
  2. 三元曲线:- (void)addCurveToPoint:(CGPoint)endPoint controlPoint1:(CGPoint)controlPoint1 controlPoint2:(CGPoint)controlPoint2

其中 endPoint表示:曲线的终点 ;controlPoint表示:画曲线的基准点

知道基本画法后我们就可以画哆啦A梦了。

1、先画头部。先画一个圆。

//  确定头部所在的圆心
  CGFloat headCornerRadius=80;
  CGFloat arcCenterX=self.view.frame.size.width/2;
  CGFloat arcCenterY= 120 headCornerRadius;


  //画头部
  CAShapeLayer *headLayer=[[CAShapeLayer alloc] init];
  UIBezierPath *headPath=[UIBezierPath bezierPathWithRoundedRect:CGRectMake(self.view.frame.size.width/2-headCornerRadius, 120, headCornerRadius*2, headCornerRadius*2) cornerRadius:headCornerRadius];
  [self setLayer:headLayer path:headPath];

2、画脸部。画一个比头部小点的圆,与头部圆的底部内切。

 //脸
  CAShapeLayer *faceLayer=[CAShapeLayer layer];
  UIBezierPath *facePath=[UIBezierPath bezierPathWithArcCenter:CGPointMake(self.view.frame.size.width/2, 120 headCornerRadius 10) radius:70 startAngle:M_PI endAngle:3*M_PI clockwise:YES];
  [self setLayer:faceLayer path:facePath];

3、画眼部

  //左眼
  CAShapeLayer *leftEyeLayer = [CAShapeLayer layer];
  UIBezierPath *leftEyePath = [UIBezierPath bezierPath];
  [leftEyePath moveToPoint:CGPointMake(arcCenterX-30, arcCenterY-25)];
  [leftEyePath addQuadCurveToPoint:CGPointMake(arcCenterX-15, arcCenterY-45) controlPoint:CGPointMake(arcCenterX-30, arcCenterY-45)];
  [leftEyePath addQuadCurveToPoint:CGPointMake(arcCenterX, arcCenterY-25) controlPoint:CGPointMake(arcCenterX, arcCenterY-45)];
  [leftEyePath addQuadCurveToPoint:CGPointMake(arcCenterX-15, arcCenterY-5) controlPoint:CGPointMake(arcCenterX, arcCenterY-5)];
  [leftEyePath addQuadCurveToPoint:CGPointMake(arcCenterX-30, arcCenterY-25) controlPoint:CGPointMake(arcCenterX-30, arcCenterY-5)];
  [self setLayer:leftEyeLayer path:leftEyePath];

  //左眼珠
  CAShapeLayer *leftEyeballLayer = [CAShapeLayer layer];
  UIBezierPath *leftEyeballPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX-5, arcCenterY-30) radius:2.5 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:leftEyeballLayer path:leftEyeballPath ];

  //右眼
  CAShapeLayer *rightEyeLayer = [CAShapeLayer layer];
  UIBezierPath *rightEyePath = [UIBezierPath bezierPath];
  [rightEyePath moveToPoint:CGPointMake(arcCenterX, arcCenterY-25)];
  [rightEyePath addQuadCurveToPoint:CGPointMake(arcCenterX 15, arcCenterY-45) controlPoint:CGPointMake(arcCenterX, arcCenterY-45)];
  [rightEyePath addQuadCurveToPoint:CGPointMake(arcCenterX 30, arcCenterY-25) controlPoint:CGPointMake(arcCenterX 30, arcCenterY-45)];
  [rightEyePath addQuadCurveToPoint:CGPointMake(arcCenterX 15, arcCenterY-5) controlPoint:CGPointMake(arcCenterX 30, arcCenterY-5)];
  [rightEyePath addQuadCurveToPoint:CGPointMake(arcCenterX, arcCenterY-25) controlPoint:CGPointMake(arcCenterX, arcCenterY-5)];
  [self setLayer:rightEyeLayer path:rightEyePath ];

  //右眼珠
  CAShapeLayer *rightEyeballLayer = [CAShapeLayer layer];
  UIBezierPath *rightEyeballPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX 5, arcCenterY-30) radius:2.5 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:rightEyeballLayer path:rightEyeballPath];

4、画鼻子、嘴巴、胡须

  //鼻子
  CAShapeLayer *noseLayer = [CAShapeLayer layer];
  UIBezierPath *nosePath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX, arcCenterY) radius:10 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:noseLayer path:nosePath ];

  //鼻子光晕
  CAShapeLayer *noseHaloLayer = [CAShapeLayer layer];
  UIBezierPath *noseHaloPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX-4, arcCenterY-5) radius:2.5 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:noseHaloLayer path:noseHaloPath ];

  //嘴巴
  CAShapeLayer *mouthLayer = [CAShapeLayer layer];
  UIBezierPath *mouthPath = [UIBezierPath bezierPath];
  [mouthPath moveToPoint:CGPointMake(arcCenterX-60, arcCenterY 25)];
  [mouthPath addQuadCurveToPoint:CGPointMake(arcCenterX 60, arcCenterY 25) controlPoint:CGPointMake(arcCenterX, arcCenterY 90)];
  [self setLayer:mouthLayer path:mouthPath];

  CAShapeLayer *mouthLayer1 = [CAShapeLayer layer];
  UIBezierPath *mouthPath1 = [UIBezierPath bezierPath];
  [mouthPath1 moveToPoint:CGPointMake(arcCenterX, arcCenterY 10)];
  [mouthPath1 addLineToPoint:CGPointMake(arcCenterX, arcCenterY 55)];
  [self setLayer:mouthLayer1 path:mouthPath1];

  //胡须
  [self addBeardFromPoint:CGPointMake(arcCenterX-58, arcCenterY-5) toPoint:CGPointMake(arcCenterX-15, arcCenterY 10) ];
  [self addBeardFromPoint:CGPointMake(arcCenterX-68, arcCenterY 15) toPoint:CGPointMake(arcCenterX-15, arcCenterY 20) ];
  [self addBeardFromPoint:CGPointMake(arcCenterX-61, arcCenterY 45) toPoint:CGPointMake(arcCenterX-15, arcCenterY 30) ];
  [self addBeardFromPoint:CGPointMake(arcCenterX 58, arcCenterY-5) toPoint:CGPointMake(arcCenterX 15, arcCenterY 10) ];
  [self addBeardFromPoint:CGPointMake(arcCenterX 68, arcCenterY 15) toPoint:CGPointMake(arcCenterX 15, arcCenterY 20) ];
  [self addBeardFromPoint:CGPointMake(arcCenterX 61, arcCenterY 45) toPoint:CGPointMake(arcCenterX 15, arcCenterY 30) ];

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 ];

7、画右手部分

  //右手
  CAShapeLayer *rightHandLayer = [CAShapeLayer layer];
  UIBezierPath *rightHandPath = [UIBezierPath bezierPathWithArcCenter:CGPointMake(arcCenterX 85*cos(27/180.0*M_PI), arcCenterY-85*sin(27/180.0*M_PI)) radius:20 startAngle:0 endAngle:2*M_PI clockwise:YES];
  [self setLayer:rightHandLayer path:rightHandPath ];


  //右胳膊
  CAShapeLayer *rightArmLayer = [CAShapeLayer layer];
  UIBezierPath *rightArmPath = [UIBezierPath bezierPath];
  [rightArmPath moveToPoint:CGPointMake(arcCenterX 80*cos(13/180.0*M_PI), arcCenterY-80*sin(13/180.0*M_PI))];
  [rightArmPath addQuadCurveToPoint:CGPointMake(arcCenterX distanceXToArcCenter, arcCenterY distanceYToArcCenter) controlPoint:CGPointMake(arcCenterX 80*cos(13/180.0*M_PI) 9, arcCenterY 20)];
  [rightArmPath addLineToPoint:CGPointMake(arcCenterX distanceXToArcCenter, arcCenterY distanceYToArcCenter 25)];
  [rightArmPath addQuadCurveToPoint:CGPointMake(arcCenterX 93*cos(15/180.0*M_PI), arcCenterY-93*sin(15/180.0*M_PI)) controlPoint:CGPointMake(arcCenterX 90*cos(13/180.0*M_PI) 15, arcCenterY 25)];
  [rightArmPath addQuadCurveToPoint:CGPointMake(arcCenterX 80*cos(13/180.0*M_PI), arcCenterY-80*sin(13/180.0*M_PI)) controlPoint:CGPointMake(arcCenterX 80*cos(13/180.0*M_PI) 5, arcCenterY-93*sin(15/180.0*M_PI) 5)];
  [self setLayer:rightArmLayer path:rightArmPath];

  UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(self.view.frame.size.width/2 90, 120, 70, 30)];
  label.textAlignment = NSTextAlignmentCenter;
  label.textColor = [UIColor colorWithRed:21/255.0 green:159/255.0 blue:237/255.0 alpha:1];
  label.text = @"Hello";
  label.font = [UIFont fontWithName:@"Chalkduster" size:20];
  [self.view addSubview:label];

  CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
  animation.fromValue = @(0);
  animation.toValue = @(1);
  animation.duration = 0.5f;
  [label.layer addAnimation:animation forKey:nil];

8、给各个部位上颜色

 //上色
  faceLayer.fillColor = [UIColor whiteColor].CGColor;
  leftEyeLayer.fillColor = [UIColor whiteColor].CGColor;
  rightEyeLayer.fillColor = [UIColor whiteColor].CGColor;
  leftEyeBallLayer.fillColor = [UIColor blackColor].CGColor;
  rightEyeBallLayer.fillColor = [UIColor blackColor].CGColor;
  noseLayer.fillColor = [UIColor redColor].CGColor;
  noseHaloLayer.fillColor = [UIColor whiteColor].CGColor;
  headLayer.fillColor = [UIColor colorWithRed:21/255.0 green:159/255.0 blue:237/255.0 alpha:1].CGColor;
  leftArmLayer.fillColor = [UIColor colorWithRed:21/255.0 green:159/255.0 blue:237/255.0 alpha:1].CGColor;
  leftHandLayer.fillColor = [UIColor whiteColor].CGColor;
  mufflerLayer.fillColor = [UIColor redColor].CGColor;
  bellyLayer.fillColor = [UIColor whiteColor].CGColor;
  bellLayer.fillColor = [UIColor yellowColor].CGColor;
  bodyLayer.fillColor = [UIColor colorWithRed:21/255.0 green:159/255.0 blue:237/255.0 alpha:1].CGColor;
  rightHandLayer .fillColor=[UIColor whiteColor].CGColor ;
  rightArmLayer .fillColor=[UIColor colorWithRed:21/255.0 green:159/255.0 blue:237/255.0 alpha:1] .CGColor;

这样,一个简单的哆啦A梦就实现了。

文中只展示了重要部分的代码,如果有需要,可以看完整的demo,同时demo里面也展示了UIBezierPath和CAShapeLayer基本的画图方法。

demo地址 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持Devmax。

iOS贝塞尔曲线画哆啦A梦的代码实例的更多相关文章

  1. 基于canvas使用贝塞尔曲线平滑拟合折线段的方法

    这篇文章主要介绍了基于canvas使用贝塞尔曲线平滑拟合折线段的方法的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 使用SVG实现提示框功能的示例代码

    这篇文章主要介绍了使用SVG实现提示框功能的示例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  3. canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动

    这篇文章主要介绍了canvas进阶之贝塞尔公式推导与物体跟随复杂曲线的轨迹运动,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  4. canvas仿写贝塞尔曲线的示例代码

    这篇文章主要介绍了canvas仿写贝塞尔曲线的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  5. HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题

    HTML5在微信内置浏览器下,在右上角菜单的调整字体导致页面显示错乱的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

  6. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. ios – containerURLForSecurityApplicationGroupIdentifier:在iPhone和Watch模拟器上给出不同的结果

    我使用默认的XCode模板创建了一个WatchKit应用程序.我向iOSTarget,WatchkitAppTarget和WatchkitAppExtensionTarget添加了应用程序组权利.(这是应用程序组名称:group.com.lombax.fiveminutes)然后,我尝试使用iOSApp和WatchKitExtension访问共享文件夹URL:延期:iOS应用:但是,测试NSURL

  8. ios – Testflight无法安装应用程序

    我有几个测试人员注册了testflight并连接了他们的设备……他们有不同的ios型号……但是所有这些都有同样的问题.当他们从“safari”或“testflight”应用程序本身单击应用程序的安装按钮时……达到约90%并出现错误消息…

  9. ibm-mobilefirst – 在iOS 7.1上获取“无法安装应用程序,因为证书无效”错误

    当我的客户端将他们的设备更新到iOS7.1,然后尝试从AppCenter更新我们的应用程序时,我收到了上述错误.经过一番搜索,我找到了一个类似问题的帖子here.但是后来因为我在客户端使用AppCenter更新应用程序的环境中,我无法使用USB插件并为他们安装应用程序.在发布支持之前,是否有通过AppCenter进行下载的解决方法?

  10. ios – 视图的简单拖放?

    我正在学习iOS,但我找不到如何向UIView添加拖放行为.我试过了:它说“UIView没有可见的接口声明选择器addTarget”此外,我尝试添加平移手势识别器,但不确定这是否是我需要的它被称为,但不知道如何获得事件的坐标.在iOS中注册移动事件回调/拖放操作的标准简单方法是什么?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部