0

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 のログイン ビュー コントローラーがスライドして正常に動作します。

何らかのレイヤー関連の問題が発生していると想定しています。任意のヒント?

4

1 に答える 1

0

問題を修正しました。スクロール効果を新しい UIView のレイヤーに適用し、スクロール効果レイヤーを直接サブレイヤーとしてウィンドウに追加するのではなく、サブビューとしてアプリケーション ウィンドウに追加しました。これが iPad と iPhone で異なる動作をする理由はまだわかりません。

于 2012-09-23T05:31:37.323 に答える