2016-03-14 58 views
0
viewDidLoad : 

topBarMenu = [[TopBarMenu alloc] initWithFrame:CGRectMake(0, 64, 1024, 0)]; 
    [self.view addSubview:topBarMenu]; 
    topBarMenu.clipsToBounds = YES; 


- (void)menuButton_TouchUpInside:(TopBarIcon *)sender 
{ 
    isTopBarMenuShown = !isTopBarMenuShown; 

    if (isTopBarMenuShown) { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 64, 1024, 600); 
           }]; 
    }else { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 64, 1024, 0); 
       }]; 
    } 
} 

在我的代碼我想動畫顯示和隱藏我的菜單。展示非常步驟,看起來不錯。隱藏立即刪除沒有任何動畫的屏幕。如何解決這個問題呢 ?框架動畫不起作用

回答

0

你需要當您使用自動佈局和動畫設置不變。所以,在開始動畫之前設置常量。所以,創建y位置約束的出口。

topbaryposition.constant=0; (IBOutlet of Top position (Y postion of Topbar)) 


- (void)menuButton_TouchUpInside:(TopBarIcon *)sender 
{ 
    isTopBarMenuShown = !isTopBarMenuShown; 

    if (isTopBarMenuShown) { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 64, 1024, 600); 
           }]; 
    }else { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 64, 1024, 0); 
       }]; 
    } 
} 

喜歡的東西,

編輯: -

我發現你的問題。

您的問題seeting框架中的其他時候,你躲在topbar.you已設置只有高度,但你還需要設置Ÿpositioan爲0 ..

喜歡的東西,

topBarMenu.frame = CGRectMake(0, 0, 1024, 0); 




- (void)menuButton_TouchUpInside:(TopBarIcon *)sender 
{ 
    isTopBarMenuShown = !isTopBarMenuShown; 

    if (isTopBarMenuShown) { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 64, 1024, 600); 
           }]; 
    }else { 

     [UIView animateWithDuration:1.5 animations:^{ 
      topBarMenu.frame = CGRectMake(0, 0, 1024, 0); 
       }]; 
    } 
} 
+0

謝謝,但它並沒有解決我的問題。 呃。找到解決方案,我添加了[self.view layoutIfNeeded]並且工作正常。 – hds

+0

好的。所以,你解決了你的問題。好。 –

0

試試這個

if (sideView.frame.origin.x >= 0) 
    { 
     [UIView animateKeyframesWithDuration:0.5 delay:0 options:UIViewKeyframeAnimationOptionBeginFromCurrentState animations:^{ 
      sideView.frame=CGRectMake(-400, 45, CGRectGetWidth(sideView.frame), CGRectGetHeight(sideView.frame)); 
     } completion:^(BOOL finished) { 

     }]; 
    } 

    else 
    { 
     [UIView animateKeyframesWithDuration:0.5 delay:0 options:UIViewKeyframeAnimationOptionBeginFromCurrentState animations:^{ 
      sideView.frame=CGRectMake(0, 45, CGRectGetWidth(sideView.frame), CGRectGetHeight(sideView.frame)); 
     } completion:^(BOOL finished) 
     { 

     }]; 
    } 
0

我覺得直接設置框架不是一個很好的方法,我建議改變框架更合適。 如:

- (void)menuButton_TouchUpInside:(TopBarIcon *)sender 
{ 
    isTopBarMenuShown = !isTopBarMenuShown; 

    if (isTopBarMenuShown) { 

     [UIView animateWithDuration:1.5 animations:^{ 
      CGRect rect = topBarMenu.frame; 
      rect.size.height = 600.0f; 
      topBarMenu.frame = rect; 
      //topBarMenu.frame = CGRectMake(0, 64, 1024, 600); 
           }]; 
    } else { 

     [UIView animateWithDuration:1.5 animations:^{ 
      CGRect rect = topBarMenu.frame; 
      rect.size.height = 0.0f; 
      topBarMenu.frame = rect; 
      //topBarMenu.frame = CGRectMake(0, 64, 1024, 0); 
       }]; 
    } 
}