• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:01:00 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在为 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)
    }

    ....

}



Best Answer-推荐答案


您可以尝试在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap