ios - 如何在动画后更新 CAGradientlayer 大小?
问题描述
我为 UIText 创建了一个扩展类来创建渐变层。在对 UIText 大小进行动画处理后,渐变层的大小变得小于作为父元素的 UIText itsef。这是我的代码:
extension UITextField {
func gradientBackground(firstColor: UIColor, secondColor: UIColor){
let gradientLayer = CAGradientLayer()
gradientLayer.frame = super.bounds
gradientLayer.colors = [firstColor.cgColor, secondColor.cgColor]
gradientLayer.locations = [0.0, 1.0]
gradientLayer.startPoint = CGPoint(x:0.0, y:0.0)
gradientLayer.endPoint = CGPoint(x: 1.0, y: 0.0)
layer.addSublayer(gradientLayer)
}
class gradientTeLabel: UITextField {
var once = true
override func layoutSubviews() {
super.layoutSubviews()
if once {
self.gradientBackground(firstColor: UIColor(red: 0.30, green: 0.55, blue: 1.00, alpha: 1), secondColor: UIColor(red: 0.00, green: 0.36, blue: 1.00, alpha: 1))
once = false
}
}
}
---------这些在单独的文件中--------
@IBAction func showMarkUp(_ sender: Any) {
if mark1.isHidden {
_ = UIViewPropertyAnimator(duration: 0.25, curve: .easeInOut){
self.expandButton.transform = CGAffineTransform(rotationAngle: .pi)
self.asdf.layer.frame = self.asdf.bounds
}.startAnimation()
asdf.layer.frame = asdf.bounds
} else {
_ = UIViewPropertyAnimator(duration: 0.250, curve: .easeInOut){
self.mark1.isHidden = true
}.startAnimation()
}
}
---------这些在 ViewController 中--------
asdf 是包含渐变层的 UITextField。如何更新渐变层大小以匹配 UIText 大小?
解决方案
你有两个主要选择。
如果可能,不要像这样添加“松散”的子层。相反,添加一个子视图,其布局基于父视图(例如自动调整大小或自动布局),这样当您在父视图上执行视图动画时,子视图就会随之而来。
如果你不能这样做,那么当你在视图上做视图动画时,你还必须在层上做层动画(使用核心动画)来匹配它。
推荐阅读
- git - 将所有已完成的替换更改为其他内容
- amazon-web-services - Error with vagrant up for aws
- css - WordPress子主题样式并不总是有效
- java - 如何在 Maven 构建期间替换 Java 程序中的构建值
- c# - 依赖注入的单例
- flutter - 有没有办法获取呈现的 ListView Widget 的当前键?
- xslt - XSLT 3.0 在应用模板中使用变量进行动态选择?
- r - 设置工作目录:“C:/Documents and Settings/...”下的“setwd 中的错误:无法更改工作目录”
- node.js - 未通过 Azure 服务总线队列接收消息
- angular - 如何将参数从 Nativescript 中的兄弟路由传递给子路由