2016-08-11 6 views
0

При добавлении ячеек в мой UICollectionView с помощью cellForItemAtIndexPath я пытаюсь настроить таргетинг на первую ячейку и добавить цветное наложение к изображению в ячейке. Тем не менее, этот код, похоже, нацелен на несколько ячеек по мере их создания (хотя и не на всех), хотя он, похоже, не называется соответствующим количеством раз (он может применять наложение к 3 или 4 ячейкам, но только дважды вызывает его [ второй раз, когда вызывается reloadData()]). Как применить наложение цвета к первому и только к первой ячейке?Измените конкретную ячейку в uicollectionview

override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! ProfileCollectionViewCell 

    if(self.userList.count > 0) { 
     cell.frame.size = CGSize(width: 202, height: 207) 
     if(indexPath.item < self.userList.count) { 
      cell.myImage.image = self.userList[indexPath.item].image 
      cell.myImage.layer.cornerRadius = cell.myImage.frame.size.width/2 
      cell.myImage.layer.masksToBounds = true 
      if(indexPath.item == 0) { 
       print("Overlay") 
       let circlePath = UIBezierPath(arcCenter: CGPoint(x: cell.frame.width/2, y: cell.frame.height/2), radius: CGFloat((cell.myImage?.frame.size.width)!/2), startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2), clockwise: true) 
       let shapeLayer = CAShapeLayer() 
       shapeLayer.path = circlePath.CGPath 
       shapeLayer.fillColor = self.overlayColor.CGColor 

       cell.layer.addSublayer(shapeLayer) 
      } 
     } 
    } 
    return cell 
} 

ответ

1

нет никаких проблем, если вы используете item или row вы должны поставить еще и удалить CAShapeLayer в противном случае он будет отображаться в другом элементе клетки, поскольку клетка будет повторно использовать. замените свой код ниже.

if(indexPath.item == 0) { // if(indexPath.row == 0) { 
    let circlePath = UIBezierPath(arcCenter: CGPoint(x: cell.frame.width/2, y: cell.frame.height/2), radius: CGFloat((cell.myImage?.frame.size.width)!/2), startAngle: CGFloat(0), endAngle: CGFloat(M_PI * 2), clockwise: true) 
    let shapeLayer = CAShapeLayer() 
    shapeLayer.path = circlePath.CGPath 
    shapeLayer.fillColor = self.overlayColor.CGColor 

    cell.layer.addSublayer(shapeLayer) 
} else { 
    let sublayers = cell.layer.sublayers 
    for sublayer in sublayers! { 
     if sublayer.isKindOfClass(CAShapeLayer) { 
      sublayer.removeFromSuperlayer() 
     } 
    } 
} 
+0

Thanks. Это сделало это и помогло мне разобраться в нескольких других проблемах, которые, как я полагал, были связаны. – Maniacbob

Смежные вопросы