2014-01-28 140 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