随机交换4个UIButton的位置

时间:2015-02-03 20:16:05

标签: ios objective-c xcode uibutton

我有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的位置随机交换。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

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

我认为这会奏效。

答案 1 :(得分:0)

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