在iOS中支持交互式模型原型的最简单方法?

时间:2011-04-17 14:01:59

标签: ios interface-builder uibutton nib

我有40张图片代表iOS应用程序的屏幕模型。我将每个全屏显示为UIImageView。我想通过每个屏幕上的按钮支持1-40的导航。我将在我想要支持此导航的位置添加透明UIButton。每个屏幕上的按钮不在同一位置。

我唯一的选择就是在需要这些按钮的地方创建40个笔尖并手工绘制?我在这里错过了基础课的机会吗?我的图像是可预测命名的,因此我计划在基类中使用简单的导航方法。

1 个答案:

答案 0 :(得分:1)

我会做这样的事情:拥有一个UIImageView和一个视图控制器。视图控制器有一个NSArray,比如buttonsOnPage。在数组内部,您将存储更多存储按钮的NSArrays。这些按钮都指向相同的操作,例如buttonPressed:。请记住,您可以指定tag,您可以使用这些来确定要去哪个“页面”。由于加载你的图像似乎是直截了当的我在这里跳过它。

这是一个小伪代码:

- (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];

...