Исчезать с растрового изображения iPhone по умолчанию в основное приложение - PullRequest
1 голос
/ 24 января 2010

Какой самый простой / быстрый / самый эффективный способ выполнить постепенное (0,5 с) затухание от Default.png до начального вида приложения?

Моя первоначальная попытка, которая не очень хорошо работает ... сегодня субботний вечер, посмотрим, сможем ли мы добиться большего успеха

UIImageView* whiteoutView = [[UIImageView alloc] initWithFrame:self.view.frame]; // dealloc this later ??
whiteoutView.image = [UIImage imageNamed:@"Default.png"];
whiteoutView.alpha = 1.0;
[self.view.frame addSubview:whiteoutView];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:0.5];
whiteoutView.alpha = 0;
[UIView commitAnimations];

Ответы [ 3 ]

1 голос
/ 24 января 2010

А как же:

UIImageView* whiteoutView = [[[UIImageView alloc] initWithFrame:self.view.frame] autorelease];
if (whiteoutView != nil)
{
    whiteoutView.image = [UIImage imageNamed:@"Default.png"];
    [self.view addSubview:whiteoutView];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration: 0.5];
    whiteoutView.alpha = 0.0;
    [UIView commitAnimations];
}

(То, что вы ошиблись, было setAnimationDelay vs setAnimationDuration, неправильно высвобождающее представление и пытающееся добавить представление к self.view.frame вместо self.view. Компилятор должен был отловить это последнее. Это сделал?)

1 голос
/ 01 апреля 2010

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

@interface LaunchImageTransitionController : UIViewController {}
@end
@implementation LaunchImageTransitionController

- (void)viewDidLoad {
  [super viewDidLoad];

  self.view = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Default.png"]] autorelease];
  [UIView beginAnimations:nil context:nil];
  [UIView setAnimationDuration:.5];
  [UIView setAnimationDelegate:self];
  [UIView setAnimationDidStopSelector:@selector(imageDidFadeOut:finished:context:)];
  self.view.alpha = 0.0;
  [UIView commitAnimations];

}
- (void)imageDidFadeOut:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context
{
  [self.view removeFromSuperview];
  //NOTE: This controller will automatically be released sometime after its view is removed from it' superview...
}
@end

Вот как вы можете использовать его в делегате приложения:

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

  //create your root view controller, etc...
  UIViewController *rootController = ....

  LaunchImageTransitionController *launchImgController = [[[LaunchImageTransitionController alloc] init] autorelease];

  [window addSubview:rootController.view];
  [window addSubview:launchImgController.view];

  [window makeKeyAndVisible];
} 
0 голосов
/ 24 января 2010

За исключением использования setAnimationDelay: вместо setAnimationDuration:, это выглядит довольно хорошо. Что вам не нравится в результатах?

Редактировать: Вау сильно избили.

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