在iOS上,实现一个装满小部件的滑出式面板有什么好方法?

时间:2012-05-20 18:28:19

标签: ios uiview interface-builder

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

也就是说,该应用程序将有一个小的" i"屏幕右下角的图标看起来像:

enter image description here

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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