 <p>Thanks to art-divin, and to Jean-Baptiste for providing the answer via email. Below is the code that repositions a button matrix on rotation. The code for creating the button matrix remains the same.</p> <pre><code>- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration { if (orientation == UIInterfaceOrientationPortrait) { COLUMNS = 7; ROWSS = 8; int i=0; // button count iterator for (int rows = 0; rows &lt; ROWSS; rows++) { for (int columns = 0; columns &lt; COLUMNS; columns++) { NSUInteger chapter = columns + rows * COLUMNS + 1; if (chapter &gt; 50) break; UIButton *b = (UIButton *)[call.createButtonArray objectAtIndex:i++]; b.frame = CGRectMake(columns * WIDTH, rows * 38, HEIGHT, 37); // columns * X, rows * Y, width, height } } [rotateController rotateChapterButtons_Portrait]; } else if (orientation == UIInterfaceOrientationLandscapeRight ||orientation == UIInterfaceOrientationLandscapeLeft) { COLUMNS = 10; ROWSS = 9; int i=0; // button count iterator for (int rows = 0; rows &lt; ROWSS; rows++) { for (int columns = 0; columns &lt; COLUMNS; columns++) { NSUInteger chapter = columns + rows * COLUMNS + 1; if (chapter &gt; 50) // &gt; greater than break; NSLog(@"%i:",chapter); UIButton *b = (UIButton *)[call.createButtonArray objectAtIndex:i++]; b.frame = CGRectMake(columns * 48, rows * 38, 47, 37); // columns * X, rows * Y, width, height } } [rotateController rotateChapterButtons_Landscape]; } </code></pre> <p>}</p>