Я могу представить себе огромное количество вздохов, когда люди увидят этот вопрос всплывающим снова . Тем не менее, я прочитал много информации здесь, в документации и через Google, и до сих пор не нашел решения. Так что здесь ничего не идет.
Я пытаюсь воссоздать экран входа в 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];
}