cashapelayer

CAShapeLayer + UIBezierPath

半城伤御伤魂 提交于 2020-03-26 00:17:18
UIBezierPath: UIBezierPath是在 UIKit 中的一个类,继承于NSObject,可以创建基于矢量的路径。使用此类可以定义常见的圆形、多边形等形状 。我们使用直线、弧(arc)来创建复杂的曲线形状。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。 CAShapeLayer: CAShapeLayer顾名思义,继承于CALayer。 每个CAShapeLayer对象都代表着将要被渲染到屏幕上的一个任意的形状(shape)。具体的形状由其path(类型为CGPathRef)属性指定。 普通的CALayer是矩形,所以需要frame属性。CAShapeLayer初始化时也需要指定frame值,但 它本身没有形状,它的形状来源于其属性path 。CAShapeLayer有不同于CALayer的属性,它从CALayer继承而来的属性在绘制时是不起作用的。 步骤: 1、新建UIBezierPath对象bezierPath 2、新建CAShapeLayer对象caShapeLayer 3、将bezierPath的CGPath赋值给caShapeLayer的path,即caShapeLayer.path = bezierPath

iOS BeizierPath 绘图

牧云@^-^@ 提交于 2020-03-02 06:18:10
iOS BeizierPath 绘图 最近工作,因为是一款理财的产品,所以进度条改成圆,当然也参考了几篇优秀的博文,稍后一一罗列,下面简单介绍:使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中。此类是Core Graphics框架关于path的一个封装。使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线段组成的形状。 Bezier Path 基础 UIBezierPath对象是CGPathRef数据类型的封装。path如果是基于矢量形状的,都用直线和曲线段去创建。 我们使用直线段去创建矩形和多边形,使用曲线段去创建弧(arc),圆或者其他复杂的曲线形状。每一段都包括一个或者多个点,绘图命令定义如何去诠释这些点。每一个直线段或者曲线段的结束的地方是下一个的开始的地方。每一个连接的直线或者曲线段的集 合成为subpath。一个UIBezierPath对象定义一个完整的路径包括一个或者多个subpaths。 创建和使用一个path对象的过程是分开的。创建path是第一步,包含一下步骤: (1)创建一个Bezier path对象。 (2)使用方法moveToPoint:去设置初始线段的起点。 (3)添加line或者curve去定义一个或者多个subpaths。 (4)改变UIBezierPath对象跟绘图相关的属性。 当创建path

给view某个角 设置圆角

梦想与她 提交于 2020-02-29 02:10:39
如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的 cornerRadius 属性即可(项目需要使用QuartzCore框架)。而若要指定某几个角(小于4)为圆角而别的不变时,这种方法就不好用了。 对于这种情况,Stackoverflow上提供了 几种解决方案 。其中最简单优雅的方案,就是使用 UIBezierPath 。下面给出一段示例代码。 UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(120, 10, 80, 80)]; view2.backgroundColor = [UIColor redColor];[self.view addSubview:view2]; UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:view2.bounds byRoundingCorners:UIRectCornerBottomLeft | UIRectCornerBottomRight cornerRadii:CGSizeMake(10, 10)]; CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init]; maskLayer.frame = view2

iOS 快速集成启动页广告

删除回忆录丶 提交于 2020-02-27 02:10:28
前言   由于项目中要用到启动页广告,所以做了简单的研究,同时借鉴网易新闻和蘑菇街的交互写了一个简单的demo,现在写出来供大家参考,可能由于个人局限会有一些bug和不完善的地方,也希望大家能够友善提醒和指正。 Github地址: https://github.com/Running2snail/LLFullScreenAd 效果图如下: 代码分析: 上面主要展示了广告图提过按钮显示的两种方式,一种是常见的计数倒计时+跳过的样式(大部分的广告启动页都是这种方式),一种是通过环形倒计时+跳过的样式(仿网易新闻)。下面我将分别介绍两种样式的简单原理。 思路分析: 启动页广告是在启动页消失后添加在window上显示,过程为获取广告图信息,然后下载广告图,其次显示并相应相应的点击跳转等事件。过程并不复杂,主要的问题在于启动时期比较短暂而且图片信息的获取和下载时间的不确定等问题。在这里主要通过设置一个等待计时器来在避免长时间的等待,同时利用SDWebImage来缓存图片数据用于下次的显示。另外圆形进度条的实现也比较简单,这里就不做过多的介绍,下面具体看主要的代码实现。 代码分析: 在AppDelegate.m文件中创建并添加到window上,同时下载广告图 AppDelegate.m @implementation AppDelegate - (BOOL)application:

CAShapeLayer animation doesn't stay on screen but disappears

别说谁变了你拦得住时间么 提交于 2020-01-30 06:50:07
问题 I'm trying to draw a animated circle but every segment needs to have another color. Now everything works except that my piece that is just drawed before I call the method again disappears so only the last part stays. I don't want that, I want that after 4 times a whole circle is drawn in different color strokes. How can I fix this that it doesn't disappears? This is my init code: - (void)_initCircle { _circle = [CAShapeLayer layer]; _radius = 100; // Make a circular shape _circle.path =

how to make dynamical strokeColor in CAShapeLayer? In Swift

允我心安 提交于 2020-01-16 03:01:49
问题 I use six parameters (as active, inactive, wired, compressed, free and total). I make a class of CAShapeLayer and I made one function in there with help I can draw circle just add parameters. I make CGPath and add it six once in function which draw a circle. I get the 5 layers to UIView . I make timer which update data in one second but it add else 5 layer to UIView . It is wrong way. I want to animate arcs with data and update in one second. when layers become too much device is working

how to make dynamical strokeColor in CAShapeLayer? In Swift

十年热恋 提交于 2020-01-16 03:01:09
问题 I use six parameters (as active, inactive, wired, compressed, free and total). I make a class of CAShapeLayer and I made one function in there with help I can draw circle just add parameters. I make CGPath and add it six once in function which draw a circle. I get the 5 layers to UIView . I make timer which update data in one second but it add else 5 layer to UIView . It is wrong way. I want to animate arcs with data and update in one second. when layers become too much device is working

Trim/subtract CGPath from CGPath?

你离开我真会死。 提交于 2020-01-12 03:26:08
问题 I have some CGPath (a poly with two circle) carried out on a CAShapeLayer . Can I trim/subtract paths like this? 回答1: Instead of do the math, the result can be achieved at drawing time using kCGBlendModeClear . // Create the poly. CGContextBeginPath(context); CGContextMoveToPoint (context, a_.x, a_.y); CGContextAddLineToPoint (context, b_.x, b_.y); CGContextAddLineToPoint (context, c_.x, c_.y); CGContextAddLineToPoint (context, d_.x, d_.y); CGContextClosePath(context); // Draw with the

Can a CGImage be added to the contents property of a CAShapeLayer?

别来无恙 提交于 2020-01-06 18:08:36
问题 I have a custom view with a layerClass override like: + (Class) layerClass { return [CAShapeLayer class]; } I want to be able to add a CGImage to the contents property like so: - (void) animateView { UIImage *layerImage = ...; CAShapeLayer *layer = (CAShapeLayer *)self.layer; layer.contents = layerImage.CGImage; //....Do other fun animations here } Are there other properties I need to set, or other ways to get the shape layer to render the contents of the image for animation? 回答1: I would

UIButton with CAShapeLayer makes title disappear while scrolling

限于喜欢 提交于 2020-01-06 16:26:06
问题 I have a ProfileCollectionViewCell with one method: func configureCellWithProfile(profile: Profile) { shapeLayer.removeFromSuperlayer() let path = CGPathCreateMutable() CGPathMoveToPoint(path, nil, 0, 0) CGPathAddLineToPoint(path, nil, CGRectGetWidth(likeButton.frame), 0) CGPathAddLineToPoint(path, nil, CGRectGetWidth(likeButton.frame), CGRectGetHeight(likeButton.frame)) CGPathCloseSubpath(path) shapeLayer.fillColor = profile.favourite ? UIColor.brilliantRose().CGColor : UIColor.blackSqueeze(