需要注意,绘制的顺序在CoreGraphics框架中十分重要,如果后绘制的内容和先绘制的内容有位置冲突,后绘制的内容将覆盖先绘制的内容。 ...4.图层上下文:用于将内容绘制在Layer图层上。 5.打印上下文:使用Mac打印功能时,此上下文用于将内容绘制在打印输出源上。...); UIKIT_EXTERN void UIRectFill(CGRect rect); //下面这两个方法用于向当前的图形上下文中绘制矩形边框 UIKIT_EXTERN void UIRectFrameUsingBlendMode...//进行矩形区域的边框绘制 void CGContextStrokeRect(CGContextRef cg_nullable c, CGRect rect); //进行矩形区域的边框绘制 可以设置边框宽度...(CGContextRef cg_nullable c, CGRect rect); //进行虚线区域边框的绘制 void CGContextStrokeEllipseInRect(CGContextRef
这似乎很酷,但惊喜之余,我们也发现了仍然存在的小缺憾,那就是此时的图片显示效果是变形的;那它是否也可以像UIImageView一样具有可设置的方法呢,答案是肯定的,我们可以使用如下的代码,将图片自适应显示...contentsRect (CGRect) 允许在图层边框里显示寄宿图的一个子域 contentCenter (CGRect) 定义一个固定的边框和一个在图层上可拉伸的区域 三、UIView方法绘制自定义寄宿图...主动绘制 我们需要显式的调用-display方法;这不同于UIView,当图层显示到屏幕上时,CALayer不会自动重绘它的内容,CALayer把重绘的决定权交给了开发者; 2.绘制特点 尽管没有使用...的绘制逻辑; 使用总结:当我们需要自定义寄宿图时,其实不必实现displayLayer:和-drawLayer: inContext:方法来绘制寄宿图。...)rect toView:(nullable UIView *)view; - (CGRect)convertRect:(CGRect)rect fromView:(nullable UIView *)
kCGPathFill,//只有填充(非零缠绕数填充),不绘制边框 kCGPathEOFill,//奇偶规则填充(多条路径交叉时,奇数交叉填充,偶交叉不填充) kCGPathStroke, ...// 只有边框 kCGPathFillStroke, // 既有边框又有填充 kCGPathEOFillStroke // 奇偶填充并绘制边框 // 封闭当前线路 CGContextClosePath...UIBezierPath 对象 + (instancetype)bezierPathWithRect:(CGRect)rect; 通过一个指定的矩形中的椭圆形, 创建并且返回一个新的 UIBezierPath...然而当我们 * 希望以最小的消耗去绘制一个临时的曲线时, 我们也许会临时增 * 大这个值, 来获得更快的渲染速度. */ usesEvenOddFillRule -> //是否使用基偶填充规则 /**... * 设置为 NO, 则路径将会使用 非零规则 (non-zero) 规则进行填充. */ 奇偶原则: 从路径覆盖范围内的任意一点做一条射线(确保这条射线的长度要比路径覆盖范围要大) , 如果与该射线相交的边的数量为奇数
rect),填充矩形函数 - UIRectFrame(CGRect rect),矩形描边函数 - UIBezierPath,绘制常见路径类,包括险段、渐变、阴影、反锯齿等高级特性支持还是不及Quartz...使用形式如下: - (void)drawRect:(CGRect)rect { NSString *str = @"打印信息 打印信息"; NSMutableDictionary...drawInRect:(CGRect *)rect:在指定的rect区域内绘制整张图片,图片会按照指定区域的宽高进行缩放,所以这种方式一定可以显示完整的图片,但是会进行一些缩放。...drawAsPatternInRect:(CGRect *)rect:在指定的rect区域内平铺图片,如果一张图片不够用,则会在剩下的地方重新放置该图片,图片的大小尺寸不会改变。...UIRectFill(rect);快速的用矩形去填充一个区域 UIRectFrame(rect);快速绘制一个矩形的边框 10、用UIKit裁剪一个区域 UIRectClip(CGRectMake
概述 吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法。整理形成本文。...//绘制矩形 ,fillColor填充色 + (void)toDrawRect:(CGRect)rectangle color:fillColor context:(CGContextRef)ctx{...[[UIColor whiteColor] setStroke]; //边框宽度 CGContextSetLineWidth(ctx,0); //绘制...///绘制文字,rect1指定矩形,绘制文字在这个矩形水平和垂直居中 + (void)toDrawTextWithRect:(CGRect)rect1 str:(NSString*)str1 context....size.height - strSize.height)/2; //垂直居中要自己计算 CGRect r = CGRectMake(rect1.origin.x, rect1.origin.y
使用方法 使图层覆盖在应用图标上方,大小为app图标的bounds -(ICSectorProgressView *)sectorView { if (!...weakSelf.progressView.progress; weakSelf.sectorView.hidden = NO; 动画原理 1、加载进度动画 根据下载进度在UIView中画出中心区域扇形 - (void)drawRect:(CGRect...)rect { // 定义扇形中心 CGPoint origin = CGPointMake(rect.size.width / 2.0f, rect.size.height /...这样系统会自动闭合图形,绘制一条从圆心到弧线起点的线段。...[sectorPath fill]; } 2、数据下载完成后外围灰边框动画 画出默认的边框,并加载到uiview的layer层 - (CAShapeLayer *)borderLayer {
您在这里看到的是SwiftUI在形状周围绘制边框的方式的副作用。如果您递给某人一个圆的铅笔轮廓,并要求他们用粗笔在该圆上画线,他们将绘制出该圆的精确线——大约一半的笔在该线的内部,一半在该线的外部。...这就是SwiftUI为我们所做的,但是当形状到达屏幕边缘时,则意味着边框的外部最终超出了屏幕边缘。...:我们的所有边框都是可见的,因为Swift在圆的内部绘制而不是将圆作为绘制的中心。...添加到inset允许我们在需要时多次调用inset(by :),例如,如果我们想手动调用一次,则使用strokeBorder()。...,这在圆弧的情况下意味着我们应使用它减小绘制半径。
YYText 核心思路:在异步线程创建图形上下文,然后利用 CoreText 绘制富文本,利用 CoreGraphics 绘制图片、阴影、边框等,最后将绘制完成的位图放到主线程显示。 ?...在该类中有数个静态函数作为回调,比如当回调GetAscentCallback()函数时,将持有对象的ascent属性作为返回值。...图中蓝色填充区域即为实际绘制区域pathBox,绘制区域总大小应该是蓝色边框所覆盖的范围(请忽略线与线之间的小缝隙)。借助CGRectInset(...)...6、line 截断 当富文本超过限制时,可能需要对最后一行可显示的行末尾做一个省略号:aaaa...。...五、异步绘制 上面介绍了几种特殊的自定义富文本属性,对于其它的自定义属性,基本上都是使用 CoreGraphics API 绘制,比如边框、阴影等,当然 CoreText 自带有很多效果,YYText
{ let rect = CGRect(origin: CGPoint(), size: size) // 1.图像的上下文-内存中开辟一个地址,跟屏幕无关...给图像添加边框,绘制内切的圆形 UIColor.darkGray.setStroke() path.lineWidth = 5 // 默认是'1' path.stroke() 判断一个应用程序的好坏...image.draw(in: rect) // 3.绘制内切的圆形 UIColor.darkGray.setStroke() path.lineWidth =...// 2.绘图'drawInRect'就是在指定区域内拉伸屏幕 draw(in: rect) // 3.绘制内切的圆形 UIColor.darkGray.setStroke...直接UIBezierPath(rect: rect)实例化了一个矩形的路径,然后在路径内绘图。但是突然想到不用裁切,不用设置圆形头像的边框,突然感觉这样就有点多此一举了,因此将多余的代码就都删除了。
, //丢失的文本在末尾显示省略号 NSLineBreakByTruncatingTail, //丢失的文本在中间显示省略号 NSLineBreakByTruncatingMiddle... };typedef NSUInteger NSLineBreakMode 使用attributedText绘制 @property(nonatomic,copy) NSAttributedString...baselineAdjustment; typedef enum { //调整文本对应基线位置 UIBaselineAdjustmentAlignBaselines, //调整文本相对其边框的中心...; 返回文本绘制矩形 - (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines...; 文本绘制函数 - (void)drawTextInRect:(CGRect)rect 文本自动布局参数 @property(nonatomic) CGFloat preferredMaxLayoutWidth
利用这种方法也可以画圆 在渲染的时候,会自动关闭路径。 - (void)drawRect:(CGRect)rect { // 绘制扇形。参数:1,圆点坐标。参数2:半径。...超出view 的区域就不再显示了。...使用drawAtPoint进行绘制 有多大就绘制多大,不做任何压缩、拉伸 使用drawAsPatten进行绘制 如果图片比区域小,会进行平铺;如果图片比区域大,有多少绘制多少 - (void)drawRect...保存屏幕截图,并存储至相册 开启一个图形的context。开启就别忘了关闭。 iOS8.0 以后还需要获得用户许可的权限。之前的iOS不需要。 在plist中设置申请用户许可时的提示文字。...以及如何使用它们来绘制动态的进度条等等
但是有时候我们只使用UIView还是会有些捉襟见肘的,CALayer暴露了一些UIView没有提供的功能: 阴影、圆角、边框 3D变换 非矩形范围 透明遮罩 非线性动画 ---- 2.寄宿图 2.1...虽然可以实现类似UIImageView的显示效果,但平常并不推荐使用这种方法。...平时使用UIImageView时遇到类似情况,可以设置contentMode来解决。...2.1.5 contentsRect CALayer的contentsRect属性允许我们在图层边框里显示寄宿图的一个子域。和bounds、frame不同,contentsRect不是按点来计算的。...因为当图层显示在屏幕上时,CALayer不会自动重绘,这和UIView不同。需要手动调用。 我们没有调用masksToBounds。但是绘制的圆仍然被裁剪了。
当view第一次显示到屏幕上时(加到UIWindow上显示出来) 重绘的时候:调用view的setNeedsDisplay或者setNeedsDisplayInRect:时 1.3 Graphics...当用 Quartz 绘图时,所有设备相关的特性都包含在Graphics Context 中。通过给Quartz 指定不同的 Graphics Context,就可将相同的图像绘制到不同的设备上。...rect中的rect指的就是绘图view的bounds - (void)drawRect:(CGRect)rect { //1.获取图形上下文对象 CGContextRef ctx =...内存泄漏的静态分析工具 1.4.3 使用Path 对象时的内存管理问题 使用Path对象的时候,一定要注意内存的问题,一定要注意内存释放。...绘制基本图形 好了,坐好了,老司机开始开车啦~ 2.1 绘制三角形 - (void)drawRect:(CGRect)rect { // 获取context CGContextRef ctx
void)drawRect:(CGRect)rect的调用时机: 当view第一次显示到屏幕上时(被加到UIWindow上显示出来) 调用view的setNeedsDisplay或者setNeedsDisplayInRect...:时 图形上下文(Graphics Context) 保存绘图信息、绘图状态 决定绘制的输出目标(绘制到什么地方去?)...(输出目标可以是PDF文件、Bitmap或者显示器的窗口上) 相同的一套绘图序列,指定不同的Graphics Context,就可将相同的图像绘制到不同的目标上 绘制好的图形会保存到图像上下文中去,图像上下文中的绘制的图像又会显示在我们指定的输出目标当中...(CGContextRef c) Quartz2D的内存管理 使用含有“Create”或“Copy”的函数创建的对象,使用完后必须释放,否则将导致内存泄露 使用不含有“Create”或“Copy”的函数获取的对象...实现- (void)drawRect:(CGRect)rect方法 - (void)drawRect:(CGRect)rect { for (ZJBezierPath *path in
MyView的对象时,layer层的背景色就是红色的了。...,它可以分为两个方面: 1.不改变内容的原始大小 这种模式中不会改变内容的原始大小,如果层的尺寸小于内容的尺寸,则内容会被切割,如果层的尺寸大于内容的尺寸,多出的部分将会显示层的背景颜色。...@property CGRect frame; //设置是否隐藏 @property(getter=isHidden) BOOL hidden; //每个layer层有两面,这个属性确定是否两面都显示...; //获取内容的rect尺寸 @property CGRect contentsRect; //设置内容的填充和对其方式,具体上面有说 @property(copy) NSString *contentsGravity...- (void)setNeedsDisplay函数 @property BOOL needsDisplayOnBoundsChange; //绘制与读取内容 - (void)drawInContext:
进行图像截取的示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef contextRef = UIGraphicsGetCurrentContext...则当满足如下条件时,这个像素点会被裁剪: min1<c1<max1,min2<c2<max2,min3<c3<max3 需要注意,使用这种方式进行膜层裁剪,原图像不可以有alpha通道,色值的取值范围为...对于被裁剪出来的部分,开发者可以使用其他颜色进行填充,示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef contextRef = UIGraphicsGetCurrentContext...除了上面介绍了两种对图像进行裁剪的方法外,CoreGraphics框架中还提供了一种裁剪方式,示例代码如下: -(void)drawRect:(CGRect)rect{ CGContextRef...CoreGraphics框架也可以绘制复杂的图像混合效果,在进行图像混合时,需要先绘制背景图像,之后设置图像混合模式,在绘制前景图像,CoreGraphics会根据混合模式来进行最后图像的绘制。
这里要注意一点的是为了使用动画的代理,区分动画,我们使用了 [groundAnimation setValue:view.layer forKey:keyPath]; 因为最开始时小圆点是不显示的...在使用drawRect:重绘页面时注意首先移除已有的图层maskLayer 同时做动画。...(4) 在弹性动画的执行期间,定时器会不断的获取某一时刻的所有的子视图的 坐标 ,并修改 曲线上的点的位置的坐标,并根据 currentLinePathForWave 这个方法绘制出 渐变图层的 mask...绘制关键步骤: 使用for循环在 drawRect方法中绘制每一个扇形(上篇文章已将讲过),因为环外的标注,所以圆环需要小些,否则外环线上的文字绘制起来有可能空间不够。...: 关于K线图可以左右滑动以及放大缩小,而是当手指滑动或者啮合的时候调用了- (void)drawRect:(CGRect)rect方法,而是又重新画上去了,因为调用比较频繁,所以看起来像是在滑动一样!
CGDataProviderRef provider, const CGFloat decode[], boolshouldInterpolate) 这个方法用于创建mask图片图层,可以设置其显示部分与不显示部分达到特殊的效果...11KB多,大大压缩了图片的数据量 ,而且从视角角度看,图片的质量并没有明显的降低.因此,在读取图片数据内容时,建议优先使用UIImageJPEGRepresentation,并可根据自己的实际使用场景...CGContextRelease(bitmapContext); // CGImageRelease(imgref); // // return newImage; } 5.1.3 绘制时单元格底部出现高度不定的细微黑线...问题原因: 将Text做宽高计算时,高度值容易得出小数数值,而页面绘制均是基于整数像素点绘制,对于小数点部分,系统会做舍去处理(即便有缩放),固留下高度不定的未绘制区域(为黑色)。.../26/利用预渲染加速iOS设备的图像显示 iOS使用CGContextRef绘制各种图形 http://www.devstore.cn/essay/essayInfo/116.html iOS CGContextRef
实现- (void)drawRect:(CGRect)rect方法,然后在这个方法中 取得跟当前view相关联的图形上下文 绘制相应的图形内容 利用图形上下文将绘制的所有内容渲染显示到view上面...当view第一次显示到屏幕上时(被加到UIWindow上显示出来) 调用view的setNeedsDisplay或者setNeedsDisplayInRect:时 Quartz2D须知 Quartz2D...(CGContextRef context, CGRect rect) //添加一个圆弧 void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat...使用含有“Create”或“Copy”的函数创建的对象,使用完后必须释放,否则将导致内存泄露 使用不含有“Create”或“Copy”的函数获取的对象,则不需要释放 如果retain了一个对象,不再使用时...,需要将其release掉 可以使用Quartz 2D的函数来指定retain和release一个对象。
在Objective-C工程中,CoreGraphics其中方法都是采用C语言风格进行编写的,同时其并不支持Objective-C的自动引用计数,在使用这个框架进行编程时,开发者要手动对内存进行管理。...CGPath可以理解为图形的路径,在Objective-C工程中,其实系统定义的一个内部结构体,开发者不可以直接使用,开发者CGPathRef和CGMutablePathRef别名作为CGPath的引用...第2个参数为要进行的transform变换 CGPathRef CGPathCreateWithRect(CGRect rect,const CGAffineTransform * transform...cg_nullable path, CGRect * rect); //获取某个路径当前绘制所在的点 CGPoint CGPathGetCurrentPoint(CGPathRef path); /...CGPathApply()方法中的第3个参数为一个函数指针,示例C函数实现如下: void func(void * __nullable info, const CGPathElement
领取专属 10元无门槛券
手把手带您无忧上云