13

UICollectionView数個のセル (約 20 個) しかない があります。このコレクションのパフォーマンスは素晴らしいです。ただし、このビューによってレンダリングされている の角を丸めようとするとすぐにUICollectionViewCells、パフォーマンスが大幅に低下します。私のセルの init メソッドでは、これは私がこれを引き起こすために追加する唯一の行です:

[self.layer setCornerRadius:15];

これは init メソッドにあり、セルを適切に再利用しているため、これが原因で問題が発生する理由がわかりません。

次の複数の組み合わせを使用して、販売のラスタライズと不透明度を調整しようとしましたが、まだ効果がありません。

[self.layer setMasksToBounds:YES];
[self.layer setCornerRadius:15];
[self.layer setRasterizationScale:[[UIScreen mainScreen] scale]];
self.layer.shouldRasterize = YES;
self.layer.opaque = YES;

UICollectionView角の丸いセルを持つのパフォーマンスを向上させるための設定またはトリックはありますか?

4

4 に答える 4

1

これは完全に dequeuereusablecellwithidentifier の呼び出しが原因であることがわかりました。これが呼び出されるたびに、角の丸いセルを再レンダリングする必要があります。アイテムが画面からスクロールされたときにコレクション ビューがそれらをビューから削除しなかった場合、パフォーマンスは影響を受けません (コレクション内のアイテムが多すぎない限り)。両刃の剣のように見えますが、どちらにも限界があります。

于 2012-12-21T19:51:57.537 に答える
1

UIView サブクラスのコードがあります。これは、不透明な丸い境界線と中央に透明な穴があるビューを提供します。通常どおり必要なビューを作成する必要があります。その後、ビューに穴のあるビューを追加できます。ビジュアライゼーションはこちら.

UICollectionView または UITableView に単色の背景を使用すると機能し、各セルに次のサブビューを追加できます。

@interface TPRoundedFrameView : UIView

@property (assign, nonatomic) CGFloat cornerRadius;
@property (strong, nonatomic) UIColor * borderColor;

@end

@implementation TPRoundedFrameView

- (instancetype)init {
    if ((self = [super init])) {
        self.opaque = NO;
        self.backgroundColor = [UIColor clearColor];
    }
    return self;
}

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    UIBezierPath * path = [UIBezierPath bezierPathWithRect:rect];
    UIBezierPath * innerPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:self.cornerRadius];
    [path appendPath:[innerPath bezierPathByReversingPath]];
    [self.borderColor set];
    [path fill];
}

@end

標的細胞クラスの例:

- (void)awakeFromNib {
    [super awakeFromNib];
    // creating holed view with rounded corners
    self.myRoundedView.backgroundColor = [UIColor whiteColor];
    TPRoundedFrameView * roundedFrame = [TPRoundedFrameView new];
    roundedFrame.cornerRadius = 5.f;
    roundedFrame.borderColor = [UIColor groupTableViewBackgroundColor];

    // add borders to your view with appropriate constraints
    [self.myRoundedView addSubview:roundedFrame];

    roundedFrame.translatesAutoresizingMaskIntoConstraints = NO;
    NSDictionary * views = NSDictionaryOfVariableBindings(roundedFrame);
    NSArray * horizontal = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[roundedFrame]-0-|" options:0 metrics:nil views:views];
    NSArray * vertical = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[roundedFrame]-0-|" options:0 metrics:nil views:views];
    [self.myRoundedView addConstraints:horizontal];
    [self.myRoundedView addConstraints:vertical];
}

結果: セルとして丸みを帯びたビューを持つテーブル

于 2016-07-12T09:19:25.253 に答える
0

セル自体ではなく contentView にこの半径を適用することで、borderRadius のパフォーマンスの問題をすべて修正しました。

self.contentView.layer.borderWidth = 1.0f;
self.contentView.layer.cornerRadius = 5.0f;
self.contentView.layer.borderColor = [UIColor colorWithRed:202/255. green:202/255. blue:202/255. alpha:1.0].CGColor;
于 2016-08-31T16:28:18.443 に答える