随机交换 4 个 UIButton 的位置

Posted

技术标签:

【中文标题】随机交换 4 个 UIButton 的位置【英文标题】:Randomly swap the positions of 4 UIButtons 【发布时间】:2015-02-03 20:16:05 【问题描述】:

我有 4 个 UIButton,位于我的 VC 中。我想随机交换每个按钮的位置。我已将所有 UIButton 位置放入 NSMutableArray

self.frameArray = [[NSMutableArray alloc] init];

[self.frameArray addObject:[NSValue valueWithCGRect:CGRectMake(60,171,64,64)]];
[self.frameArray addObject:[NSValue valueWithCGRect:CGRectMake(198,171,64,64)]];
[self.frameArray addObject:[NSValue valueWithCGRect:CGRectMake(60,333,64,64)]];
[self.frameArray addObject:[NSValue valueWithCGRect:CGRectMake(198,333,64,64)]];

`

我所有的按钮都在一个 NSArray 中

self.buttons = @[self.button1, self.button2, self.button3, self.button4];

但我真的不确定从这里去哪里,使 UIButtons 的位置随机交换。任何帮助将不胜感激

【问题讨论】:

所以您的目标基本上是将 4 个 frameArarys 中的 1 个分配给 self.buttons 中的 1 个按钮而不重复坐标正确吗? 是的,就是这样,希望 self.buttons 中的所有按钮都具有来自 frameArray 的随机 .frame 【参考方案1】:

基本上你想创建 frameArray 然后随机化帧的顺序,然后将它们应用到按钮上。

第一步:随机化frameArray(创建frameArray后放置代码)

NSUInteger count = [self.frameArray count];
for (NSUInteger i = 0; i < count; ++i) 
    NSInteger remainingCount = count - i;
    NSInteger exchangeIndex = i + arc4random_uniform((u_int32_t )remainingCount);
    [self.frameArray exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];

第二步:设置按钮框架

for (int i = 0; i < [self.buttons count]; i++) 
    [[self.buttons objectAtIndex:i] setFrame:[self.frameArray objectAtIndex:i]];

【讨论】:

我在 [[self.buttons objectAtIndex:i] setFrame:[self.frameArray objectAtIndex:i]] 处遇到错误;错误:不兼容类型 CGRect 的参数。我是否设置了我的 frameArray 错误? 它使用 [[self.buttons objectAtIndex:i] setFrame:[((NSValue *)[self.frameArray objectAtIndex:i]) CGRectValue]];但是所有的按钮都消失了?可能是我设置框架的方式吗? 效果很好,我没有在正确的位置创建框架。感谢您的帮助【参考方案2】:

您可以使用 arc4random_uniform() 从数组中获取一个随机按钮和一个随机 Rect,然后将随机 Rect 分配给随机按钮的框架:

NSInteger randomButton = arc4random_uniform((u_int32_t)self.buttons.count);
NSInteger randomRect = arc4random_uniform((u_int32_t)self.frameArray.count);

UIButton *button = self.buttons[randomButton];
NSValue *theRectValue = self.frameArray[randomRect];
CGRect rect = [theRectValue CGRectValue];

button.frame = rect;

我认为这会奏效。

【讨论】:

我收到一个错误和警告。警告'NSUInteger randomRect = arc4random_uniform(self.frameArray.count);错误:隐式转换'和错误 CGRect rect = self.frameArray[randomRect];错误:使用不兼容类型的表达式初始化 CGRect

以上是关于随机交换 4 个 UIButton 的位置的主要内容,如果未能解决你的问题,请参考以下文章

jAVA如何使一个数组里面的元素随机交换位置

在 UIbutton 中分配随机标题

Swift - UIButton 改变宽度

我的 UIButton 从随机位置开始,而不是从中心开始并移动

Python 随机产生[0,100]以内的随机数,找到最大值和最小值并交换位置

使用滑动手势交换两个 UIButton