【问题标题】:put UIButtons at random position将 UIButtons 放在随机位置
【发布时间】:2014-08-14 09:50:33
【问题描述】:

如何仅将 4 个 UIButtons 放置在 4 个随机位置。 我有一个应用程序,每次按下更改位置按钮时都有 4 个 UIButtons,UIButtons 应该改变那里的位置,例如 Button1 随机移动到 Button4 的位置,Button4 随机移动到任何其他 Button 的位置

当我使用此代码时,按钮位置没有变化

-(void)changeButtonPosition {

NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:[NSValue valueWithCGRect:CGRectMake(222,246,27,21)]];
[array addObject:[NSValue valueWithCGRect:CGRectMake(80, 246, 27, 21)]];
[array addObject:[NSValue valueWithCGRect:CGRectMake(165, 324, 27, 21)]];
[array addObject:[NSValue valueWithCGRect:CGRectMake(222, 324, 27, 21)]];


  NSUInteger count = [array count];
for (NSUInteger i = 0; i < count; ++i) {
    int nElements = count - i;
    int n = (arc4random() % nElements) + i;
    [array exchangeObjectAtIndex:i withObjectAtIndex:n];
}
btn1.frame = [((NSValue *)[array objectAtIndex:0]) CGRectValue];
btn2.frame = [((NSValue *)[array objectAtIndex:1]) CGRectValue];
btn3.frame = [((NSValue *)[array objectAtIndex:2]) CGRectValue];
btn4.frame = [((NSValue *)[array objectAtIndex:3]) CGRectValue];

} 谢谢!

【问题讨论】:

  • 你需要写一个函数来改变每个按钮的(x,y),就是这样。自己尝试一下,如果之后需要任何帮助,请发布您尝试过的代码。
  • 我需要将按钮移动到随机位置,如果我更改 (x,y),那么该位置将保持在我决定它应该移动到 4 帧中的随机位置的位置
  • 嘿,伙计,可以通过将所有帧放入 nasarry 并根据您的选择更改数组并分配给按钮帧

标签: ios objective-c xcode uibutton cgrectmake


【解决方案1】:

将每个按钮的位置 (x,y) 存储在一个数组中。

然后生成一组随机数,使之前的位置没有数字。

例如:

1,2,3,4 - 初始状态

2,4,1,3 - 在随机迭代中。

然后从数组中获取位置并将按钮添加到该位置。

希望这会有所帮助。 :)

【讨论】:

    【解决方案2】:

    这很简单,就像 pawan 评论的那样: 编写一个返回 CGPoint 的函数(其中包含 x 和 y 位置,随机创建),并在 viewDidLoad 中为 4 个按钮生成 4 个随机坐标集。这将在 4 个随机位置设置您的 4 个按钮。

    然后在您的按钮处理程序中,执行相同操作,然后从那里移动按钮。

    应该很简单。

    编辑:

    要让方法返回 (x,y) 位置,您需要执行以下操作:

     - (CGPoint)randomPoint {
       int random_X = arc4Random() % WIDTH;
       int random_Y = arc4Random() % HEIGHT;
       return CGPointMake(random_X, random_Y);
     }
    

    那么你的调用方法需要对这个返回的 CGPoint 值做一些事情。

    编辑 2:

    如果您只需要 4 个按钮框架中的一个框架,那么您需要执行以下操作: 使用 4 个按钮框架创建一个 NSArray,然后生成一个由 4 个数字组成的列表,这些数字是列表 [0, 1, 2, 3] 的随机排列,并以这种方式获得您的“随机”框架。

    【讨论】:

    • 要做哪一部分?随机位置生成还是按钮处理?
    • -(void)muh { int x_coord = arc4random() % 321; int y_coord = arc4random() % 481; CGRect newframe = [btn1 帧]; newframe.origin.x = x_coord; newframe.origin.y = y_coord; btn1.frame = 新帧;上面的函数从整个屏幕生成随机位置,但我需要生成位置(65,246)或(222,246)或(65,324)或(222,324)
    • 查看我编辑的答案。您可以尝试初始化 random_X 和 random_Y 的方式,以使它们在您想要的特定范围内。
    • 您不是随机分配按钮索引,而是将它们放回原始位置。尝试随机分配 cgrect 值
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    相关资源
    最近更新 更多