2016-10-30 45 views
1

我有一個UICollectionView tvOS應用程序。在每個單元格內有一個UIImageView,它的adjustsImageWhenAncestorFocused設置爲true,當單元格聚焦時,它給了我很好的視差效果。tvOS視差效果UIImageView的細胞內的子視圖

我想在該圖像的頂部添加一個橫幅並讓它「粘」到它,這樣視差也應用在它上面。

我試着將它添加爲子視圖,將其添加爲子圖層,與約束混亂,但沒有任何工作。每當細胞聚焦時,圖像就會產生效果,橫幅會保持不動。

+0

您也可以通過編程實現此效果。 –

+0

我想看看是否有更簡單,更簡單的解決方案。以編程方式實現效果將是我的最後手段。 –

+0

@AndraTodorescu你可以發佈你的最終解決方案的代碼?我面臨同樣的問題 –

回答

3

現在沒有辦法將它添加到UIImageView,同時也獲得了Apple的視差效果。

因此,您必須以編程方式實現該效果,或者使用CGContext在其上繪製圖像和橫幅。

我正在做後者在一個collectionViewCell中舍入圖像,同時也保持蘋果自己的視差效果。這有點類似於:

imageView.sd_setImage(with: URL(string:url), placeholderImage: UIImage(named: "placeholder"), options: SDWebImageOptions.avoidAutoSetImage) { [weak self] (image, error, cacheType, url) in 
    if let image = image { 
     if let strongself = self { 
      UIGraphicsBeginImageContext(strongself.imageView.frame.size) 
      if let ctx = UIGraphicsGetCurrentContext() { 
       let layer = CALayer() 
       layer.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: strongself.imageView.frame.size) 
       layer.cornerRadius = 8 
       layer.masksToBounds = true 
       layer.contentsGravity = "resizeAspectFill" 
       layer.contents = image.cgImage 
       layer.render(in: ctx) 
       let processedImage = UIGraphicsGetImageFromCurrentImageContext() 
       UIGraphicsEndImageContext() 
       strongself.imageView.image = processedImage 
      } 
     } 
    } 
} 

需要的時候請確保移動的東西后臺線程和細胞可能已經由圖像加載時間重複使用。因此,在loadImage完成處理程序中添加一個檢查以獲取唯一的ID。

+0

謝謝!它像一個魅力!我只是刪除了與設置角半徑有關的所有內容,我創建了我的視圖,設置了它的框架,然後像這樣添加它:layer.addSublayer(myCustomView.layer) –