gpt4 book ai didi

ios - 单元格中的 CGAffineTransform 动画不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:14:20 24 4
gpt4 key购买 nike

我在为 CollectionViewCell 内的 UIImageView 设置动画时遇到问题。我已经使用 Auto Layout 设置了 View ,不确定这是否会导致问题。

如果尝试调用 didEndDisplaying 但没有结果。调用单元格动画的正确生命周期函数是什么?

代码:

import UIKit

class ProfileCell: UICollectionViewCell {

....

let backgroundImageView: UIImageView = {
let iv = UIImageView(frame: .zero)
iv.contentMode = .scaleAspectFill
iv.image = UIImage(named: "lustrum2017")
iv.clipsToBounds = true
return iv
}()

var blurView: UIVisualEffectView = {
let be = UIBlurEffect(style: .light)
let vv = UIVisualEffectView(effect: be)
return vv
}()

let profileImageView: UIImageView = {
let iv = UIImageView()
iv.image = UIImage(named: "dummy")
iv.contentMode = .scaleAspectFill
iv.layer.cornerRadius = 40
iv.layer.masksToBounds = true
iv.layer.borderColor = Colors.primaryColor.cgColor
iv.layer.borderWidth = 1.0
iv.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)
return iv
}()

override init(frame: CGRect) {
super.init(frame: frame)

setupViews()
animateViews()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

private func animateViews() {

self.profileImageView.transform = CGAffineTransform(scaleX: 1, y: 1)

UIView.animate(withDuration: 0.45, animations: {
self.layoutIfNeeded()
}, completion: nil)
}

private func setupViews() {
contentView.addSubview(backgroundImageView)
contentView.addSubview(blurView)

contentView.addConstraintsWithFormat("H:|[v0]|", views: backgroundImageView)
contentView.addConstraintsWithFormat("V:|[v0(150)]", views: backgroundImageView)

contentView.addConstraintsWithFormat("H:|[v0]|", views: blurView)
contentView.addConstraintsWithFormat("V:|[v0(150)]", views: blurView)

blurView.addSubview(profileImageView)
blurView.addConstraintsWithFormat("H:|-\(frame.width / 2 - 40)-[v0(80)]-\(frame.width / 2 - 40)-|", views: profileImageView)
blurView.addConstraintsWithFormat("V:|[v0(80)]", views: profileImageView)
}

....

}

最佳答案

您可以尝试在 UIView.animate block 内进行转换,它应该可以工作。如下:

private func animateViews() {

self.profileImageView.transform = CGAffineTransform.identity
UIView.animate(withDuration: 0.45, animations: {
self.profileImageView.transform = CGAffineTransform(scaleX: 1, y: 1)
self.layoutIfNeeded()
}, completion: nil)
}

此外,如果您从 Storyboard/xib 创建单元格而不是通过代码手动注册单元格,awakeFromNib 可能会为您提供所需的结果。

编辑:上面的答案假设您希望动画在单元格首次创建后发生,因为它看起来与您的代码更相似。如果您希望每次单元格出现在屏幕上时都调用它,那么您需要使用 UICollectionViewDelegatecollectionView(_:willDisplay:forItemAt:)

关于ios - 单元格中的 CGAffineTransform 动画不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42287359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com