0

我怎样才能开发一个像这样的工具栏,有一个按钮,当它被按下时会显示另一个工具栏(滑动到当前工具栏的顶部)?这是来自 Apple 的 iPhoto 应用程序的屏幕截图。

http://i.stack.imgur.com/dKYZq.png

4

1 回答 1

1

我使用以下方法使其工作(免责声明:这可能会违反 HIG!):

  1. 我添加了一个新的基本 UIViewController。
  2. 我在 UIViewController 的视图中添加了一个 UIToolbar。我将此 UIToolbar 连接到我的 UIViewController 中名为“BaseToolbar”的属性。
  3. 在“BaseToolbar”中,我添加了一个按钮。我将此按钮连接到我的 UIViewController 中名为“AddPressed:”的 IBAction。
  4. 我在 UIViewController 的 xib 中添加了一个 UIToolbar,但不在UIViewController 的视图中。我只是将它添加到设计表面上。我将此 UIToolbar 连接到我的 UIViewController 中名为“SecondToolbar”的属性。
  5. 在“SecondToolbar”中,我添加了一个按钮。我将此按钮连接到我的 UIViewController 中名为“TrashPressed:”的 IBAction。

我使用了以下代码:

- (IBAction)AddPressed:(id)sender {
    CGRect secondCurrRect = [[self SecondToolbar] frame];
    [[self SecondToolbar] setFrame:CGRectMake(0, -1 * secondCurrRect.size.height, secondCurrRect.size.width, secondCurrRect.size.height)];
    [[self view] addSubview:[self SecondToolbar]];
    [[self view] bringSubviewToFront:[self SecondToolbar]];
    [UIView animateWithDuration:1.0
                     animations:^(void){
                         [[self SecondToolbar] setFrame:CGRectMake(0, 0, secondCurrRect.size.width, secondCurrRect.size.height)];
                     }];
}
- (IBAction)TrashPressed:(id)sender {
    CGRect secondCurrRect = [[self SecondToolbar] frame];
    [UIView animateWithDuration:1.0
                     animations:^(void){
                         [[self SecondToolbar] setFrame:CGRectMake(0, -1 * secondCurrRect.size.height, secondCurrRect.size.width, secondCurrRect.size.height)];
                     }
                     completion:^(BOOL finished) {
                         [[self SecondToolbar] removeFromSuperview];
                     }];
}

使用该代码,新的 UIToolbar在“基本”UIToolbar顶部滑动开/关。


编辑/更新

让我们尝试不同的策略。 (这假设您UIToolbar在设计时将对象添加到您的 xib)

  1. 将 Toolbar #1(始终显示在屏幕上的工具栏)添加到视图的顶部,并根据需要放置它。
  2. 在 Toolbar #1 下方添加 Toolbar #2(上/下滑动的那个),并使用您想要的按钮构建它。
  3. 将以下代码行放入您的-(void)viewDidLoad方法中(这会将第二个工具栏移出屏幕):

[[self Toolbar2] setFrame:
    CGRectMake(0,                                    // origin.x
               -[[self Toolbar2] frame].size.height, // origin.y
               [[self Toolbar2] frame].size.width,   // size.width (remains the same)
               [[self Toolbar2] frame].size.height)  // size.height (remains the same)
];

然后,使用上面的代码,但跳过对addSubview:and的调用removeFromSuperview

现在这有意义吗?

于 2012-04-30T18:01:31.810 回答