Самый простой способ поддержать прототип интерактивного макета в iOS? - PullRequest
0 голосов
/ 17 апреля 2011

У меня есть 40 изображений, которые представляют макеты экрана приложения iOS.Я буду отображать каждый полный экран как UIImageView.Я хочу поддерживать навигацию с 1-40 через кнопку на каждом экране.Я добавлю прозрачные UIButton s, где я хочу поддерживать эту навигацию.Кнопки не будут находиться в одинаковом положении на каждом экране.

Является ли мой единственный вариант создания 40 перьев и рисования от руки там, где я хочу эти кнопки?Я что-то упускаю здесь для базового класса?Мои изображения имеют предсказуемое имя, поэтому я планирую использовать простые методы навигации в базовом классе.

1 Ответ

1 голос
/ 17 апреля 2011

Я бы сделал что-то вроде этого: есть один 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];

...
...