Проблема с категоризацией черного цвета при переключении налево

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

В моем приложении rootViewController динамически устанавливается динамическое окно, я имею в виду, что пользователь может изменить вид корня во время выполнения приложения. Поэтому сначала я удаляю текущий rootViewController из UIWindow, а затем устанавливаю новый rootViewController на UIWindow с определенной анимацией. Эта анимация сделана CATransition с помощью transition.type = kCATransitionPush;.
Мое приложение работает очень хорошо, кроме анимации нового rootViewController. Как и выше, я сказал, что использовал kCATransitionPush с CATransition

Редакция: Ниже мой код:

-(void) changeRootViewController
{
    for(UIView *subViews in self.window.rootViewController.view.subviews)
        [subViews removeFromSuperview];
    [self.window.rootViewController.view removeFromSuperview];
    self.window.rootViewController.view = nil;
    [self.window.rootViewController removeFromParentViewController];

    MainRootViewController *mainRootVC = [[MainRootViewController alloc] init];

    CATransition *animation = [CATransition animation];
    [animation setDuration:0.4];
    [animation setType:kCATransitionPush];
    [animation setSubtype:kCATransitionFromRight];
    animation.fillMode = kCAFillModeForwards;
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionDefault]];
    self.window.rootViewController = mainRootVC;
    [[self.window layer] addAnimation:animation forKey:nil];
}

Я также попытался установить clearColor и whiteColor фона UIWindow. Но не работает.

Моя проблема: Пока процесс анимации (справа налево), я получаю черную тень. Так кто-нибудь может помочь мне скрыть эту черную тень? Пожалуйста, дайте вам золотое предложение.

Спасибо.

Ответ 1

Добавьте в делегат (метод didFinishLaunchingWithOptions) следующие две строки:

self.window.backgroundColor = [UIColor whiteColor];
self.window.tintColor = [UIColor whiteColor];

Ответ 2

У меня было такое же требование, у меня есть 3 изображения полного экрана на экране заставки, которые должны скользить справа налево. Но использование CAT-переходов не решает проблему. Поэтому я использовал scrollview с пейджингом. Добавлено 3 изображения в scrollview, а затем запустите анимацию.

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.

    size = [UIScreen mainScreen].bounds.size;

    imageArray = [[NSMutableArray alloc] init];
    [imageArray addObject:[UIImage imageNamed:@"splashScreen1.png"]];
    [imageArray addObject:[UIImage imageNamed:@"splashScreen2.png"]];
    [imageArray addObject:[UIImage imageNamed:@"splashScreen3.png"]];

    self.splashScrollView.frame = CGRectMake(0,0,size.width,size.height);
    self.splashScrollView.contentSize = CGSizeMake(size.width * imageArray.count, size.height);
    self.splashScrollView.pagingEnabled = YES;

    CGFloat xPos = 0.0;

    for (UIImage *image in imageArray) {
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
        imageView.frame = CGRectMake(xPos, 0.0, size.width, size.height);
        [self.splashScrollView addSubview:imageView];
        xPos += size.width;
    }

    [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startAnimation) userInfo:nil repeats:NO];

}

Этот метод (startAnimation) прокрутил scrollView до ширины изображения, по завершении анимации первого изображения, я начал вторую анимацию изображения, которая прокручивалась до края ширины прокрутки.

-(void) startAnimation{

    [UIView animateWithDuration:2.0
                     animations:^{

                         self.splashScrollView.contentOffset = CGPointMake(size.width, 0.0);

                     } completion:^(BOOL finished) {

                         [UIView animateWithDuration:2.0
                                          animations:^{

                                              self.splashScrollView.contentOffset = CGPointMake((self.splashScrollView.contentSize.width - CGRectGetWidth(self.splashScrollView.frame)), 0.0);


                                          } completion:^(BOOL finished) {

                                              //At animation end go to login

                                          }];


                     }];

}