Ответ 1
Добавьте в делегат (метод didFinishLaunchingWithOptions) следующие две строки:
self.window.backgroundColor = [UIColor whiteColor];
self.window.tintColor = [UIColor whiteColor];
Возможно, подобные проблемы возникли со многими разработчиками, я также попытался найти в 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.
Но не работает.
Моя проблема: Пока процесс анимации (справа налево), я получаю черную тень. Так кто-нибудь может помочь мне скрыть эту черную тень? Пожалуйста, дайте вам золотое предложение.
Спасибо.
Добавьте в делегат (метод didFinishLaunchingWithOptions) следующие две строки:
self.window.backgroundColor = [UIColor whiteColor];
self.window.tintColor = [UIColor whiteColor];
У меня было такое же требование, у меня есть 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
}];
}];
}