0

我有一个运行良好的 for 循环。我在一个新的 UIVIew 子类分配中添加,在每个循环迭代中完成:

  for (n=something; n>0; n--)
{
   //(...)

    MyView* theview=[[myView alloc]initWithFrame:self.frame];
    float y=sin(DEGREES_TO_RADIANS(currentAngle));
    float x=cos(DEGREES_TO_RADIANS(currentAngle));

    theview.point1=CGPointMake(x, y);  
  // printf x & y here

    [self addSubview:theview];
}

其实是分配了view,但是loop里面定义的point和我在view里面看的时候point1是不一样的。

事实上,view 的所有迭代似乎都在循环结束后分配,正如 view drawrect 方法中的 printf 所述,该方法在调用循环的所有迭代中的所有 printf 后调用。如果不清楚,我会看到类似的内容:

x=1 Y=1 x=2 y=2 x=3 y=3 printf 从视图 printf 从视图 printf 从视图

. 为什么?提前致谢!

4

1 回答 1

6

视图被立即分配和初始化。它们也会立即添加到视图层次结构中。然而,在下一次渲染视图层次结构之前,它们不会被要求渲染自己。由于此刷新是在主线程上完成的,在您完成分配视图之前您会阻塞,您的视图的 -drawRect: 方法将永远不会在您至少从该方法返回之前被调用(可能还有其他方法取决于在当前事件链和当前堆栈上)。

于 2012-09-28T21:37:20.060 回答