3

サブクラスがUICollectionViewCellあり、その角を丸めて影も追加する必要があります。セルは正方形のカードのように見え、セル間に十分なスペースがあります。

したがって、すべてのセルの「下」に、影を追加したいと思います。私はこれをうまく行うことができますが、私のセルは底の角だけが丸くなっています。上部には通常の角があります。四隅すべてに丸みのある角が必要です。

ここで、別の を としてUIViews追加することを推奨する解決策を見つけましたが、パフォーマンス上の理由からこれを避けたいと思います。UIViewsubview

以下のコードにあるこのメソッドを使用する解決策が1つ見つかりました。

[UIBezierPath bezierPathWithRoundedRect: cornerRadius:]

しかし、それは私にとってもうまくいきませんでした。セルの「下」/下部にのみ影を追加しようとしているために、それが機能しない可能性はありますか? これらの回答のほとんどは、開発者がセル全体に影を追加したいという質問に対して提供されているようです。

subviewサブクラスにスペシャルを追加しても構わないと思いますがUICollectionViewCell、それは最後の手段として使用したいと思います。

狙っiOS 7+て使っていますXcode 6.1.1.

UICollectionViewCellこれは、サブクラス内で使用して、影と丸い角の両方を実現しようとしているコードです。

- (void)load:(CustomUserObject *)customObject
{
    self.customObject = customObject;

    // Round cell corners
    self.layer.cornerRadius = 12;

    // Add shadow
    self.layer.masksToBounds = NO;
    self.layer.shadowOpacity = 0.75f;
    self.layer.shadowRadius = 10.0f;
    self.layer.shouldRasterize = NO;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(self.frame.size.width/2 - (self.frame.size.width - 50)/2, self.frame.size.height, self.frame.size.width - 50, 10) cornerRadius:self.layer.cornerRadius].CGPath;

}

編集: に設定self.layer.masksToBoundsするNOと、影は機能しますが、上部の角は丸くなりません。に設定self.layer.masksToBoundsするYESと、影は機能しませんが、四隅すべてが丸くなりました。四隅すべてを丸めて影を機能させる方法がわかりません。

4

2 に答える 2

5

Timothy Moose が親切にもコメントで共有してくれたサンプル プロジェクトを見た後、私は文字通り彼とほとんど同じようにすべてを行っていることに気付きました。

欲求不満から、私は自分のセルのnibファイルを再訪し、ついにそれが私を襲った. UIViewセルの上部にa を追加しました。UIImageViewこのビューは、色付きのバナーとして機能し、別のおよび のコンテナーとしても機能していましたUILabel

の上部は上部の角を丸くすることに成功しましたが、色付きの部分がセルの上部にあり、セルと同じ幅だったUICollectionViewCellため、わかりませんでした。UIView

ばかげた間違い、多くの場合、ささいなことです。

これは、4 つの角を丸くし、下に影を作成するために使用している最終的なコードですUICollectionViewCell。は、セルの上隅を隠していself.bannerたエクストラです。UIView

- (void)load:(CustomUserObject *)customObject
{
    self.customObject = customObject;

    // Round the banner's corners
    UIBezierPath *maskPath = [UIBezierPath bezierPathWithRoundedRect:self.banner.bounds
                                                   byRoundingCorners:(UIRectCornerTopLeft | UIRectCornerTopRight)
                                                         cornerRadii:CGSizeMake(10, 10)];

    CAShapeLayer *maskLayer = [CAShapeLayer layer];
    maskLayer.frame = self.banner.bounds;
    maskLayer.path = maskPath.CGPath;
    self.banner.layer.mask = maskLayer;

    // Round cell corners
    self.layer.cornerRadius = 10;

    // Add shadow
    self.layer.masksToBounds = NO;
    self.layer.shadowOpacity = 0.75f;
    self.layer.shadowRadius = 10.0f;
    self.layer.shouldRasterize = NO;
    self.layer.shadowPath = [UIBezierPath bezierPathWithRect:CGRectMake(self.frame.size.width/2 - (self.frame.size.width - 50)/2, self.frame.size.height, self.frame.size.width - 50, 10)].CGPath;

}
于 2015-01-13T22:47:09.673 に答える