2

我正在創建一個自定義的NSLayoutConstraint子類,我需要知道佈局約束的constant屬性當前是否爲內部狀態處理啓用動畫。換句話說,我需要區分之間:和如何檢查NSLayoutConstraint是否動畫

{ //no animation 
    myLayoutConstraint.constant = 100; 
} 

{ //animated 
    myLayoutConstraint.constant = 100; 
    [UIView animateWithDuration:0.2 animations:^{ 
     [self.myViewThatHasTheConstraintAttached layoutIfNeeded]; 

    } completion:^(BOOL finished) { 
     [...] 
    }]; 
} 

所以,我可以處理極端案例以上的動畫中間接收消息。這可能嗎?

回答

1

這樣做將有一個布爾值,無論你想訪問此並做類似的唯一途徑...

{ //no animation 
    theView.animatingChange = NO; 
    myLayoutConstraint.constant = 100; 
} 

{ //animated 
    theView.animatingChange = YES; 
    myLayoutConstraint.constant = 100; 
    [UIView animateWithDuration:0.2 animations:^{ 
     [self.myViewThatHasTheConstraintAttached layoutIfNeeded]; 

    } completion:^(BOOL finished) { 
     [...] 
     theView.animatingChange = NO; 
    }]; 
} 

在視圖更改屬性立即「結束」的價值動畫。在動畫時,它不會變爲所有中間值。只是在屏幕上的圖畫是動畫。

+0

我需要隱式處理,使用約束類的人不應該在外部設置任何東西。 –

+0

可以解釋更多關於你想要實現的內容。你問的問題的答案是「如果一個觀點能夠'知道'它是否有動畫?'很簡單。不,這是不可能的。你想達到什麼?也許有另一種方式來做到這一點。 – Fogmeister

+0

我正在創建一個佈局系統,自然地打開和關閉視圖(通過刷頭等),我使用我寫的一個自定義的NSLayoutConstraint類來實現這一點。目前,該系統對我自己的項目非常適用,但我希望進一步深入瞭解其狀態並使其成爲開源框架。這就是我爲什麼要這樣做的原因。 –