Затемнение UIView при переворачивании с использованием UIViewAnimationTransitionFlipFromRight - PullRequest
4 голосов
/ 15 апреля 2010

Я использую стандартный блок анимации для переключения с одного вида на другой, например:

[UIView beginAnimations:@"FlipAnimation" context:self];
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:self.view cache:NO];
[UIView setAnimationBeginsFromCurrentState:NO];
[containerView exchangeSubviewAtIndex:1 withSubviewAtIndex:0];
[UIView commitAnimations];

Во время анимации вид «от» темнеет, когда начинает переворачиваться. Поскольку я использую почти идентичные представления с обеих сторон, которые не покрывают весь вид (он предназначен для представления перевернутой физической карты), это выглядит абсолютно ужасно. Использование [UIColor clearColor] в качестве свойства backgroundColor для каждого связанного UIView не помогло ни на секунду, так как прозрачные области также темнеют.

Есть идеи, как мне избавиться от этого эффекта затемнения?

1 Ответ

6 голосов
/ 16 апреля 2010

Кажется, вы должны сделать анимацию "вручную", используя преобразования Core Animation. Я разделил анимацию на две части. Сначала я поворачиваю «viewOne» на полпути с анимацией и «viewTwo» на полпути в другом направлении без анимации. Когда первая половина анимации закончена, я делаю все остальное в методе делегата. Ваши параметры могут отличаться:)

Перекос - любезность другого ответа StackOverflow, который я нашел.

- (IBAction)flip:(id)sender
{
  UIView* viewOne = [self.view.subviews objectAtIndex:0];
  UIView* viewTwo = [self.view.subviews objectAtIndex:1];

  viewOne.hidden = YES;

  CATransform3D matrix = CATransform3DMakeRotation (M_PI / 2, 0.0, 1.0, 0.0);
  CATransform3D matrix2 = CATransform3DMakeRotation (-M_PI / 2 , 0.0, 1.0, 0.0);
  matrix = CATransform3DScale (matrix, 1.0, 0.975, 1.0);
  matrix.m34 = 1.0 / -500;

  matrix2 = CATransform3DScale (matrix2, 1.0, 0.975, 1.0);
  matrix2.m34 = 1.0 / -500;

  viewOne.layer.transform = matrix2;

  [UIView beginAnimations:@"FlipAnimation1" context:self];
  [UIView setAnimationDuration:1];
  [UIView setAnimationDelegate:self];
  [UIView setAnimationDidStopSelector:@selector(animationPartOneDone)];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseIn];

  viewTwo.layer.transform = matrix;

  [UIView commitAnimations];    
}

-(void)animationPartOneDone
{   
  UIView* viewOne = [self.view.subviews objectAtIndex:0];
  UIView* viewTwo = [self.view.subviews objectAtIndex:1];


  viewOne.hidden = NO;
  viewTwo.hidden = YES;

  CATransform3D matrix = CATransform3DMakeRotation (2 * M_PI, 0.0, 1.0, 0.0);

  matrix = CATransform3DScale (matrix, 1.0, 1.0, 1.0);

  [UIView beginAnimations:@"FlipAnimation2" context:self];
  [UIView setAnimationDuration:1];
  [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

  viewOne.layer.transform = matrix;

  [UIView commitAnimations];    

  [self.view exchangeSubviewAtIndex:1 withSubviewAtIndex:0];

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...