2017-03-15 67 views
0

我想設置一個collectionView與我使用KingFisher(圖像緩存庫)的圓形圖像。UICollectionViewCell - 圓下載圖片

我不知道我應該設置圓角,imageView或單元格本身。即使細胞是圓形的,圖像似乎也填滿了正方形。

到目前爲止我使用這段代碼(如果我不把它後,我改變形象的平方):

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
... 
if let path = user.profilePictureURL { 
        if let url = URL(string: path) { 
         cell.profilePictureImageView.kf.setImage(with: url) 
         cell.profilePictureImageView.layer.cornerRadius = cell.profilePictureImageView.frame.width/2.0 
        } 
       }  

而且ImageView的:

class ProfilePicture : UIImageView { 

    required init(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder)! 
     self.commonInit() 
    } 

    override init(frame: CGRect) { 
     super.init(frame: frame) 
     self.commonInit() 
    } 

    func commonInit(){ 
     self.layer.masksToBounds = false 
     self.layer.cornerRadius = self.layer.frame.width/2.0 
     self.clipsToBounds = true 
    } 
} 

但它下載第一次圖像,它們是這樣的(細胞的背景是藍色的)

Horizontal CollectionView

回答

0

可以使用這樣的:

extension UIImageView { 

    func setRounded() { 
     let radius = CGRectGetWidth(self.frame)/2 
     self.layer.cornerRadius = radius 
     self.layer.masksToBounds = true 
    } 
} 

然後調用該方法如下:

imageView.setRounded() 
+0

我甚至在圖像緩存庫(Kingfisher)的回調中調用了這個,但我仍然有同樣的錯誤。 (不是所有的細胞,都是隨機的) – PoolHallJunkie

0

你可以通過調整高度(在縱向)的圓的而不是寬度:

self.layer.cornerRadius = self.layer.frame.height/2.0 

如果你對結果不滿意,你將不得不調整你的contentMode.scaleAspect。通過調整長邊,你可以得到一個圓圈,但你不會看到整個圖像。