带子视图的UICollectionViewCell不断在单元格中重绘自身

时间:2013-08-05 22:48:28

标签: ios objective-c core-graphics core-animation

我有一个视图,我做了一些绘图。我添加一个形状图层作为视图图层的子图层,然后将图像视图添加为视图的子视图,然后绘制图像视图图层的角。一切都很完美。

现在我需要在集合视图中使用此视图,我可以在其中动态设置图像。

如果我在绘制矩形中执行工作,它会在集合视图滚动时一遍又一遍地自我绘制。

我尝试过其他一些东西,比如在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)];
}

2 个答案:

答案 0 :(得分:0)

我用这个:

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

至少,它听起来像是同样的问题。

答案 1 :(得分:0)

在您的UICollectionViewCell中,覆盖-prepareForReuse并删除上一张图片。

<强>更新

在你的代码中,你有这一行:[self.layer addSublayer:circleLayer];这是为你的细胞添加一层绘图。因此,稍后当您创建UIImageView并为其指定图像时,您仍然在单元格中创建了一个图形。

当该单元格被回收时,该图层仍然存在,然后再次添加它。不要在self上绘制该图层,在视图中创建该图层,然后将其添加到单元格中。