2013-11-20 111 views
1

我想從底部移動一個UIView到頂部。 我正在使用iOS SDK 7.0,uiviewcontroller的自動佈局已打開。UIView animateWithDuration沒有得到執行

- (void) viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.view bringSubviewToFront: myView]; 
    [self moveFromBottom]; 

} 

- (void) moveFromBottom{ 
    [myView setBackgroundColor:[UIColor redColor]]; 
    CGPoint top = myView.center; 
    top.y = self.view.frame.size.height - top.y; 
    [UIView animateWithDuration:5.0f 
          delay:0.0f 
         options:UIViewAnimationOptionCurveLinear | UIViewAnimationOptionBeginFromCurrentState 
        animations:^{ 
         myView.center = top; 
        } 
        completion:^(BOOL finished){ 
         if (finished) { 
          NSLog(@"finished"); 
         } 
        } 
    ]; 

完成塊得到執行並打印完成但UIView不移動。

我也嘗試了動畫幀而不是中心,它也不工作。

但是,如果我嘗試動畫阿爾法相反,它會工作

編輯:如果我在故事板關閉自動佈局也將正常工作。

回答

0

myView最初在哪裏?如果是死點:

top.y = self.view.frame.size.height - top.y; 

將等於top.y的初始值。所以它不會移動。你的意思是把它移動到頂部。如果是這樣,我認爲它應該是:

top.y = (myView.frame.size.height/2.0f); 

此外,如果有自動佈局啓用,請檢查您是否有什麼限制,並確保其不會迫使它在其位置上的引腳。我會禁用自動佈局,以確保這不會導致您的問題。如果一切都失敗了,NSLog記錄top.y的值以確定它的用途。

+0

沒有top.y和myView的center.y很不一樣 – Will

2

Autolay打開時,您無法明確設置框架或中心。我的建議是爲myView上的y原點約束創建一個IBOutlet,並在您的動畫塊中設置constant屬性。這應該正確動畫。

+0

哪裏可以找到y-origin約束?我知道有高度和頂部/底部空間來超級查看可以控制y的約束。 – Will

+0

超級查看約束的頂部是您想要的。如果視圖的高度是靜態的,則不需要底部超級查看約束。 – daltonclaybrook