大家学习CrossApp的时候,搞清楚基础概念性的东西,能够大大提高我们学习CrossApp的效率。今天就和大家简单谈谈CrossApp的坐标系统。
CrossApp采用的坐标系是屏幕坐标系,即左上角为原点,向右为X轴增长方向、向下对应Y轴增长方向。如图:
除了显示内容和处理事件之外,试图还可以管理一个或多个子视图。我们可以在一个view上面添加多个子view,而作为父view,即父节点,负责管理其直接子视图,并根据需要调整他们的位置和尺寸,以及响应他们没有处理的事件。
根据类说明我们可以得出以下结论:
新手朋友可能不看明白父节点和子视图的概念 并且B是添加在A上的,假如这时候,我们调整A的坐标位置,那么B也将随A的坐标改变而改变。这样我们就说:B是A的子节点(也称子视图),A是B的父节点。 由于B是A的子节点(子视图),那么B则可以使用A的节点坐标系
,我画图来说明:
如图所示,屏幕上显示了两个CAView分别是A和B,
CAView在坐标系中定义了属性:DLayout。API定义如下:
Layout
类型:DLayout
解释:确定view在屏幕上显示的自适应方式。
//Frame
CAView * frameView = CAView::createWithColor(CAColor_blue);
frameView->setFrame(DRect(100, 100, 100, 100));
//this->getView()->addSubview(frameView);
//添加并设置z为2
this->getView()->insertSubview(frameView, 2);
//Bounds
CAView* boundsView = CAView::createWithColor(CAColor_red);
boundsView->setBounds(DRect(300, 300, 100, 100));
this->getView()->addSubview(boundsView);
//Center
CAView* centerView = CAView::createWithColor(CAColor_orange);
centerView->setCenter(DRect(100, 100, 100, 100));
//this->getView()->addSubview(centerView);
//添加并设置z为1
this->getView()->insertSubview(centerView, 1);
测试View缩放后,frame和bounds的变化:
//缩放后的Frame和Bounds
frameView->setScale(2);
DRect frameRect = frameView->getFrame();
DRect boundsRect = frameView-> getBounds();
CCLog( "frameView->getFrame():x:%f,y:%f,width:%f,height:%f", frameRect.getMinX(), frameRect.getMinY(), frameRect.getMaxX() - frameRect.getMinX(), frameRect.getMaxY() - frameRect.getMinY() );
CCLog( "frameView->getBounds():x:%f,y:%f,width:%f,height:%f", boundsRect.getMinX(), boundsRect.getMinY(), boundsRect.getMaxX() - boundsRect.getMinX(), boundsRect.getMaxY() - boundsRect.getMinY() );