随机交换 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 的位置的主要内容,如果未能解决你的问题,请参考以下文章
我的 UIButton 从随机位置开始,而不是从中心开始并移动