3.简单的使用 使用CAShapeLayer和UIBezierPath画一条直线和一个椭圆形,效果如下: ?...使用贝塞尔曲线画直线和椭圆形 代码如下: // 1,绘制一条直线 UIBezierPath * path = [[UIBezierPath alloc] init]; path.lineWidth...= 1.f; //设置起点 [path moveToPoint:CGPointMake(0, 10)]; //添加子路径 [path addLineToPoint:CGPointMake...五角星动画 - (void)createUI2 { // 创建shapeLayer _shapeLayer = [CAShapeLayer layer]; _shapeLayer.frame...target:self selector:@selector(bezierPathAnimation) userInfo:nil repeats:YES]; } /// 执行bezierPath的动画
下面逐个分析 坐标横竖虚线的动画 第一步设置一个 CAShapeLayer 并设置 .lineDashPattern 属性,使之成为虚线。...就包含了三段直线,把UIBezierPath 赋值给CAShapeLayer后,直接对 CAShapeLayer的strokeEnd 作CABasicAnimation动画,就会出现,三条横线依次出现的动画...同时对横竖方向的CAShapeLayer做动画,就会出现如图所示的效果。...设置渐变图层的 mask(遮罩层)为一个CAShapeLayer maskLayer = [CAShapeLayer layer]; maskLayer.strokeColor = [...的上沿的边界,然后绘制好整个完整的渐变图层的 mask的完成path并赋值。
之前讲过使用UIBezierPath在UIView的drawRect中绘图, 今天我们讲下另外一种方式: CAShaperLayer 先说说使用CAShapeLayer的优点: GPU执行, GPU执行...按照之前的思路是创建一个UIView子类, 用UIBezierPath画一个外围的不闭合圆弧, 在画中间点圆 代码量不是很多弹也不少, 那假如用CAShapeLayer实现时怎么样子的呢?...= self.view.center; //设置中心位置 circle.path = \ [UIBezierPath...比如hud这个, 我们之前用UIBezierPath在UIView的DrawRect中画画过, 相对比较简单 我们用CAShapeLayer事实看。...self.end; if (self.end == 1) { [self.displayLink invalidate]; } } @end 我们再来看看这个动画效果
CAShapeLayer动画仅仅限于沿着边缘的动画效果,它实现不了填充效果 我们可以使用CAShapeLayer与UIBezierPath可以实现不在view的drawRect方法中就画出一些想要的图形...大致步骤如下: 1、新建UIBezierPath对象bezierPath 2、新建CAShapeLayer对象caShapeLayer 3、将bezierPath的CGPath赋值给caShapeLayer...#比如末端是矩形还是圆形,都是 UIBezierPath的设置,而且fillColor 也是 UIBezierPath区域内的颜色。...这面这个例子就是使用 CAShapeLayer与UIBezierPath以及CABasicAnimation结合在一起,实现的动态画图。 ?...动态绘图.gif #核心实现代码 //头 CAShapeLayer *headLayer = [CAShapeLayer layer]; UIBezierPath *headPath = [UIBezierPath
更新 给对本文感兴趣的朋友们推荐个好东西:paintcode 动画预览 ? 先扯淡 最近手痒又想整点动画玩玩,但是想了几个主意发现稍微复杂一点的手写都一定会累爆。这篇文章记录一下今天折腾的一个方案。...说来简单,就是用矢量设计工具舒舒服服的做好设计,然后输出成 svg 格式,再用 NSXMLParser 去读出来,转换成 UIBezierPath ,然后就天高任鸟飞~ 清晰起见,这里不使用各种库,由上面的二维码动画为例...并添加动画。...let rect = CGRect(x: x, y: y, width: w, height: h) rects.append(rect) // 设置...// 透视 startTransform = CATransform3DRotate(startTransform, CGFloat(M_PI)*0.5, 0, 1, 0) // 沿
使用CAShapeLayer 和 UIBezierPath,可以实现动态绘制的动画效果。...设置一个 UIBezierPath 绘制好路径赋值给 CAShapeLayer即可。...UUBar中 使用CAShapeLayer 、UIBezierPath、CABasicAnimation可实现动态柱状图 CAShapeLayer设置 _chartLine.fillColor =...chartLine.strokeColor = [_barColor CGColor]; }else{ _chartLine.strokeColor = [UUGreen CGColor]; } 动画设置...(160, 300); CGFloat radius = 50; //这里的思路是只设置一条路径供所有的CAShapeLayer使用,实际上 当前这条 //UIBezierPath
Animation 之CADisplayLink 老司机带你走进Core Animation 之几种动画的简单应用 老司机带你走进Core Animation 之CAShapeLayer和CATextLayer...:rect cornerRadius:5]; UIBezierPath * circleP = [UIBezierPath bezierPathWithOvalInRect:CGRectMake...真不是,这次说他主要是想表达这个属性是默认支持隐式动画的。 隐式动画就是不用显示声明,系统默认为我们实现的动画。...对咯,就是以一个CATextLayer做红色的CALayer的mask,CATextLayer的字体设置有颜色,背景设置透明色,这样就只能显示出红色的CALayer的文字部分了把他封装在一个UIView...问题就是当你第一循环结束后你想把你的strokeEnd恢复成0你却发现他是以动画形式恢复回去的不是你要的效果对吧?这就是因为他的隐式动画了。因为这时候我们不需要他的动画是吧?
} else { fakeProgress += 0.01;//进度越大动画时间越长。...} } 使用 CAShapeLayer 和 CABasicAnimation 实现环形进度动图 进度.gif 核心源码 # 橘红色的背景 CAShapeLayer *shapeLayer11...=[CAShapeLayer layer]; UIBezierPath*path12=[UIBezierPath bezierPathWithOvalInRect:CGRectMake(89, 299,...*shapeLayer1 = [CAShapeLayer layer]; UIBezierPath *path1 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake...的终点,这里设置为动画的 KEY CABasicAnimation *pathAnima = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
一、动画画线 1、创建CAShaperLayer //创建出CAShapeLayer _shapeLayer = [CAShapeLayer layer]; _shapeLayer.frame...= self.view.bounds;//设置shapeLayer的尺寸和位置 _shapeLayer.position = self.view.center; _shapeLayer.fillColor...= [UIColor clearColor].CGColor;//填充颜色为ClearColor 2、定义线条 //设置线条的宽度和颜色 _shapeLayer.lineWidth =...1.0f; _shapeLayer.strokeColor = [UIColor redColor].CGColor; 3、设置线条路径 CGPoint point_1 = CGPointMake...*path = [[UIBezierPath alloc] init]; [path moveToPoint:[[array firstObject] CGPointValue]];
带动画渐进效果与颜色渐变的圆弧进度控件设计 今天帮朋友写了一个小巧的圆弧进度控件,控件十分简单,主要设计思路采用CAShapeLayer来创建控件圆弧形状,使用CAGradientLayer...来进行颜色渐变的渲染,两者结合来创建出颜色渐变的圆弧进度条控件,关于进度动画采用CoreAnimation动画处理。...; /** *设置圆弧渐变色的中间色 */ @property(nonatomic,strong)UIColor * midLineColor; /** *设置圆弧渐变色的终止色 */ @property...; /** *设置进度 */ @property(nonatomic,assign)CGFloat progress; /** *设置线的宽度 max = 20 min = 0.5 */ @property...; /** *设置百分比标签进度颜色 */ @property(nonatomic,strong)UIColor * textColor; /** * @brief 设置进度 * * @param
创建步骤: 创建关键帧动画对象 设置属性 添加到要作用的layer上 如果使用rect椭圆的方式,动画会不连贯,停顿一下。...我们创建一个UIBezierPath,让小飞机沿着这个路径运动。..."]; //设置属性:创建beziper路径,并把路径作为运动轨迹 UIBezierPath *bezierPath = [UIBezierPath bezierPathWithOvalInRect...一个是给背景图片的UIImageView设置了mask,另一个是直接给Controller的View设置了mask。设置这两个有神马区别咩? 好,下篇其实有一个重头,就是CAShapeLayer。...因为在工作中碰到的大部分动画都是通过UIView的动画block实现,其他都基本上都是需要用到CAShapeLayer。我们下次玩点好玩的吧~ 如果还有兴趣,可以看看本系列的其他文章哈。
一般来说,layer可以有两种用途,二者不互相冲突:一是对view相关属性的设置,包括圆角、阴影、边框等参数;二是实现对view的动画操控。...、终点的frame,时间,动画会沿你设定的轨迹进行移动 相关类 CATransaction 事务类,可以对多个layer的属性同时进行修改.它分隐式事务,和显式事务 CABasicAnimation...) //动画的持续时间 animation.duration = duration //设置重复次数,HUGE可看做无穷大,起到循环动画的效果 animation.repeatCount...,如果对CAShapeLayer比较陌生,简单介绍下CAShapeLayer let layer: CAShapeLayer = CAShapeLayer() //创建贝塞尔曲线路径(CAShapeLayer...就依靠这个路径渲染) let path: UIBezierPath = UIBezierPath() //addArcWithCenter,顾名思义就是根据中心点画圆(OC语法的命名优越感又体现出来了
这篇文章通过使用CAShapeLayer和UIBezierPath来画出一个动态显示剩余流量的小动画。...1.1 CAShapeLayer的优点 那CAShapeLayer到底有啥子优点嘛! CAShapeLayer作为继承自CALayer的子类,当然可使用CALayer的所有属性。...1.2 基本属性 属性名 作用 path 图像的绘制路径,path不支持隐式动画 fillColor 填充path的颜色,或无填充。默认为不透明黑色。 fillRule 填充path的规则。...系统会按照数值自动重复设置虚线。 miterLimit:最大斜接长度。斜接长度指的是在两条线交汇处和外交之间的距离。...实战:绘制一个镂空图层动画 做好后的效果如下: Paste_Image.png fileprivate func hollowLayer(){ // 创建空心的layer
之前在一个网站上看到了一个HTML5/SVG实现的过山车动画,点这里看网页版。 觉得很棒,想想咱们iOS也完全可以实现,正好还可以全面回顾一下之前分享过的关于iOS中间动画系列会使用到的各个内容。...*rightLawn = [[CAShapeLayer alloc] init]; UIBezierPath *rightLawnPath = [[UIBezierPath alloc] init...小树的Layer,我们通过设置contents进行了图片填充。...*leftSnowberg = [[CAShapeLayer alloc] init]; UIBezierPath *leftSnowbergPath = [[UIBezierPath alloc...*leftSnowbergBody = [[CAShapeLayer alloc] init]; UIBezierPath *leftSnowbergBodyPath = [[UIBezierPath
1.CABasicAnimation CABasicAnimation动画主要是设置某个动画属性的初始值fromValue和结束值toValue,来产生动画效果。...fillMode 是个枚举值(四种),当removedOnCompletion设置为NO之后才会起作用。可以设置layer是保持动画开始前的状态还是动画结束后的状态,或是其他的。...(包括CAAnimationGroup),需要注意的是animations里的动画设置了duration之后动画可能会有不同,一般里面不设置,在最外层设置group的duration即可。...有三种方式:1、直接使用UIBezierPath的方法;2、使用CoreGraphics绘制;3、利用CAShapeLayer绘制。 示例代码如下,绘制一个右侧为弧型的视图: ?...进度条.gif 上图这样的视图是用UIBezierPath用多个CAShapeLayer制作出来的,而动画效果只需要改变进度的layer的strokeEnd和修改下面代表水面进度的视图位置即可。
placeholder"]]; imgV.frame = CGRectMake(100, 100, 100, 100); [self.view addSubview:imgV]; // 优化方案1: (推荐使用) CAShapeLayer...UIBezierPath 结合, 可设置单个圆角 UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:imgV.bounds...byRoundingCorners:UIRectCornerAllCorners cornerRadii:imgV.bounds.size]; CAShapeLayer *maskLayer = [[...CAShapeLayer alloc] init]; // 设置大小 maskLayer.frame = imgV.bounds; // 设置图形样子 maskLayer.path = maskPath.CGPath...; imgV.layer.mask = maskLayer; // 说明: AShapeLayer动画渲染直接提交到手机的GPU当中,相较于view的drawRect方法使用CPU渲染而言,其效率极高,
100, 100); foregroundLayer.backgroundColor = [UIColor redColor].CGColor; //创建一个路径 UIBezierPath...*apath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(20, 20, 60, 60)]; //创建maskLayer...CAShapeLayer *maskLayer = [CAShapeLayer layer]; maskLayer.path = apath.CGPath; maskLayer.fillColor...:foregroundLayer]; } @end 我们再可以给遮罩层添加动画, 实现更加绚丽的效果 比如中间中间小圆逐渐变大 #import "ViewController.h" static...作为MaskLayer circle = [CAShapeLayer layer]; //设置路径 circle.path = [UIBezierPath bezierPathWithArcCenter
1、视图变暗、变大 alpha值属性是透明度,把背景设置成淡黑色,然后调整alpha可以达到背景渐变的视图效果; UIView的transform是可以用仿射变换矩阵来控制平移、放大缩小等。...出现、烟花爆炸、画卷打开等效果,通过改变遮罩的大小,影响原始图片的展示,达到动画的效果; 先新建一个CAShapeLayer,并设置为layer的遮罩; 新建一个动画,设定初始和结束状态并赋值给CAShapeLayer...UIBezierPath *maskStartPath = [UIBezierPath bezierPathWithRect:CGRectMake(CGRectGetWidth(rainbowView1...*maskFinalPath = [UIBezierPath bezierPathWithRect:rainbowView1.bounds]; CAShapeLayer *maskLayer...= [CAShapeLayer layer]; rainbowView1.layer.mask = maskLayer; maskLayer.path = maskFinalPath.CGPath
前言 操作按钮常常需要设置视图圆角,比如注册页面的注册按钮。...I iOS设置视图cornerRadius属性失效的解决方案 1.1 解决步骤 1、尝试设置_numberLab.clipsToBounds = YES;2、尝试设置 [self.numberLab layoutIfNeeded...]; 之后再执行cornerRadius 在设置完约束后, 并不能马上得到它的frame, 只要添加[self.view layoutIfNeeded]; 就能拿到frame设置圆角了 - (void...它有什么作用 masksToBounds指在设置子layer在超出父layer时是否被裁剪,YES表示裁剪,NO表示不裁剪,默认是NO;通常在通过设置layer.cornerRadius属性实现圆角效果时要设置...② 图片要异步加载,加载完成后再根据cell内部UIImageView的引用设置图片。
M_PI * 2; // 根据进度计算扇形结束位置 CGFloat endAngle = M_PI *3.0/2.0; // 根据起始点、原点、半径绘制弧线 UIBezierPath...*sectorPath = [UIBezierPath bezierPathWithArcCenter:origin radius:radius startAngle:startAngle endAngle...[sectorPath addLineToPoint:origin]; // 设置扇形的填充颜色 [[UIColor blackColor] set]; // 设置扇形的填充模式...[sectorPath fill]; } 2、数据下载完成后外围灰边框动画 画出默认的边框,并加载到uiview的layer层 - (CAShapeLayer *)borderLayer {..._borderLayer) { _borderLayer = [CAShapeLayer layer]; _borderLayer.fillColor = [UIColor
领取专属 10元无门槛券
手把手带您无忧上云