2016-10-30 10 views
1

У меня есть приложение tvOS с UICollectionView. Внутри каждой ячейки есть UIImageView, у которой adjustsImageWhenAncestorFocused установлен на true, что дает мне хороший эффект параллакса, когда ячейка сфокусирована.tvOS эффект параллакса для подсмотров UIImageView внутри ячейки

Я пытаюсь добавить баннер поверх этого изображения и привязать его к нему, чтобы параллакс также применялся к нему.

Я попытался добавить его в качестве подзаголовка, добавив его как подуровень, возиться с ограничениями, но ничего не получилось. Всякий раз, когда ячейка сфокусирована, изображение имеет эффект, и баннер остается неподвижным.

+0

Вы также можете реализовать этот эффект программно. –

+0

Я хотел бы посмотреть, есть ли более короткое и легкое решение. Внедрение эффекта программно будет моим последним средством. –

+0

@ AndraTodorescu Вы могли бы опубликовать код своего окончательного решения? Я столкнулся с той же проблемой –

ответ

3

Прямо сейчас нет возможности добавить его в UIImageView, одновременно получая эффект параллакса от Apple.

Значит, вам нужно либо реализовать эффект программно, либо использовать CGContext для рисования изображения и баннера поверх него.

Я делаю последнее, чтобы иметь округленные изображения в коллекцииViewCell, одновременно сохраняя собственный эффект параллакса Apple. Это своего рода выглядит следующим образом:

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 для уникального идентификатора.

+0

Спасибо! Отлично работает! Я просто удалил все, что связано с настройкой радиуса угла, я создал свое представление, установил его кадр, а затем добавил его следующим образом: layer.addSublayer (myCustomView.layer) –

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

  • Нет связанных вопросов^_^