我試圖創建一個視圖控制器來模擬經典的體重秤。我有一個UIView子類(DragView)來表示權重,另一個UIView子類(ContainerView)來模擬板塊的尺度。奇怪的行爲與自動佈局和框架更改與iOS 9
當一個DragView拖動到ContainerView上時,我觸發一個動畫,將DragView放置在ContainerView中(如果需要,更改大小)。但是,如果用戶在ContainerView外部釋放DragView,則DragView將被動畫到其原始位置和大小。
在這裏可以看到的DragView(綠色)和兩個ContainerView(在上面的「板」明確顏色)
的DragView的原始幀被設定爲約束(比例寬度,頂尖和領先)。一切看起來都很好,但是當我將DragView設置回原來的位置時,我就知道了。
看到DragView的框架區別?這是爲什麼發生?
以下是我的代碼的相關部分。
DragView.m
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
_originalFrame = self.frame;
}
return self;
}
- (void)animateBackToOrigin
{
[UIView animateWithDuration:0.1 animations:^{
self.frame = _originalFrame;
}];
}
我在這兩種方法檢查_originalFrame
值和它返回的值相同。
答:
我的錯誤是設定_originalFrame內initWithCoder
,layoutSubViews
是正確的地方。因爲每次設置視圖時都會調用layoutSubViews
,所以我添加了一個檢查(使用CGRectIsEmpty
),以便僅在沒有值的情況下設置框架。
- (void)layoutSubviews
{
if (CGRectIsEmpty(_originalFrame)) {
_originalFrame = self.frame;
}
}
你把我放在正確的路上,找到了解決辦法。我用答案更新了問題。謝謝。 – WedgeSparda