iOS的绘图机制-iOS,iPad,iPhone,Objective-c

iOS的绘图机制-iOS,iPad,iPhone,Objective-c,第1张

概述在前面我介绍了iOS的视图机制,我也提到了iOS的视图框框可以通过drawRect自己绘图,我也说过每个view的layer(CALayer)就像一个视图的投影,其实我们也可以来 *** 作它定制一个视图,例如半透明圆角背景的视图。 要完成自己在视图上绘图,大家一定要了解一下iOS的绘图机制了。今天我试图也通俗地说一下iOS的绘图。 在iOS中绘图可以有两种方式: 1,采用iOS的核心图形库。 2,采用O

在前面我介绍了iOS的视图机制,我也提到了iOS的视图框框可以通过drawRect自己绘图,我也说过每个vIEw的layer(CALayer)就像一个视图的投影,其实我们也可以来 *** 作它定制一个视图,例如半透明圆角背景的视图。

要完成自己在视图上绘图,大家一定要了解一下iOS的绘图机制了。今天我试图也通俗地说一下iOS的绘图。

在iOS中绘图可以有两种方式:

1,采用iOS的核心图形库。

2,采用OpenGL ES。

这两个库的不同我简单介绍一下:

前者主要是通过核心图形库和UIKit进行封装,其更加贴近我们经常 *** 作的视图(UIVIEw)或者窗体(UIWindow)。例如我们前面提到的drawRect,我们只负责在drawRect里进行绘图即可,我们没有必要去关注界面的刷新频率,至于什么时候调drawRect都有iOS的视图绘制来管理。

那么OpenGL ES经常用在游戏等需要对界面进行高频刷新和自由控制。通俗理解一下就是其更加切近直接对屏幕的 *** 控。在很多游戏编程中可能我们不需要一层一层的框框,直接在界面上绘制,并且通过多个的内存缓存绘制来让画面更加流畅。

那换句话来说,OpenGL ES完全可以作为视图机制的底层图形引擎。他们就这个关系了。

大概了解这个就行了。OpenGL和Direct X 等我们到处能看到的。我们不再累赘了,今天我们的主题主要侧重前者,并且侧重如何通过绘图机制来定制我们的视图。先来看看我们最熟悉的windows自带画图器(我觉得它就是对原始画图工具的最直接体现):


如果你会用绘图器绘制线条,形状,文字,选择颜色,并且和可以填充,那么iOS中的绘图机制也可以做得到,只是你用程序绘制的时候,整个画图板你要装载脑子里。

那我们开始:

如果你要绘图,你最起码得有个面板吧?无论它是墙,纸还是内存,都是这样了。那在iOS绘图中是个什么呢?就是个画图板(Graphics Contexts)。所有画图板首先要规定一下了,否则,计算机的画图都是需要我们用数字告诉人家的,那坐标体系就先要明确一下了。

在iOS的2D绘图中采用的就是我们熟知的直角坐标系,即原点在左下方,右上为正轴,这里要注意的是和我们在视图(UIVIEw)中布局的坐标系是不一样的,他的圆点在左上,右下为正轴。当我们在视图的drawRect中工作的时候拿到的画板已经是左上坐标的了,那这时候你要去把一个有自己坐标体系的内容直接绘制,就会出现坐标不一致问题,例如直接绘制图片就会倒立。(后面我们会说坐标变换的一些内容,这里不要急)。

前面我们也说了windows画图板里面我们至少还看到个画图板,那在iOS绘图中其实我们也有个"虚拟"的画图板(Graphics Contexts),所有的绘图 *** 作都在这个画图板里面 *** 作。

在视图(UIVIEw)的drawRect中 *** 作时,其实视图引擎已经帮我们准备好了画板(记着windows画图板啊,这样我说什么你就明白了),甚至连当前线条的粗细,当前绘制的颜色等都给你传递过来了。你只需要“接”到这个画板,然后拿起各种绘图工具绘就可以了。

光说不练不行啊,我给个简单例子说明一下绘图过程:

-(voID)drawRect:(CGRect)rect{

         CGContextRef ref=UIGraphicsGetCurrentContext();//拿到当前被准备好的画板。在这个画板上画就是在当前视图上画

         CGContextBeginPath(ref);//这里提到一个很重要的概念叫路径(path),其实就是告诉画板环境,我们要开始画了,你记下。

         CGContextMovetoPoint(ref, 0, 0);//画线需要我解释吗?不用了吧?就是两点确定一条直线了。

         CGContextAddlinetoPoint(ref, 300,300);

         CGfloat redcolor[4]={1.0,1.0};

         CGContextSetstrokecolor(ref,redcolor);//设置了一下当前那个画笔的颜色。画笔啊!你记着我前面说的windows画图板吗?

         CGContextstrokePath(ref);//告诉画板,对我移动的路径用画笔画一下。

}

无论你画圈圈,还是画什么都少不了如下几步:

1,拿到当前面板

2,开始画声明

3,画

4,提交画

 

这篇文章被我罗索的太长,我再增加一篇吧。累死我了。请看 iOS的绘图机制二。

总结

以上是内存溢出为你收集整理的iOS的绘图机制-iOS,iPad,iPhone,Objective-c全部内容,希望文章能够帮你解决iOS的绘图机制-iOS,iPad,iPhone,Objective-c所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1090504.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存