В настоящее время я работаю над приложением для 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
}