1

私は現在ユニバーサルアプリに取り組んでおり、ビューコントローラーの1つに次のxibがあります:

View
 -ImageView
 -TableView
 -ImageView
 -View (called tblviewContainer in the following snippet of code)

私のviewdidloadメソッドでは、画面の上部と下部の一部がグラデーションになるように、ビュー(tblviewcontainer)に配置するレイヤーを作成しました。

[tblViewContainer addSubview:self.tableView];
[tblViewContainer sendSubviewToBack:self.tableView];

if (!maskLayer)
{
    maskLayer = [CAGradientLayer layer];

    UIColor* outerColorSetup = [UIColor colorWithWhite:1.0 alpha:0.0];
    UIColor* innerColorSetup = [UIColor colorWithWhite:1.0 alpha:1.0];

    CGColorRef outerColor = outerColorSetup.CGColor;
    CGColorRef innerColor = innerColorSetup.CGColor;

    maskLayer.colors = [NSArray arrayWithObjects:
                         (__bridge id )outerColor,
                         (__bridge id)innerColor,
                         (__bridge id)innerColor, 
                         (__bridge id)outerColor, nil];

    maskLayer.locations = [NSArray arrayWithObjects:
                           [NSNumber numberWithFloat:0.01],
                           [NSNumber numberWithFloat:0.04],
                           [NSNumber numberWithFloat:0.8],
                           [NSNumber numberWithFloat:1.0], nil];

    maskLayer.bounds = CGRectMake(0, 0,
                                  self.tableView.frame.size.width,
                                  self.tableView.frame.size.height);

    maskLayer.anchorPoint = CGPointZero;

    tblViewContainer.layer.mask = maskLayer;

}

私のアプリでは回転することができます。レイヤーをオンにして回転させると、回転すると非常に遅くなります (iPad 3 のみ!)。

私が回転するとき、私は次のことを行います:(縦から>横)

-(void)willRotateToInterfaceOrientation: (UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration
{
    if (orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown)
    {

    }
    else if(orientation == UIInterfaceOrientationLandscapeLeft || orientation == UIInterfaceOrientationLandscapeRight)
    {
        _landscape = [[ipad_VideoListViewController_Landscape alloc] initWithNibName:@"ipad_VideoListViewController_Landscape" bundle:nil];
        _landscape.scroolViewContentOffset = scroolViewContentOffset;
         [self.view.layer setRasterizationScale:[UIScreen mainScreen].scale];
          self.view.layer.shouldRasterize = YES;


        NSMutableArray *viewCons = [[[self navigationController]viewControllers] mutableCopy];
        [viewCons removeLastObject];
        [viewCons addObject:_landscape];
        [[self navigationController]setViewControllers:viewCons animated:NO];
    }
}

最悪の部分は、レイヤーがアクティブな状態で iPad 2 で問題なく動作することですが、iPad 3 では処理できないようです。ipad 2 でアニメーションを使って行うこと (これは機能します) が、ipad 3 では処理できないようです。

どんな助けでも大歓迎です!

4

2 に答える 2

1

代わりにいくつかの透明な画像を追加し、スムーズに実行しました。

それでも、なぜこれが機能しないのか誰かが知っているなら、私は知りたいです。

私には期限があるので、この解決策を見つけなければなりませんでした:)。

そしてコメントマイケルに感謝します!

于 2012-09-13T06:16:36.313 に答える
0

willRotateToInterfaceOrientation でラスタライズしてみてください:

self.view.layer.shouldRasterize = YES;

そして、あなたのdidRotateToInterfaceOrientationで:

self.view.layer.shouldRasterize = NO;

また、レイヤーが可能な限り不透明であることを確認してください。

于 2012-09-07T12:51:51.973 に答える