2016-05-24 79 views
0

只要按下下拉菜單,就會切換此視圖,但視圖剛剛出現(因爲它已隱藏)。如何讓它從選定的下拉菜單中下來,然後返回到未選中的下拉菜單中。我嘗試了一些轉換,但我無法獲得任何工作。我希望它看起來像一個下拉菜單出現。從頂部(如下拉)隱藏的動畫桌面視圖

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

設置你的下拉框將高於屏幕和[UIView的animateWithDuration]動畫下拉框 – stefos

+0

你。可以嘗試爲tableView的高度添加一個NSLayoutConstraint,並設置一個適合您需求的常量。 – hacker2007

+0

是的stefos - 我做了你所說的代碼雖然看起來不太好,但它的工作原理非常感謝! –

回答

1

要做到這一點的方法是使用動畫(UIViewAnimations)。因此,您在顯示任何內容之前將隱藏視圖設置在可見視圖框架上方。當您想要展示相框時,將動畫設置爲可視框架。

當您第一次加載視圖時,您設置隱藏的幀(我使用偏移),並顯示時您的幀。然後在出現將您的視圖設置爲隱藏框架之前,以便在用戶第一次看到主視圖時不顯示它。

然後,當您想要顯示它時,可以用動畫將其設置爲顯示幀,反之則將其隱藏。

一個好主意是讓一個屬性,它發生在哪裏,然後才能攔截集的制定者......

然後,以顯示菜單視圖,你可以這樣做:

self.menuShowed = YES; 

請注意,你必須使用自我。如果你使用_menuShowed,它會設置iVar,但不會觸發setter。

未經測試的代碼想法(假設你有一個連接並實例化的UIView(menuView)命名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