2013-02-05 48 views
0

從下面的圖片中,當用戶點擊view1時,view2和view3向下滑動到頁腳,通過將頁腳3的約束條件設置爲0(ish)來有效拉動view2和view3。我有我的xib設置與第一個圖像中顯示的約束。 2.最重要的[我現在]是view1View2約束和view3Footer約束使用NSLayoutConstraints移動UIViews所需的建議

xib with constraints and views

爲了實現滑下我已經結束了對view1view2約束設置一個低優先級和高優先爲view3Footer約束,然後更新view3Footer約束不斷在animateWithDuration

successful slide down

我的問題越來越視圖2和視圖3滑回了,如果我用同樣的方法,我會通過實現設置v iew1view2約束常數爲2.

我相信上述問題的上滑是view3Footer約束優先於view1View2約束,優先級似乎只能被讀取,所以我不能更改這些具體。我明白,在設置限制時,我只是要求視圖定位。

...我相信我可能會使用完全錯誤的方法...

我在所有正確的方式去這件事?我是否必須獲取約束對象IBOutlet並重寫它們?如果是這樣,我是否會重寫優先順序?我是否應該使用> =作爲具有相同優先級的常量,這似乎不起作用。我的代碼簡單的動畫下面是,這是沒有多少,但除了手勢識別器,設置主要在xib

任何幫助非常感謝。 謝謝你,史蒂夫

對於滑了下來:

[UIView animateWithDuration:0.9 animations:^{ 
         _view3FooterConstraint.constant=2; 
         [self.view layoutIfNeeded]; 
         } completion:^(BOOL finished){}]; 

更新也試過這種設置優先級等於 - 不再能實現滑動下來

_view3FooterConstraint.constant=2; 
[self.view setNeedsUpdateConstraints]; 
[UIView animateWithDuration:0.9 animations:^{        
         [self.view layoutIfNeeded]; 
         } completion:^(BOOL finished){}]; 

對於滑:

[UIView animateWithDuration:0.9 animations:^{ 
    _view1View2Constraint.constant=2; 
    [self.view layoutIfNeeded]; 
} completion:^(BOOL finished){}]; 

回答

1

我想我會這樣做,只需添加和刪除2約束(2的頂部約束爲1,3的底部約束爲頁腳)。確保所有的視圖都有明確的高度,並使IBOutlets達到我上面提到的兩個約束。你一次只需要其中的一種,但是你需要在IB中添加這兩種方法,這樣你就可以爲他們創造銷售渠道。在viewDidLoad中,我立即刪除底部的一個。這應該在縱向和橫向上工作。我使用的代碼是:

implementation ViewController { 
    IBOutlet NSLayoutConstraint *conBottom; 
    IBOutlet NSLayoutConstraint *conTop; 
    int pos; 
} 

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    pos = 0; 
    [self.view removeConstraint:conBottom]; 
    [self.view layoutSubviews]; 
} 


-(IBAction)togglePosition:(id)sender { //tap recognizer on view one action method 
    if (pos == 0) { 
     [self moveDown]; 
    }else{ 
     [self moveUp]; 
    } 
} 

-(void)moveDown { 
    [self.view removeConstraint:conTop]; 
    [self.view addConstraint:conBottom]; 
    conBottom.constant=2; 
    [UIView animateWithDuration:0.9 animations:^{ 
     [self.view layoutIfNeeded]; 
    } completion:^(BOOL finished) { 
     pos = 1; 
    }]; 
} 

-(void)moveUp { 
    [self.view removeConstraint:conBottom]; 
    [self.view addConstraint:conTop]; 
    conTop.constant=2; 
    [UIView animateWithDuration:0.9 animations:^{ 
     [self.view layoutIfNeeded]; 
    }completion:^(BOOL finished) { 
     pos = 0; 
    }]; 
}