quartzD可以用来绘制渐变图形,即图形向外或向内发散,会变得越来越模糊. 渐变分为线性渐变和径向渐变,所谓线性渐变,就是图形以线的方式发散,发散后一般呈现出矩形的样子:而径向渐变,就是以半径的大小往外或往内发散,发散后呈现出圆形的样子. 渐变系数:0.0~1.0 渐变模式:可以进行与操作 kCGGradientDrawsBeforeStartLocation = (1 << 0),  //向内渐变 kCGGradientDrawsAfterEndLocation = (1 <<…
1.渐变效果 —> 色彩空间 首先:自定义一个渐变视图,在自定义视图中重写drawRect #import "ViewController.h" #import "MyView.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; MyView *view = [[MyView alloc] i…
在CALayer中绘制图形会出现锯齿和模糊,同样绘图在UIView中就没有问题.经查资料发现不自动处理两倍像素的情况. 解决方案为:设置layer的contentsScale属性为[[UIScreen mainScreen] scale];…
绘图 不必要的效率考虑往往是性能问题的万恶之源. ——William Allan Wulf 在第12章『速度的曲率』我们学习如何用Instruments来诊断Core Animation性能问题.在构建一个iOS app的时候会遇到很多潜在的性能陷阱,但是在本章我们将着眼于有关绘制的性能问题. 软件绘图 术语绘图通常在Core Animation的上下文中指代软件绘图(意即:不由GPU协助的绘图).在iOS中,软件绘图通常是由Core Graphics框架完成来完成.但是,在一些必要的情况下,相…
1.绘制折线图 上次在群里看到一个折线图划的很漂亮,自己想实现一个这样的 ,但是一直没什么头绪,不知道怎么做,就开始在网上查找划线,绘 制渐变色这一块的内容,用最笨的方式,自己尝试的写了一些,也没 有完全实现这些内容,权当是记录下学习的这块内容. 2.实现的效果 3.实现的代码 //添加坐标的坐标点 UIBezierPath * pathtemp=[[UIBezierPath alloc] init]; [pathtemp moveToPoint:CGPointMake(, )]; [patht…
前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文章讲解,会写一些Demo. 官方文档 本文的代码Demo在最后一部分 Quartz 2D用来干嘛的? Quartz 2D属于Core Graphics(所以大多数相关方法的都是以CG开头),是iOS/Mac OSX 提供的在内核之上的强大的2D绘图引擎,并且这个绘图引擎是设备无关的.也就是说,不用关…
本文是<Programming iOS5>中Drawing一章的翻译,考虑到主题完整性,翻译版本中加入了一些书中未涉及到的内容.希望本文能够对你有所帮助. 本文由海水的味道翻译整理,转载请注明译者和出处,请勿用于商业用途! Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染.该框架可以用于基于路径的绘图.变换.颜色管理.脱屏渲染,模板.渐变.遮蔽.图像数据管理.图像的创建.遮罩以及PDF文档的创建.…
1.CALayer 绘图层 在 iOS 系统中,你能看得见摸得着的东西基本上都是 UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是 UIView.其实 UIView 之所以能显示在屏幕上,完全是因为它内部的一个层.在创建 UIView 对象时,UIView 内部会自动创建一个层(即 CALayer 对象),通过 UIView 的 layer 属性可以访问这个层.当 UIView 需要显示到屏幕上时,会调用 drawRect: 方法进行绘图,并且会将所有内容绘制在自…
本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=list 由于自己的项目需要,从网络上下载了许多关于绘制图形的demo,只是用在自己的项目中,很多地方的代码还是吃不透,于是决定仔细学习一下Quartz 2D这个强大的框架,这里也是站在别人的肩膀上来辅助自己的学习,感谢原博客的详细讲解. Quartz 2D用来干嘛的? Quartz 2D属于 Core Graphics (所以大多数方法以CG开头),是iOS/Mac OSX提供的在内核之上的强大的…
一.CALayer的常用属性 1.@propertyCGPoint position; 图层中心点的位置,类似与UIView的center:用来设置CALayer在父层中的位置:以父层的左上角为原点(0,0): 2. @property CGPoint anchorPoint; 称『定位点』.『锚点』,该描述是相对于x.y位置比例而言的默认在图像中心点(0.5.0.5)的位置:决定着CALayer身上的哪个点会再position属性所指的位置,以自己的左上角为原点(0,0):它的x.y取值范围都…
前言:一个路径可以包含由一个或者多个shape以及子路径subpath,quartz提供了很多方便的shape可以直接调用.例如:point,line,Arc(圆弧),Curves(曲线),Ellipse(椭圆),矩形(Rectangle). 对这些path可以进行stroke(描边),也可以进行fill(填充).也可以利用path对一个区域进行截取(clip). 例如,使用截取圆形区域 如果对Quartz的基本概念仍然不清楚的,强烈建议看下我之前的这篇文章,不然不能理解 iOS 2D绘图详解(…
一.CALayer绘图方式 Layer绘图有两种方法,不管使用哪种方法绘制完必须调用图层的setNeedDisplay方法(注意是图层的方法,不是UIView的方法,UIView的setNeedDisplay方法会调用drawRect:绘图) 通过图层代理drawLayer: inContext:方法绘制 通过自定义图层drawInContext:方法绘制   使用代理方法绘图 - (void)viewDidLoad { [super viewDidLoad]; //自定义图层 CALayer…
1.绘制线性渐变 Canvas提供了用于创建线性渐变的函数createLinearGradient(x0,y0,x1,y1),坐标点(x0,y0)是起点 ,(x1,y1)是终点 创建一个渐变色 var gradient=createLinearGradient(0,0,300,0); 定义渐变色颜色 ctx.addColorStop(stop,color); ctx.addColorStop(0,"#f00"); ctx.addColorStop(1,"#00f")…
在 HTML5 中,使用 Canvas API 绘制图形的知识,可以对绘制图形进行处理,包含使用 Canvas API 绘制渐变图形,使用 Canvas API 的坐标轴变换处理功能绘制变形图形.其中,左上方的点,为坐标轴原点(0,0). 1.绘制渐变图形 <!DOCTYPE html> <html> <head> <title></title> <script> function draw(id){ var canvas = doc…
前言:这个系列写道这里已经是第五篇了,本文会介绍下阴影和渐变的基础知识,以及一些基本的Demo Code展示,应该还会有两篇,介绍下Bitmap绘制以及Pattern等知识. Shadow shadow(阴影)的目的是为了使UI更具有立体感,如图 shadow主要有三个影响因素 x off-set 决定阴影沿着x的偏移量 y off-set 决定阴影沿着y的偏移量 blur value 决定了阴影的边缘区域是不是模糊的 其中不同的blur效果如图 注意 Shadow也是绘制状态相关的,意味着如果…
先来看个效果: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /> 新建视图类.在直接加入代码: // Only override drawRect: if you perform custom drawing. // An empty implementation…
原博地址:http://blog.csdn.net/hello_hwc/article/details/49507881 Shadow Shadow(阴影) 的目的是为了使UI更有立体感,如图 shadow 主要有三个影响因素 x off-set 决定阴影沿着X的偏移量 y off-set 决定阴影沿着y的偏移量 blur value 决定了阴影的边缘区域是不是模糊的 其中不同的blur效果的图 注意: shadow也是和绘制状态相关的,意味着如果仅仅绘制一个subPath的shadow,注意s…
drawable文件夹放置动画/形状/选择器等属性文件,唯一的drawable文件名,不允许写错和拼错,否则运行报错.drawable文件夹底下的xml文件可以包括的标签共18个:animation-list bitmap clip color corners gradient inset item(item) layout-list nine-patch padding rotate scale selector shape size solid stroke,18个标签中只有4个标签可以作为…
跟着大神一起进步,本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=contents 一 CALayer是什么? Layers是绘图和动画的基础,  Layer是在3D空间中的2D平面.Layer管理的几何(例如rotate,transfrom),内容(image等),和可视属性(backgroundColor,alpha)等信息.Layer主要通过管理bitmap来维护自己的状态信息,从这一点上来说,Layer可以看作对象模型,因为他们主要用来管…
iOS 绘制1像素的线 一.Point Vs Pixel iOS中当我们使用Quartz,UIKit,CoreAnimation等框架时,所有的坐标系统采用Point来衡量.系统在实际渲染到设置时会帮助我们处理Point到Pixel的转换. 这样做的好处隔离变化,即我们在布局的事后不需要关注当前设备是否为Retina,直接按照一套坐标系统来布局即可. 实际使用中我们需要牢记下面这一点: One point does not necessarily correspond to one physic…
对于一个app的好坏,我们首要判断的便是app的界面,而界面的建立则是在图形的处理基础上的,说到图形处理又不得不提及Quartz2D,CALayer. 在iOS系统中,你能看得见摸得着的东西基本上都是UIView,比如一个按钮.一个文本标签.一个文本输入框.一个图标等等,这些都是UIView. 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个层. 在创建UIView对象时,UIView内部会自动创建一个层(即CALayer对象),通过UIView的layer属性可以访问这个层.当UI…
大家在开发IOS程序时,经常会遇到self.view.layer这个东西,我以前也是不求甚解,后来觉得有必要整理下. 简单介绍layer: 在IOS中,你能看得见摸得着的东西都是UIView,比如一个按钮.一个文本标签.一个图标等等,这些都是UIView.但是UIView只是构建模型,并不具有显示功能,那么UIview怎么显示在屏幕上来呢? 这里就引进了CALayer概念,学过PS的同学都知道图层的概念,它是图片显示的载体,CALayer就是UIView显示的载体,负责对UIView进行显示和管…
Quartz概述 Quartz是Mac OS X的Darwin核心之上的绘图层,有时候也认为是CoreGraphics.共有两种部分组成   Quartz Compositor,合成视窗系统,管理和合成幕后视图影像来建立Mac OS X使用者接口. Quartz 2D,是ios和mac os x环境下的二维绘图引擎. 涉及内容包括:基于路径的绘图,透明度绘图,遮盖,阴影,透明层,颜色管理.防锯齿渲染,生成PDF,以及PDF元数据相关处理.   视图绘制   在ios上,所有的绘制,无论是否采用O…
https://www.jianshu.com/p/09f4e36afd66 什么是CALayer: 总结:能看到的都是uiview,uiview能显示在屏幕上是因为它内部的一个层calyer层. 在创建uiview的时候,uiview的内部会自动创建一个层(calayer对象)通过uiview的layer属性可以访问这个层.当uiview需要显示在屏幕上时,会调用drawrect 方法进行绘制,并将所有的内容绘制在自己的层上,绘制完毕之后,系统会将层拷贝到屏幕上,于是uiview就显示了. 换…
在网上经常看到关于layer的tree的描述,不太理解,今天找到了官方文档,原文在Core Animation Programming Guide 中. Layer Trees Reflect Different Aspects of the Animation State An app using Core Animation has three sets of layer objects. Each set of layer objects has a different role in m…
前一节讲的是 绘图到不同输出源,请看地址: http://www.cnblogs.com/ghj1976/p/3440856.html 上一节的例子效果是通过设置每一个点的的RGBA属性来实现的,这是最基础的方式,通过这种方式我们可以绘制任意形状的图形. 1.设置点的颜色一个简单例子: 效果如下: 代码如下,跟最初我们的代码唯一不同的是设置点颜色时,多了一个条件判断语句:if x%8 == 0 ,代码如下,这种情况下,其实我们通过算法简单的实现了画垂直线的效果: 1: package main…
iOS 实现图形编程主要有三种技术:UIKit.Core Graphics.OpenGL. 绘图需要在图形环境中进行,图形环境分为三种:屏幕图形环境.off screen 位图环境和PDF图形环境.在屏幕环境中绘图是在一个UIView或其子类中进行,并显示到屏幕上.其它两种不能直接显示到屏幕. 1. UIKit 1.1. 概念描述 一套 OC 提供的绘图API,用于进行基本的2D绘图.图像处理和动画处理. 1.2. 功能类 1.2.1. UIBezierPath:线.角度.椭圆 1.2.2. U…
目录 1.UIBezierPath(贝塞尔曲线) 1).在重写 drawRect: 方法里使用 2).在普通方法里使用,需要画布. 3). 切圆角.指定位置圆角.任意形状. 4).彩色的动画加载圆圈. 2.CGContext(上下文) 1).在重写 drawRect: 方法里使用 3.UIGraphics(绘图) 1).绘制输出image 补充: N.CGPathRef.CGMutablePathRef(路径) N+1.绘画 1).Core Graphics,在 drawRect: 绘画. 2)…
● 其实UIView之所以能显示在屏幕上,完全是因为它内部的一个图层(CALayer) ● 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView 的layer属性可以访问这个层 @property(nonatomic,readonly,retain) CALayer *layer; ● 当UIView需要显示到屏幕上时,会调用drawRect:方法进行绘图,并且会将所有内容绘制在 自己的图层上,绘图完毕后,系统会将图层拷贝到屏幕上,于是就完成了U…
在iOS开发中有时需要自己自定义一个视图view的背景,而网上有人提出的在循环中不断alloc的方法设置其背景色渐变,会耗费很多内存和资源,极其不明智,而在CALayer中早就提供有图层渐变的类和相应的方法,有需要的可以仔细研究一下,这里给一个小示例,给各位参考一下. 这里的方法是, 1.建一个storyboard的工程: 2.使用storyboard拖一个View到控制器视图上,并设置外部接口用于调用: 3.进入到ViewControler.m中,敲入代码: #import "ViewCont…