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 :(得分: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];
}