UITableView
の上部をマスキングしてナビゲーションバーの錯覚を与えようとしています。上部の部分は50%の不透明度を持ち、残りのビューは100%の不透明度を持つ必要があります。複数のアルファ値を持つ長方形のCALayerマスク
これはそうのように、CAGradientLayer
で行うことは非常に簡単です:
- (void)addTopOpacityMask
{
CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.tableView.frame;
id transparent = (id)[UIColor clearColor].CGColor;
id opaque = (id)[UIColor blackColor].CGColor;
gradientLayer.colors = @[transparent, opaque, opaque];
gradientLayer.locations = @[@0.1, @0.11, @1];
self.tableView.superview.layer.mask = gradientLayer;
}
しかし、私が言うことができるものと
は、locations
プロパティのすべての値が一意である必要がありますので、常に小さな勾配が存在します(私は望んでいない)。場所を設定する
このマスクの高さを場所に変換する必要がある場合は、非常にセクシーな解決策のようです。
私はCAShapeLayerの使用について考えていました。下のコードを参照して、マスクとしてトップ部分を作成しましたが、マスクがトップ部分のみを覆うので、これは明らかに残りのテーブルビューを切り捨てます。
- (void)addTopOpacityMask
{
CAShapeLayer *shapeLayer = [CAShapeLayer layer];
shapeLayer.fillRule = kCAFillRuleEvenOdd;
shapeLayer.fillColor = [UIColor blackColor].CGColor;
shapeLayer.opacity = 0.5;
CGRect maskRect = CGRectMake(0, 0, CGRectGetWidth(self.tableView.frame), 76);
CGPathRef path = CGPathCreateWithRect(maskRect, NULL);
shapeLayer.path = path;
CGPathRelease(path);
self.tableView.superview.layer.mask = shapeLayer;
}
私は何が欠けていますか?
テーブルビューの上部に透明なビューを50%追加するのではなく、マスクする必要がある理由は簡単です。テーブルビューには透明な背景もあり、ユーザーがその下をスクロールしたときにナビゲーションバーが表示されるようにしたい(yahoo天気アプリの動作/使用方法と同様)。
EDIT:
を明確にするために、これがデフォルト(あなたがナビゲーションバーを見ることができない旨の通知)によってどのように見えるかです:
そして、このことがどうなるかでありますテーブルビューの下にスクロールし始めると(テーブルビューのアルファは途切れますが、半透明のビューの背景色は変更されません)、
が変化することになります上部の外観。私は基本的にテーブルビューに76ポイントの上のインセットを持っており、スクロールを開始する前に、偽のナビゲーションバーを表示しないようにしたい。その下にセルがある場合のみ、テーブルビューの上に何かがあることに気付くでしょう。グラデーショントランジションなしで、0%ではなく50%の不透明度で、このようにします:http://stackoverflow.com/questions/21559596/clear-color-background-nav-bar-but-still-float-above-all -the-contents –
hmmm ....あなたはまだ小さなグラデーションの外観を見ていたことを除いて、「CAGradientLayerでやるのはとても簡単だ」と言っていました。 – DonMag
私はこれのコードを追加しました。 –