UIView起源于子视图

时间:2011-01-28 16:25:19

标签: iphone objective-c uiview

我遇到了一个让我疯狂的问题......我知道这一定是一个简单的解决办法,但我在网上找不到任何东西(但是!可能会在错误的地方找工作)。

我有一堆按钮放在视图中,带有循环:

//make the button smaller and position
        CGRect buttonFrame = button.frame;
        buttonFrame.size = CGSizeMake(41, 41);
        buttonFrame.origin = CGPointMake(10+(43*i), 415);
        button.frame = buttonFrame;

这很有效......但现在我想将它们添加到另一个视图中,它们就会消失。令人讨厌的代码行是:

buttonFrame.origin = CGPointMake(10+(43*i), 415);

我认为这必须在self.view的坐标下工作,而不是按住按钮的新子视图。我是否需要一个新的CGContext用于超级视图。

我尝试过类似的事情:

 buttonFrame.origin = [newView CGPointMake(10+(43*i), 415)];

但这导致了各种各样的错误。

谢谢你的时间!

2 个答案:

答案 0 :(得分:1)

指定为视图框架的CGRect的原点是视图将从其超视图放置的偏移量。

因此,如果您使用(100,100,200,200)的CGRect,视图将在原点右侧100像素,向南100像素(还要记住iOS视图坐标系原点位于左上角),大小为200x200。

您的按钮位于其超级视图的本地原点(左上角)下方415像素处,可能会将其置于视野之外。

答案 1 :(得分:0)

buttonFrame.origin = [newView CGPointMake(10+(43 * i),415)]; - 这行代码没有任何意义,因为CGPointMake是C函数,而不是ObjectiveC方法,所以你不能像消息一样发布它。 如果要添加子视图,则必须使用[newView addSuview:button];并确保您已将视图添加到另一个视图。