1

我有一个包含要显示在视图上的图像的数组。我有一个循环遍历我的数组并选择一个随机图像,然后在我的视图上的随机位置显示图像。每个图像都有一个“值”,循环运行直到达到 50 的总“值”。

我的问题是,我不希望我的图像相互接触或堆叠在一起。我使用过 google 和 youtube 以及其他各种编码帮助网站,但由于某种原因找不到适合我需求的解决方案。


代码

-(void)randomizeImages {
    //get random number
    int randomImgNum = arc4random_uniform(5);

    //use random number to get an image from array
    UIImage *tempImg = [_imageArray objectAtIndex:randomImgNum];

    //add UIImage to a UIImageView and place it on screen somewhere
    UIImageView *tempImgView = [[UIImageView alloc] initWithImage:tempImg];

    //define the center points
    tempImgView.center = CGPointMake(arc4random() % 320,arc4random() % 480);
    [self.view addSubview:tempImgView];


    //increment count
    myImgCount = myImgCount+(randomImgNum+1);

    //check count
    if (myImgCount<50) {
        [self randomizeImages];//do it again if not yet at 50
    }
}

我打算包括一个截图,但显然我需要 10 声望才能做到。我到处寻找帮助,并在几天前发布了这个问题,但是建议的代码一直给我一个szone_malloc_should_clear + 14错误,我不知道这意味着什么或如何解决它。问题主题已死,我真的需要帮助解决这个问题。


截屏

截屏

4

1 回答 1

0

您必须记录生成图像的所有位置。为您的 50 张图片制作一个包含 50 次迭代的外部 for 循环。然后做一个内循环

  1. 为带有数字的新图片生成随机 x,y 坐标i
  2. 循环遍历所有图片 from 0toi-1并检查新图片是否没有堆叠在另一张图片上,如果它接触,循环再次重复,以获得安全限制(假设 100 次迭代)
  3. 找到好的坐标后,绘制图片并将您的 x,y 坐标存储到数组中并退出内部循环

检查此链接以进行矩形重叠检测。你可以用一个简单的技巧来升级算法,这样那些矩形就不会彼此靠近......或者谷歌起来how to check rectangle collision

  1. 为其左上角和右下角的位置创建新的临时变量并计算它们(例如rect_1_bottom_right_point_x = x + rect_1_width
  2. margin从左上角减去 axy,在右下角添加一个边距xy因此它们看起来更大以进行测试
  3. 现在测试这两个矩形是否重叠
于 2013-11-02T20:47:43.760 回答