2

CollectionViewCell 안에 UIImageView의 애니메이션을 적용하는 데 문제가 있습니다. Auto Layout으로보기를 설정했는데 문제가 발생할 수 있는지 확실하지 않습니다.셀의 CGAffineTransform 애니메이션이 작동하지 않습니다.

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) 
    } 

    .... 

} 
+0

을 사용해야합니다. 애니메이션을 적용해야하는 경우? 먼저 초기 값을 설정해야하며 원하는 값으로 애니메이션을 적용 할 수 있습니다. 예 : 변환 값을 0.75로 설정하고 1.0으로 설정합니다. 그런 식으로. – Mannopson

+0

여러분도 알다시피 이미지 뷰를 만들 때 이미 그랬습니다. – SwingerDinger

+0

UICollectionViewCell의 사용자 지정 클래스입니다. 권리? – Mannopson

답변

0

당신은 UIView.animate 블록의 내부에 변화를 일을 시도 할 수 있습니다 그것은 작동합니다. 다음과 같이

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) 
} 

을 또한 당신은/XIB 대신 수동으로 코드를 통해 셀을 등록하는 스토리 보드에서 셀을 만든 경우, awakeFromNib 당신에게 당신이 원하는 결과를 얻을 수 있습니다.

편집 : 위의 대답은 사용자가 가지고있는 코드와 비슷한 것처럼 셀이 처음 생성되면 애니메이션이 발생하기를 원한다고 가정합니다. 셀이 화면에 나타날 때마다 호출되도록하려면 UICollectionViewDelegatecollectionView(_:willDisplay:forItemAt:)

+0

'collectionView (_ : willDisplay : forItemAt :)'에서 애니메이션을 호출 할 때조차이 기능이 작동하지 않습니다. – SwingerDinger

+0

UIView.animation 블록 내부에서 변환을 적용 했습니까? 그것 없이는 애니메이트되지 않을 것이고, 내부에'self.layoutIfNeeded'가 있으면 어떤 제약 기반의 애니메이션 – migues

관련 문제