随机交换4个UIButtons的位置

Randomly swap the positions of 4 UIButtons

我有 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];

但我真的不确定从这里到哪里才能使 UIButton 的位置随机交换。任何帮助将不胜感激

您可以使用 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;

我认为这会奏效。

基本上你想创建 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]];
}