1

上部でフェードアウトする UITableViews がいくつかあります。それらは、単一の UIView 内で隣り合わせに配置されます。すべてのテーブル ビューは同じ場所でフェードするはずなので、コンテナーの UIView にアルファ マスクを設定する必要があると考えました。これは問題なく動作し、スクロールはすべてのテーブル ビューでスムーズで、フェードも見栄えがします。

問題は、インターフェイスの向きが変わるときです。それは本当に途切れ途切れです。そして、マスクが適用されている場合のみ。フェードを取り除けば、すべてがスムーズです。

これは、上記のマスクを適用するためのコードです。

// If you want the Table Views to "fade out" at the top, use this function to set the height!
- (void) setFadeHeight:(CGFloat)fadeHeight
{
    if (fadeHeight == 0.0) {
        self.layer.mask = nil;
        return;
    }

    // Create a gradient layer to use as mask
    CAGradientLayer *l = [self createGradientLayerWithHeight:fadeHeight];
    l.shouldRasterize = NO;
    [self.layer setMask:l];
}

// Creates a transparency gradient. Helper function for the above function
- (CAGradientLayer *) createGradientLayerWithHeight:(CGFloat)gradientHeight
{
    CAGradientLayer *mask = [CAGradientLayer layer];
    mask.locations = [NSArray arrayWithObjects:
                      [NSNumber numberWithFloat:0.0],
                      [NSNumber numberWithFloat:1.0],
                      nil];

    mask.colors = [NSArray arrayWithObjects:
                   (__bridge id)[UIColor clearColor].CGColor,
                   (__bridge id)[UIColor whiteColor].CGColor,
                   nil];

    mask.frame = CGRectMake(0.0, 0.0, self.bounds.size.width, self.bounds.size.height);

    // vertical direction
    mask.startPoint = CGPointMake(0.0, 0.0); 
    mask.endPoint = CGPointMake(0.0, gradientHeight / self.bounds.size.height);
    return mask;
}

この問題は、このスタック オーバーフローの質問に関連している可能性がありますが、テーブルをスムーズにスクロールしているため、よくわかりません。また、その質問の回答に従って shouldRasterize を NO に設定しようとしました。

4

0 に答える 0