CABasicAnimation для маски, которая содержит градиент для покрытия и раскрытия вида при изменении его высоты - PullRequest
0 голосов
/ 30 октября 2018

В настоящее время я работаю над приложением для iOS в Swift, для которого требуется функция, при которой нажимается стрелка (UIButton), чтобы показать больше текста, а градиент, покрывающий текст, медленно раскрывает текст по мере увеличения высоты надписи. , По сути, я создал контейнерное представление с маской, которая содержит градиент, и внутри контейнера находится UILabel, которая содержит текст, который покрывается градиентом и увеличивается по высоте при увеличении высоты контейнера. В настоящее время я могу анимировать увеличение высоты контейнера и раскрытие текста, однако я не могу анимировать маску контейнера, содержащего градиент. Вот мой код, написанный на Swift 4;

 //old bounds of the container
 var oldBounds = self.authourBlurbContainer.layer.mask!.bounds

//new bounds of the container
var newBounds = CGRect(x: 0, y: 0, width: 
self.authourBlurbContainer.frame.width, height: 
self.authorDescriptionLabel.text!.heightWithConstrainedWidth(width: 
self.authorDescriptionLabel.frame.width, font: UIFont(name: "Georgia", 
size: 23.0)!))

//Create the animation
let layerAnimation = CABasicAnimation(keyPath: "bounds.size.height")
        layerAnimation.duration = 2
        layerAnimation.fromValue = oldBounds
        layerAnimation.toValue = newBounds
        layerAnimation.timingFunction = CAMediaTimingFunction(name: 
CAMediaTimingFunctionName.easeIn)
        layerAnimation.fillMode = .forwards

  // Update the bounds so the layer doesn't snap back when the 
  animation completes
 self.authourBlurbContainer.layer.mask!.bounds = newBounds

self.authourBlurbContainer.layer.mask!.add(layerAnimation, forKey: 
  "bounds")


//Animation to increase the height of the container and display all the 
text in the UILabel
UIView.animate(withDuration: 0.3, delay: 0, options: [.curveEaseOut], 
animations: {

            //Set the height
            self.blurbContainerHeight.constant = 
(self.authorDescriptionLabel.text!.heightWithConstrainedWidth(width: 
self.authorDescriptionLabel.frame.width, font: UIFont(name: "Georgia", 
size: 23.0)!))

self.authourBlurbContainer.layer.mask!.add(layerAnimation, forKey: 
"bounds")


            self.view.layoutIfNeeded()

        }) { (finished) in

        }
...