2

我想知道对于 iOS 应用程序,实现带有按钮和滑块的滑出式面板的最佳方法是什么?

也就是说,该应用程序将在屏幕的右下角有一个小的“i”图标,如下所示:

在此处输入图像描述

当触摸该图标时,大约屏幕 1/4 大小的面板将从底部滑出,显示按钮、滑块或可能的其他一些小部件。

实现它的最佳方法是什么 - 使用 Interface Builder 还是纯粹通过代码更好,以及用于面板的对象(UIView 或任何具有此滑出/滑入功能的现有小部件?)。

4

2 回答 2

2

假设您要在应用程序中的多个位置使用它,您可能希望将其作为可重用组件。我建议让滑出屏幕成为它自己的视图控制器,如果需要,您可以使用 IB 创建它的视图。当用户点击“i”时,您将分配滑出视图控制器,将其视图作为子视图添加到当前视图控制器并为其设置动画。如果您需要在滑出和当前视图控制器之间进行通信,您可以在您的幻灯片上创建自定义委托协议。我认识到这是在做一些假设,但对您来说可能是一个干净的解决方案。

于 2012-05-20T18:53:43.493 回答
1

通过 Interface Builder 创建它是一种痛苦(无论如何,该工具很烂)。您绝对应该在代码中创建它。如果您可以专注于代码并且不必为了完全显示视图而在 IB 中设置神秘属性,那么维护起来也会更容易......

您可以尝试像这样实现它:

@interface SlideOutMenu: UIView {
    UIImageView *imgView;
    UITapGestureRecognizer *tap;
}

- (id)initWithImage:(UIImage *)img;

@end


@implementation SlideOutMenu

- (id)initWithImage:(UIImage *)img
{
    if ((self = [self initWithFrame:CGRectMake(0, someY, 44, 44)]))
    {
        imgView = [[UIImageView alloc] initWithImage:img];
        [self addSubview:imgView];
        [imgView release];

        tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_tapped)];
        [self addGestureRecognizer:tap];
        [tap release];
    }
    return self;
}

- (void)_tapped
{
    if (self.frame.origin.x > 1.0) // 1.0: some tolerance b/c of floating point numbers
    {
        [UIView animateWithDuration:0.3 animations:^{
            self.frame = CGRectMake(0, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
        }];
    }
    else
    {
        [UIView animateWithDuration:0.3 animations:^{
            self.frame = CGRectMake(120.0, self.frame.origin.y, self.frame.size.width, self.frame.size.height);
        }];
    }
}

@end
于 2012-05-20T18:56:50.823 回答