GameKit を使用して実績を報告するユニバーサル アプリを作成しています。これは、iPhone で実行している場合は問題なく動作します。フルスクリーンのモーダル Game Center ビュー コントローラーが上にスライドし、アプリの起動時にログインするように求められます。
しかし、このアプリをiPadで実行すると、ウィンドウ化されたiPad版のGC View Controllerが上にスライドするのですが、停止するとすぐに画面がわずかにグレーアウトし、モーダルView Controllerなどを操作できなくなります。
問題を、アプリケーション ウィンドウの背景に使用しているスクロール効果に絞り込みました。具体的には、ウィンドウのレイヤーにアニメーション サブレイヤーを追加する場合です。
-(void)startGridScroll
{
//Create layer and pattern it with the grid image as a color
UIImage * gridImage = [UIImage imageNamed:@"scrolling_grid.png"];
UIColor * gridPattern = [UIColor colorWithPatternImage:gridImage];
CALayer * gridLayer = [CALayer layer];
[gridLayer setZPosition:-1];
gridLayer.backgroundColor = gridPattern.CGColor;
//Transform the image on its Y-axis
gridLayer.transform = CATransform3DMakeScale(1.0, -1.0, 1.0);
gridLayer.anchorPoint = CGPointMake(0.0,1.0);
CGSize scrollSize = self.window.bounds.size;
//Make the layer's frame twice the width of the image
gridLayer.frame = CGRectMake(0.0, 0.0, gridImage.size.width + scrollSize.width, scrollSize.height);
//*******This is the line causing the issue******
[self.window.layer addSublayer:gridLayer];
//Define start position and end coordinates for grid image
CGPoint start = CGPointZero;
CGPoint end = CGPointMake(-gridImage.size.width, 0);
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"position"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.fromValue = [NSValue valueWithCGPoint:start];
animation.toValue = [NSValue valueWithCGPoint:end];
animation.repeatCount = HUGE_VALF;
//Set animation duration and begin
animation.duration = 7.0;
[gridLayer addAnimation:animation forKey:@"position"];
}
このメソッドを 2 回呼び出します。最初はapplication: didFinishLaunchingWithOptions
メソッド内で、さらにメソッド内でも呼び出しますapplicationDidBecomeActive
。いずれかの呼び出しを排除しても役に立ちません。両方をコメント アウトすると、Game Center のログイン ビュー コントローラーがスライドして正常に動作します。
何らかのレイヤー関連の問題が発生していると想定しています。任意のヒント?