首先我们要知道所有的显示给用户的图像都是在vIEw上呈现的
如何编写自定义控件程序的canvas在cocoa中称为context(中文狗翻译:上下文)。
context中定义了画布大小,颜色等信息。
一旦你有了context,你就可以要求Cocoa开始你想要的绘画了。
绘图的基本单位是path,一个path代表了任意形状:圆,正方,多边等。path可以stroke或者filled,stroking是描边,filling是填色。当然它们可以是半透明的,你单单通过这两个功能即能绘出很多精彩的图案。
在iOS中左上角的坐标点为(0,0),而在OS X上左下角为(0,0)。 在写程序中像素点和屏幕点必须区别对待,(100,100)是屏幕中的(100,100)不一定代表着像素点的实际位置。这样可以在不同的屏幕上适配。
在vIEws中绘图我们先看vIEws是怎么工作的。首先我们要明白vIEw就是一个window窗口矩形框里面的一块画布。如果vIEw移动了或者不在窗口框里,那么用户只能看到一部分或者看不到东西。
Frame Rectanglesframe rectangle定义了vIEw的大小位置。
一个vIEw可以有很多subvIEws。subvIEw是跟着supervIEw移动的。它的frame rectangle也是相对supervIEw的。在OS X中为NSVIEw,在iOS中是UIVIEw。它们两者没有太大区别。
overrIDe func drawRect(rect: NSRect){}
当系统需要显示一个vIEw,它就发送一个drawRect的message给vIEw,在iOS中NSRect变成CGRect
当这个方法被调用时,graphics context已经准备好绘画了。等方法结束return后graphics context被系统收回并显示刚才绘图的内容。
我们称需要被更新的区域叫做dirty rectangle,例如当窗口被另外窗口遮住的时候,我们点击后,只是将一部分的内容重绘制而其他不变,节约系统开销,我们称需要重绘的部分叫dirty rectangle。
顾名思义,保存着边界的信息。这个还是有用的,比如手机旋转,则frame rectangle的小大和位置都要改变,来适应手机横置。但是Bounds Rectangles不会变化。因为frame rectangle是相对于supervIEw的,而Bounds Rectangle是相对于Globle position的。
打造自己的VIEw 1. 总结以上是内存溢出为你收集整理的Cocoa自定义控件全部内容,希望文章能够帮你解决Cocoa自定义控件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)