我想知道对于 iOS 应用程序,实现带有按钮和滑块的滑出式面板的最佳方法是什么?
也就是说,该应用程序将在屏幕的右下角有一个小的“i”图标,如下所示:
当触摸该图标时,大约屏幕 1/4 大小的面板将从底部滑出,显示按钮、滑块或可能的其他一些小部件。
实现它的最佳方法是什么 - 使用 Interface Builder 还是纯粹通过代码更好,以及用于面板的对象(UIView 或任何具有此滑出/滑入功能的现有小部件?)。
我想知道对于 iOS 应用程序,实现带有按钮和滑块的滑出式面板的最佳方法是什么?
也就是说,该应用程序将在屏幕的右下角有一个小的“i”图标,如下所示:
当触摸该图标时,大约屏幕 1/4 大小的面板将从底部滑出,显示按钮、滑块或可能的其他一些小部件。
实现它的最佳方法是什么 - 使用 Interface Builder 还是纯粹通过代码更好,以及用于面板的对象(UIView 或任何具有此滑出/滑入功能的现有小部件?)。
假设您要在应用程序中的多个位置使用它,您可能希望将其作为可重用组件。我建议让滑出屏幕成为它自己的视图控制器,如果需要,您可以使用 IB 创建它的视图。当用户点击“i”时,您将分配滑出视图控制器,将其视图作为子视图添加到当前视图控制器并为其设置动画。如果您需要在滑出和当前视图控制器之间进行通信,您可以在您的幻灯片上创建自定义委托协议。我认识到这是在做一些假设,但对您来说可能是一个干净的解决方案。
通过 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