2014-01-28 139 views
0

对不起,我的英语不太好。 我尝试创建20个具有固定高度和宽度但屏幕上的位置不同的UIViews。在不重叠的位置创建20个UIViews不重叠

for(int i = 0; i < 20; i++) { 

    UIView *view = [[UIView alloc]init]; 
    view.backgroundColor = [UIColor redColor]; 
    view.tag = i; 

    randomX = fmod(arc4random(),((int)self.view.frame.size.width - view.frame.size.width)); 
    randomY = fmod(arc4random(),((int)self.view.frame.size.height - view.frame.size.height)); 
    view.frame = CGRectMake(randomX, randomY, 100, 100); 

这只是我的程序的一部分。 如果我这样做,uiviews是在屏幕上创建的,但它们重叠。 我知道有一个功能,如CGRectIntersectRect,但我不知道它在这种情况下如何正确工作。 有人可以帮我解决这个问题吗?

回答

0

这里有一小段代码,而不是真正的考验,但我认为它会工作(我想在理论上可以永远运行,但在现实中,它需要一秒钟:-)) -

NSMutableArray *views = [NSMutableArray array]; 
for(int i = 0; i < 20; i++) 
{ 
    UIView *view = [[UIView alloc]init]; 
    view.backgroundColor = [UIColor redColor]; 
    view.tag = i; 

    __block BOOL ok = YES; 

    do 
    { 
     CGFloat randomX = fmod(arc4random(),((int)self.view.frame.size.width - view.frame.size.width)); 
     CGFloat randomY = fmod(arc4random(),((int)self.view.frame.size.height - view.frame.size.height)); 

     view.frame = CGRectMake(randomX, randomY, 100, 100); 

     [views enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 
     { 
      CGRect rect1 = ((UIView *)obj).frame; 
      CGRect rect2 = view.frame; 

      if (CGRectIntersectsRect(rect1, rect2)) 
      { 
       ok = NO; 
       *stop = YES; 
      } 
      else 
       ok = YES; 
     }]; 
    } 
    while (!ok); 

    [self.view addSubview:view]; 
    [views addObject:view]; 
} 
+0

如果视图可以从主视图的子视图使用视图标签重复使用,那么管理视图数组需要什么 –

+0

感谢!!有用!!! – user3245651

+0

酷!也许你可以将我的答案标记为接受:-) – SomaMan