我可以想象當人們看到這個問題時會出現很多嘆息彈出再次。但是,我在這裏,文檔中以及通過Google閱讀了大量信息,但仍未找到解決方案。所以這裏什麼都不做。iOS UIView屬性不用CABasicAnimation動畫
我正在嘗試重新創建Facebook登錄屏幕,其間距和位置與鍵盤一起動畫,以允許用戶仍然可以看到所有輸入字段和登錄按鈕。
這適用於我使用kCAFillModeForwards
並將removedOnCompletion
設置爲NO
。但是,正如SO的另一個主題所述,這似乎只是在視覺上改變屬性,實際的分接頭位置沒有改變。因此,當用戶似乎輕敲一個輸入字段時,iOS將其解釋爲背景上的一個輕擊。
所以我嘗試設置新的位置和大小,但是當我這樣做時,動畫不起作用,它只是捕捉到新的位置。把它放在addAnimation
調用之前,之後,不管有沒有交易,都沒有什麼區別。
委託方法仍然被調用,但您無法直觀地看到任何動畫。
if([notification name] == UIKeyboardWillShowNotification) {
CGRect currBounds = self.loginTable.tableHeaderView.layer.bounds;
CGSize newSize = CGSizeMake(self.loginTable.tableHeaderView.bounds.size.width, 60);
CGPoint newPos = CGPointMake(self.loginTable.layer.position.x, self.loginTable.layer.position.x - 50);
//[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
[animation setToValue:[NSValue valueWithCGSize:newSize]];
[animation setDelegate:self];
[self.loginTable.tableHeaderView.layer addAnimation:animation forKey:@"headerShrinkAnimation"];
CABasicAnimation *formPosAnimation = [CABasicAnimation animationWithKeyPath:@"position"];
[formPosAnimation setToValue:[NSValue valueWithCGPoint:newPos]];
[formPosAnimation setDelegate:self];
//formPosAnimation.removedOnCompletion = NO;
//formPosAnimation.fillMode = kCAFillModeForwards;
[self.loginTable.layer addAnimation:formPosAnimation forKey:@"tableMoveUpAnimation"];
//[CATransaction commit];
[self.loginTable.tableHeaderView.layer setBounds:CGRectMake(currBounds.origin.x, currBounds.origin.y, newSize.width, newSize.height)];
[self.loginTable.layer setPosition:newPos];
}