2012-03-01 52 views
0

从下面的代码与 “CGRectMake” 混淆协调

// yPos = 0, width = 100, height = 150 
[imagesMutable enumerateObjectsUsingBlock: ^(UIScrollView verticalScroll, NSUInteger idx, BOOL *stop){ 
    [verticalScroll addSubView:[UIImageView setFrame:CGRectMake(0, yPos, width, height)]] 
    // some code 
    yPos += (height + 15) 
}]; 

比方说,如果imagesMutable了3个对象。当我从CGRectMake使用笛卡尔坐标的地方(x = 0,y = 0将在左下角)读取时。所以,它应该是

[verticalScroll addSubView:[UIImageView setFrame:CGRectMake(0, 0, 100, 150)]] 
[verticalScroll addSubView:[UIImageView setFrame:CGRectMake(0, 165, 100, 150)]] 
[verticalScroll addSubView:[UIImageView setFrame:CGRectMake(0, 330, 100, 150)]] 

这应该意味着

First CGRectMake should has bottom left at (0, 0) and top right at (100, 150) 
Second CGRectMake should has bottom left at (0, 165) and top right at (100, 315) 
Third CGRectMake should has bottom left at (0, 330) and top right at (100, 480) 

然后,从顶部到底部图像的顺序应该是3 - > 2 - > 1比较了imagesMutable的对象排序(1 - > 2 - > 3)

但是,为什么它按照1 - > 2 - > 3的顺序出现,就像启动应用程序时的图像可变对象排序一样?我错过了什么吗?

+2

对于UIKit的原点是左上角,为的cocos2d它的左下方 – 2012-03-01 09:13:10

+0

通过,你的意思是,CGRectMake是UIKit的? (我刚刚开始iOS开发仅2周,仍然令人困惑) – 2012-03-01 09:37:52

+2

CG功能是CoreGraphics。 (0,0),即框架之间的起源是不同的。 CGRectMake(0,0,100,150)本身只是一个具有原点= CGPoint(0,0)(原点)的结构,并且是独立的。这个起源在哪里取决于框架。您可以在两个框架中使用与(0,0)相同的矩形,但它们可能意味着屏幕上的位置不同。 – 2012-03-01 10:07:38

回答

33

(0,0)不是左下角,而是左上角。

该视图具有倒y坐标,因此y随着您向下移动屏幕而增加。

enter image description here

+0

+1图像。 (10char) – phlebotinum 2012-03-01 12:20:31