Как я могу заставить мой взгляд уменьшаться и исчезать? - PullRequest
2 голосов
/ 18 мая 2011

Когда мой пользователь нажимает кнопку, я хочу, чтобы видимый вид уменьшался и исчезал, открывая родительский вид внизу.В настоящее время у меня есть это, которое почти работает:

-(void)deleteNoteTransition
{
    self.view.userInteractionEnabled=NO;
    [UIView beginAnimations:@"deleteNote" context:nil];
    [UIView setAnimationDuration:0.6];
    self.view.transform=CGAffineTransformMakeScale(0.01,0.01);
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:)];
    [UIView commitAnimations];
}

- (void)animationDidStop:(NSString *)anim finished:(BOOL)flag
{
    self.view.userInteractionEnabled=YES;
    if ([anim isEqualToString:@"deleteNote"]) {
    [self.navigationController popViewControllerAnimated:YES];
    }
}

Однако есть две проблемы с этим:

  • Представление, которое выполняет сжатие, не является "целым" представлением -он не включает в себя строку заголовка и панель инструментов.
  • Вид сжимается, показывая простой белый фон, и только после этого запускается второй метод, поэтому белый фон бесцеремонно заменяется родительским представлением.

Есть ли способ включить весь экран и плавно показать родительский контроллер представления позади, не вдаваясь в вещи OpenGL, которые слишком сложны для моего текущего уровня программирования?

1 Ответ

2 голосов
/ 19 мая 2011

Это должно охватить весь ваш взгляд:

#import <QuartzCore/QuartzCore.h>
UIGraphicsBeginImageContext(viewToCapture.bounds.size);
[viewToCapture.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

После захвата изображения на изображении используйте этот метод для масштабирования и затемнения изображения:

UIImageView *firstView = nil;

-(void)animateOut:(UIImage*)image {
    firstView = [[UIImageView alloc] initWithFrame:CGRectMake(0,0, 320, 480)];
    firstView.image = image
    [window addSubview:firstView];
    [window bringSubviewToFront:firstView];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:1.0];
    [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:window cache:YES];
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(startupAnimationDone:finished:context:)];
    firstView.alpha = 0.0;
    // change this for a different scale
    firstView.frame = CGRectMake(-60, -85, 440, 635);  
    [UIView commitAnimations];
}

- (void)startupAnimationDone:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    [firstView removeFromSuperview];
    [firstView release];
}

Вы можете получить окно из [UIApplication sharedApplication] или просто добавить его в качестве подпредставления представления текущего контроллера представления.

...