我想知道一个iOS应用程序,实现带有按钮和滑块的滑出式面板的最佳方法是什么?
也就是说,该应用程序将有一个小的" i"屏幕右下角的图标看起来像:
当触摸该图标时,大小约为屏幕1/4的面板将从底部滑出,显示按钮,滑块或其他一些小部件。
实现它的最佳方法是什么 - 使用Interface Builder,或者更纯粹是通过代码,以及用于面板的对象(UIView或任何现有的小部件,在功能中滑出/滑动?)。
答案 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