показывает эффект ряби, когда выделена ячейка табличного представления - PullRequest
0 голосов
/ 11 ноября 2018

Я хотел добавить волновой эффект к UITableViewCell аналогично этой ссылке https://raw.githubusercontent.com/bfeher/BFPaperTableViewCell/master/BFPaperTableViewCellDemoGif.gif. Есть много доступных модулей, но я хочу узнать, как делается такая анимация. Я добавил несколько строк кода в делегат didHighlightRowAt для выполнения анимации пульсации, но анимация не произошла. Вот код того, что я сделал до сих пор

func tableView(_ tableView: UITableView, didHighlightRowAt indexPath: IndexPath) {
                    let cell = tableView.cellForRow(at: indexPath)!
                    cell.contentView.subviews.forEach { (view) in
                    view.layer.masksToBounds = true
                    print(view.layer.cornerRadius)
                    let startAnimation = UIBezierPath(rect: CGRect(x: view.bounds.origin.x, y: view.bounds.origin.y, width: view.bounds.width, height: view.bounds.height)).cgPath
                    let endAnimation = UIBezierPath(rect: CGRect(x:  view.bounds.width, y: view.bounds.origin.y, width: view.bounds.width, height: view.bounds.height)).cgPath
                    let shapeLayer = CAShapeLayer()
                    let compinedLayer = CGMutablePath()
                    shapeLayer.fillColor = UIColor.blue.cgColor
                    shapeLayer.cornerRadius = 10.0
                    shapeLayer.opacity = 0.5
                    let animation = CABasicAnimation(keyPath: "ripple")
                    animation.fromValue = startAnimation
                    animation.toValue = endAnimation
                    animation.duration = 3
                    animation.fillMode = CAMediaTimingFillMode.both
                    animation.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut)
                    animation.isRemovedOnCompletion = false
                    compinedLayer.addPath(startAnimation)
                    compinedLayer.addPath(endAnimation)
                    shapeLayer.path = compinedLayer
                    view.layer.insertSublayer(shapeLayer, at: 0)
                     shapeLayer.add(animation, forKey: "ripple")
                let deatline = DispatchTime(uptimeNanoseconds: UInt64((3 * 0.75)) * NSEC_PER_SEC)
                DispatchQueue.main.asyncAfter(deadline: deatline, execute: {
                    let opacityAnimation = CABasicAnimation(keyPath: "opacity")
                    opacityAnimation.fillMode = CAMediaTimingFillMode.both
                    opacityAnimation.duration = 3 - (3 * 0.75)
                    opacityAnimation.fromValue = endAnimation
                    opacityAnimation.toValue = startAnimation
                    opacityAnimation.isRemovedOnCompletion = false
                    shapeLayer.add(opacityAnimation, forKey: "opacity")
                })
                        let deadline = DispatchTime(uptimeNanoseconds: UInt64(3 - (3 * 0.75)))
                        DispatchQueue.main.asyncAfter(deadline: deadline, execute: {
                    shapeLayer.removeAllAnimations()
                    shapeLayer.removeFromSuperlayer()
                })
            }

        }
        func tableView(_ tableView: UITableView, shouldHighlightRowAt indexPath: IndexPath) -> Bool {
            return true
        }

1 Ответ

0 голосов
/ 11 ноября 2018

Я не запускал код, но первая проблема была связана с анимацией непрозрачности. Значения from и toValues ​​должны быть числами от 1 до 0, и я полагаю, что вы добавляете путь, используемый для shapelayer. Во-вторых, вместо использования всех сроков отправки вы можете использовать CATransactions и блоки завершения. Для любых задержек используйте свойство beginTime. Надеюсь это поможет. Вот аналогичный вопрос, чтобы вы могли посмотреть на мой код. Эффект пульсации материала для ячейки UICollectionView . Некоторые другие вещи, которые я замечаю, при первом нажатии на видео, которое вы разместили, показывают, что на изображение также помещается CAT-переход ряби, чтобы исказить его. Честно говоря, при деконструкции анимации я записываю их и медленно пролистываю их. Также есть несколько отличных ресурсов о CALayer. Удачи в изучении, это супер мощный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...