swift - CGAffineTransform 不适用于自定义 UIView
问题描述
我正在尝试创建一个自定义视图类,它是一个带有 UICollectionView 的弹出窗口。我已经创建了动画进出视图的函数,但实际上只有动画出函数起作用。
我正在设置约束如下...
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit(){
...
self.addSubview(collectionView)
collectionView.bottomAnchor.constraint(equalTo: self.safeAreaLayoutGuide.bottomAnchor).isActive = true
collectionView.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
collectionView.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
collectionView.heightAnchor.constraint(equalTo: self.heightAnchor, multiplier: 0.7).isActive = true
...
self.animateIn()
}
然后处理我正在使用以下的动画......
func animateIn(){
self.collectionView.transform = CGAffineTransform(translationX: 0, y: self.collectionView.frame.height)
self.blurredBackgroundView.alpha = 0
UIView.animate(withDuration: 0.5, animations: {
self.blurredBackgroundView.alpha = 1
self.collectionView.transform = .identity
})
}
animateOut 函数(有效)是......
func animateOut(){
UIView.animate(withDuration: 0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 1, options: .curveEaseIn, animations: {
self.collectionView.transform = CGAffineTransform(translationX: 0, y: self.collectionView.frame.height)
self.blurredBackgroundView.alpha = 0
}) { (complete) in
if complete {
self.removeFromSuperview()
}
}
}
但最初的 CGAfineTransform 不起作用,因此视图在首次出现时出现在其最终位置。我很困惑,因为它非常适合在按下按钮关闭弹出窗口时调用的 animateOut 函数。
谁能告诉我我做错了什么?我觉得一定有一些基本的东西我错过了。
谢谢
解决方案
您正在尝试从初始化程序启动动画,但到那时,视图已经不是视图层次结构的一部分。由于不可能对不属于视图层次结构的视图进行动画处理,因此会立即应用转换。animateOut
工作正常,因为当您调用它时,视图已经显示。
您需要做的是animateIn
在视图添加到视图层次结构后显式调用您的函数
let yourView = YourView(frame: someFrame)
superview.addSubview(yourView)
yourView.animateIn()
推荐阅读
- azure - 是否有使用超级账本结构的 azure-blockchain-workbench 或 azure baas 的定价计算器?
- java - 如何设置可选
Long 数据类型变量中的数据类型变量值? - xml - ST 转换序列化期间错误的命名空间绑定
- python-3.x - 在wireshark中解密python请求https流量
- android - 在“vivo”和“xiaomi”设备中关闭应用时收不到推送通知
- reactjs - 在严格模式树中发现了一个字符串 ref,“canvas”
- r - 在因子组中的最小值和最大值之后选择 x 条记录
- php - PHP while 循环处理速度更快,可能使用 PHP 工作者实现
- python - python中sort和sorted之间的区别以及它们的反转?
- c# - 动态 IQueryable 连接查询