0

私はいくつかの描画を行うビューを持っています。ビューのレイヤーのサブレイヤーとしてシェイプ レイヤーを追加し、ビューのサブビューとして画像ビューを追加してから、画像ビューのレイヤーの角を曲げます。それはすべて完璧に機能します。

ここで、画像を動的に設定できるコレクションビューセルでこのビューを使用する必要があります。

draw rect で作業を実行すると、コレクション ビューがスクロールするにつれて、他のオブジェクトの上に何度も描画されます。

uiimage のセルにプロパティを作成し、それを imageview のイメージとして設定し、セッターで描画するなど、他にもいくつか試しました。

これを行う方法について誰か提案がありますか?

更新: ビューで行っていることの例を次に示します。

- (void)simplifiedDrawWithImage:(UIImage*)image
{
    CAShapeLayer *circleLayer = [CAShapeLayer layer];
    CGRect circleRect = self.bounds;

    UIBezierPath *circlePath = [UIBezierPath bezierPathWithOvalInRect:circleRect];
    circleLayer.path = circlePath.CGPath;

    circleLayer.shadowOffset = CGSizeMake(0, shadowScale * length);
    circleLayer.shadowOpacity = .5;
    circleLayer.shadowRadius = shadowRadiusScale * length;

    [self.layer addSublayer:circleLayer];

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    // size appropriately
    [self addSubview:imageView];

    CALayer *imageLayer = imageView.layer;
    [imageLayer setMasksToBounds:YES];
    [imageLayer setCornerRadius:((imageView.frame.size.width - innerRing / 2) / 2)];
}
4

2 に答える 2

0

UICollectionViewCell で-prepareForReuse、前の画像をオーバーライドして削除します。

アップデート:

コードには、次の行があります。[self.layer addSublayer:circleLayer];これは、セルに描画のレイヤーを追加しています。そのため、後で UIImageView を作成して画像を割り当てると、セル自体に描画が作成されたままになります。

そのセルがリサイクルされると、そのレイヤーはまだそこにあるので、もう一度追加します。そのレイヤーを自分自身に描画せず、ビューで作成してからセルに追加します。

于 2013-08-05T22:56:48.667 に答える
0

私はこれを使用します:

UICollectionViewCell *cell = [collView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
[cell.contentView.subviews makeObjectsPerformSelector: @selector(removeFromSuperview)];

少なくとも、同じ問題のように聞こえます。

于 2013-08-05T22:53:25.663 に答える