0

我有一个视图,我可以在其中进行一些绘图。我添加一个形状层作为视图层的子层,然后添加一个图像视图作为视图的子视图,然后弯曲图像视图层的角。这一切都完美无缺。

现在我需要在 collectionviewcell 中使用这个视图,我可以在其中动态设置图像。

如果我在draw rect中执行工作,它会在集合视图滚动时一遍又一遍地在另一个之上绘制它。

我尝试了其他一些事情,比如在单元格上为 uiimage 创建一个属性,将其设置为 imageview 的图像,并在 setter 中为其绘制。

有没有人有关于如何做到这一点的建议?

更新:这是我在视图中做的事情的一个例子

- (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 回答