许多开发人员可能会遇到此类问题,我也试图在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.
但不起作用。
我的问题是:当动画处理过程中(从右到左)我会变黑。所以任何人都可以帮我隐藏这个黑影子?请给你金色的建议。
感谢。
答案 0 :(得分:2)
在委托中添加(didFinishLaunchingWithOptions方法)这两行:
self.window.backgroundColor = [UIColor whiteColor];
self.window.tintColor = [UIColor whiteColor];
答案 1 :(得分:0)
我有同样的要求,我在闪屏上有3张全屏大小的图像,应该从右向左滑动。但使用CATransition并没有解决问题。所以我使用了scrollview和分页。在scrollview中添加了3个图像,然后开始动画。
- (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到图像的宽度,在第一个图像动画完成后,我已经开始滚动到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
}];
}];
}