Я бы сделал что-то вроде этого: есть один UIImageView и контроллер представления. Контроллер представления имеет NSArray, скажем buttonsOnPage
. Внутри массива вы можете хранить больше NSArrays, хранящих кнопки. Все эти кнопки указывают на одно и то же действие, скажем, buttonPressed:
. Помните, что вы можете назначить tag
s, вы можете использовать их, чтобы определить, к какой «странице» перейти. Поскольку загрузка ваших изображений кажется простой, я пропускаю это здесь.
Вот небольшой псевдокод:
- (void)initButtons
{
NSMutableArray *page;
UIButton *button;
buttonsOnPage = [[NSMutableArray alloc] init];
// Page 0
page = [NSMutableArray array];
button = [UIButton buttonWithType:UIButtonTypeCustom];
[button addTarget:self action:@selector(buttonPressed:) forControlEvent:UIEventTouchUpInside];
[button setTag:5]; // When pressed, go to page 5.
[button setFrame:...];
[page addObject:button];
...
[buttonsOnPage addObject:page];
...
}
- (void)setUpPage:(NSUInteger)page
{
// Remove all previous buttons
for (UIView *view in [myImageView subviews]) {
[view removeFromSuperview];
}
for (UIButton *button in [buttonsOnPage objectAtIndex:page]) {
[myImageView addSubview:button];
}
// Also set the correct image.
}
- (void)buttonPressed:(id)sender
{
[self setUpPage:[(UIView *)sender tag]];
}
Вы можете сделать способ настройки кнопок проще / быстрее печатать, определив макрос:
#define NEW_BUTTON(page, x, y, width, height) \
do {
button = [UIButton buttonWithType:UIButtonTypeCustom]; \
[button addTarget:self action:@selector(buttonPressed:) forControlEvent:UIEventTouchUpInside];\
[button setTag:page]; \
[button setFrame:CGRectMake(x, y, width, height)]; \
[page addObject:button];
} while (0);
Тогда это довольно быстро сделать:
// Page 0
page = [NSMutableArray array];
NEW_BUTTON(1, 10, 20, 20, 20);
NEW_BUTTON(2, 10, 60, 20, 20);
[buttonsOnPage addObject:page];
// Page 1
page = [NSMutableArray array];
NEW_BUTTON(3, 70, 20, 20, 20);
NEW_BUTTON(4, 10, 160, 20, 20);
[buttonsOnPage addObject:page];
...