1

我有一個UIView作爲2個tableviews的容器。我有兩個按鈕可以控制數據在這些表格上的加載方式。基本上,當1個按鈕被竊聽了UIView滑出,以顯示與該按鈕的實現代碼如下,當其他按鈕被竊聽我需要它:可可觸摸嘗試延遲uiview的動畫之前,它再次彈出

  1. 接近
  2. 隱藏一號的tableview
  3. 然後取消隱藏第二次的tableview
  4. 然後UIView的滑回了

這裏就是我有

[UIView beginAnimations:nil context:nil]; 
     [UIView setAnimationDuration:0.5]; 
     [UIView setAnimationDelay:0.0]; 
     [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

     if(!isTableOpen){ 

      [self.fighterTableView setHidden:YES]; 
      [self.matchTableView setHidden:NO]; 

      isTableOpen = YES; 

      viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

      [self.view bringSubviewToFront:viewTableContainer]; 
      [UIView commitAnimations]; 

     }else{ 
      //isTableOpen = NO; 
      viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
      [UIView commitAnimations]; 
      [self.fighterTableView setHidden:YES]; 
      [self.matchTableView setHidden:NO]; 
      viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
      [UIView commitAnimations]; 
     } 

這裏的問題是,在else語句的commitanimations我試圖設置隱藏屬性,然後再彈出的UIView出來。發生了什麼只是隱藏和取消隱藏tableview,但動畫從未發生過。我覺得我需要使用延遲,但Idk如何,除非有一個更體面的方式來處理?

想法?

回答

1

而是利用setHidden方法的。爲什麼不嘗試使用setAlpha方法。

這將是這樣的:

[UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.5]; 
    [UIView setAnimationDelay:0.0]; 
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 

    if(!isTableOpen){ 

     [self.fighterTableView setAlpha:0.0]; 
     [self.matchTableView setAlpha:1.0]; 

     isTableOpen = YES; 

     viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

     [self.view bringSubviewToFront:viewTableContainer]; 
     [UIView commitAnimations]; 

    }else{ 
     //isTableOpen = NO; 
     viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
     [UIView commitAnimations]; 
     [self.fighterTableView setAlpha:0.0]; 
     [self.matchTableView setAlpha:1.0]; 
     viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
     [UIView commitAnimations]; 
    } 

我會建議你進行
[UIView setAnimationDidStopSelector:@selector(myAnimationMethod)]

取而代之的是阿爾法設置爲matchTableView 1.0的設置它的myAnimationMethod內。

因此,像這樣:

[UIView beginAnimations:nil context:nil]; 
[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
[UIView setAnimationDelegate:self]; 
[UIView setAnimationDidStopSelector:@selector(myAnimationMethodDidFinish:)] 
if(!isTableOpen){ 

    [self.fighterTableView setAlpha:0.0]; 

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

    [self.view bringSubviewToFront:viewTableContainer]; 
    [UIView commitAnimations]; 

}else{ 
    //isTableOpen = NO; 
    viewTableContainer.frame = CGRectMake(-352, 0, 352, 700); 
    [self.fighterTableView setAlpha:0.0]; 
    [UIView commitAnimations]; 
} 
-(void) myAnimationMethodDidFinish:(id) sender { 

[UIView setAnimationDuration:0.5]; 
[UIView setAnimationDelay:0.0]; 
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; 
if(!isTableOpen){ 

    [self.matchTableView setAlpha:1.0]; 

    isTableOpen = YES; 

    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 

    [self.view bringSubviewToFront:viewTableContainer]; 
    [UIView commitAnimations]; 

}else{ 
    //isTableOpen = NO; 
    [self.matchTableView setAlpha:1.0]; 
    viewTableContainer.frame = CGRectMake(0, 0, 352, 700); 
    [UIView commitAnimations]; 
} 
} 
+0

您可以更改根據您的需要的延遲時間。 – m4n1c 2013-05-09 08:36:01

+0

該方法是否會在「commitAnimations」部分之後執行?下午工作後伊馬儘快嘗試。 – gdubs 2013-05-09 12:20:38

+0

也,我不必刪除viewtablecontainer.frame從其他,因爲它已經在動畫methoddidfinish?或沒有? – gdubs 2013-05-09 12:36:49