我有一个视图,我做了一些绘图。我添加一个形状图层作为视图图层的子图层,然后将图像视图添加为视图的子视图,然后绘制图像视图图层的角。一切都很完美。
现在我需要在集合视图中使用此视图,我可以在其中动态设置图像。
如果我在绘制矩形中执行工作,它会在集合视图滚动时一遍又一遍地自我绘制。
我尝试过其他一些东西,比如在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)];
}
答案 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上绘制该图层,在视图中创建该图层,然后将其添加到单元格中。