ios – 动画UIView上的Animate图层

ios – 动画UIView上的Animate图层,第1张

概述我无法在其中一个视图上设置图层动画.我搜索了这个问题,但只能使用CATransaction找到答案,假设我知道其边界的fromValue和toValue.我在tableHeader中有一个视图,在单击时调整自身大小.这个视图是一个普通的UIView和动画,就像在UIView.animate() – 块中一样.此视图将CAGradientLayer作为子图层,为其提供渐变背景颜色.当视图为其高度设置 我无法在其中一个视图上设置图层动画.我搜索了这个问题,但只能使用CATransaction找到答案,假设我知道其边界的fromValue和tovalue.我在tableheader中有一个视图,在单击时调整自身大小.这个视图是一个普通的UIVIEw和动画,就像在UIVIEw.animate() – 块中一样.此视图将CAGradIEntLayer作为子图层,为其提供渐变背景颜色.当视图为其高度设置动画时,该图层不会对其进行动画处理.图层在动画开始时立即更改其边界.

为了确保图层整体得到正确的大小(在初始化/加载/屏幕旋转等),我被告知这样做:

@H_419_13@overrIDe func layoutSubvIEws() { super.layoutSubvIEws() gradIEntLayer.frame = backgroundVIEw.bounds}

它每次都会获得正确的大小,但它从未动画过.

要做我的视图动画,我这样做:

@[email protected] = someHeightUIVIEw.animate(withDuration: 0.3,animations: { [weak self] in self?.layoutIfNeeded()})

这是完美的,但我假设layoutIfNeeded()在某个时刻调用layoutSubvIEws,我认为这将破坏我添加到块中的任何CALayer动画.

如您所见,我只更改视图中视图上的约束常量,因此实际上我不知道动画完成时实际标题视图的大小.我可以做一些数学计算它会是什么,但这似乎是不必要的..

有没有更好的方法来做到这一点?

解决方法 在动画期间有更新方法来更新子层的框架,但最优雅的解决方案是让UIKit为您处理这个问题.创建一个子类UIVIEw,其 layerClass是CAGradIEntLayer.创建视图后,将为您创建CAGradIEntLayer.当您为视图的框架设置动画时,渐变图层会为您优雅地设置动画.

@H_419_13@@IBDesignablepublic class GradIEntVIEw: UIVIEw { @IBInspectable public var startcolor: UIcolor = .white { dIDSet { updatecolors() } } @IBInspectable public var endcolor: UIcolor = .black { dIDSet { updatecolors() } } overrIDe open class var layerClass: AnyClass { return CAGradIEntLayer.self } overrIDe public init(frame: CGRect = .zero) { super.init(frame: frame) config() } required public init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder) config() } private func config() { updatecolors() } private func updatecolors() { let gradIEntLayer = layer as! CAGradIEntLayer gradIEntLayer.colors = [startcolor.cgcolor,endcolor.cgcolor] }}

注意,我已经制作了这个@IBDesignable,所以你可以将它放在一个框架目标中,然后在IB中使用它,但这取决于你.这不是必需的.主要问题是覆盖layerClass,以便UIKit在动画视图时处理图层的动画.

总结

以上是内存溢出为你收集整理的ios – 动画UIView上的Animate图层全部内容,希望文章能够帮你解决ios – 动画UIView上的Animate图层所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1016567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存