7

UIScrollView があり、コンテンツが突然途切れないように、下部を透明にフェードする必要があります。UIScrollView の背景はカスタム カラーです。これは私がこれまでに持っているものですが、レイヤーはカスタムカラーではなく白で表示されています. これは私が目指しているものですが、底だけです。

:これは私が目指しているものですが、下だけです

これが私がこれまでに持っているものです:

maskLayer = [CAGradientLayer layer];

            CGColorRef firstColor = [UIColor colorWithRed:141 green:211 blue:244 alpha:1.0].CGColor;
            CGColorRef secondColor = [UIColor colorWithRed:141 green:211 blue:244 alpha:0.8].CGColor;
            CGColorRef thirdColor = [UIColor colorWithRed:141 green:211 blue:244 alpha:0.2].CGColor;
            CGColorRef fourthColor = [UIColor colorWithRed:141 green:211 blue:244 alpha:0.0].CGColor;

            maskLayer.colors = [NSArray arrayWithObjects:(__bridge id)firstColor, (__bridge id)secondColor, (__bridge id)thirdColor, (__bridge id)fourthColor, nil];
            maskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0],
                                                        [NSNumber numberWithFloat:0.2],
                                                        [NSNumber numberWithFloat:0.8],
                                                        [NSNumber numberWithFloat:1.0], nil];
            maskLayer.frame = CGRectMake(0, 285, self.loginScrollView.frame.size.width, 40);
            maskLayer.anchorPoint = CGPointZero;
            [self.loginScrollView.layer addSublayer:maskLayer];

何らかの理由で、レイヤーが白く表示され、scrollView の幅の半分しか表示されません。

4

4 に答える 4

12

Steph Sharp の実装が本当に好きで、私はそれを迅速に変換し、他の誰かがそれを必要とする場合に備えて共有したいと考えました。

let fadePercentage = CGFloat(0.2)

override func layoutSubviews() {

    super.layoutSubviews()

    var transparent = UIColor.clearColor().CGColor
    var opaque = UIColor.blackColor().CGColor

    var maskLayer = CALayer()
    maskLayer.frame = self.bounds

    var gradientLayer = CAGradientLayer()
    gradientLayer.frame = CGRectMake(self.bounds.origin.x, 0, self.bounds.size.width, self.bounds.size.height)
    gradientLayer.colors = [transparent, opaque, opaque, transparent]
    gradientLayer.locations = [0, fadePercentage, 1 - fadePercentage, 1]

    maskLayer.addSublayer(gradientLayer)
    self.layer.mask = maskLayer

}
于 2015-04-19T21:10:19.660 に答える
0

サブクラス化を含まないこの回答も あります。

于 2014-01-21T15:33:49.723 に答える