从隐藏的顶部(如下拉列表)动画表格视图

时间:2016-05-24 15:11:06

标签: ios objective-c

每当按下我的下拉列表时,都会切换,但视图才会出现(因为它是隐藏的)。如何从选定的下拉列表中删除它,然后返回到未选中的下拉列表。我尝试了一些过渡但我无法完成任何工作。我希望它看起来像一个下拉列表。

-(void)addSubviewOvertop:(BOOL)selected
{
    dropDownTableView.hidden = !selected;
}

1 个答案:

答案 0 :(得分:1)

这样做的方法是使用动画(UIViewAnimations)。因此,在显示任何内容之前,将隐藏视图设置在可见视图框上方。当你想要显示框架时,动画到可视框架。

第一次加载视图时,设置隐藏的帧(我使用偏移)以及显示时的帧。然后在出现之前将您的视图设置为隐藏框架,以便在用户第一次看到主视图时不显示。

然后,当你想要显示它时,你将它设置为带有动画的显示框架,反过来隐藏它。

一个好主意是制作一个属性的setter,你可以在它发生之前拦截它......

然后,要显示菜单视图,您可以执行以下操作:

self.menuShowed = YES;

请注意,您必须使用self。如果使用_menuShowed,它将设置iVar,但不会触发setter。

未经测试的代码构思(假设您有一个名为menuView的连接且实例化的UIView(menuView)。:

@interface ViewController ()
@property (nonatomic, strong) UIView *menuView;
@property (nonatomic) CGRect hiddenFrame;
@property (nonatomic) CGRect showedFrame;
@property (nonatomic) BOOL menuShowed;

@end

@implementation ViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.hiddenFrame = CGRectOffset(self.menuView.frame, 0 - self.menuView.frame.size.height, 0);
    self.showedFrame = CGRectOffset(self.menuView.frame, self.menuView.frame.size.height, 0);

    _menuShowed = NO;
    self.menuView.frame = self.hiddenFrame;
}

- (void)setMenuShowed:(BOOL)menuShowed
{
    if (menuShowed) {
        [UIView animateWithDuration:0.7 animations:^{
            self.menuView.frame = self.showedFrame;
        }];
    } else {
        [UIView animateWithDuration:0.7 animations:^{
            self.menuView.frame = self.hiddenFrame;
        }];
    }

    _menuShowed = menuShowed;
}

@end