【发布时间】:2018-03-20 15:00:16
【问题描述】:
【问题讨论】:
-
这不是问题,看起来更像是在炫耀。 It's OK to ask and answer your own question 但请确保它确实是一个问题。也看看how to ask and self-answer a question
标签: swift uicollectionview uikit uicollectionviewcell
【问题讨论】:
标签: swift uicollectionview uikit uicollectionviewcell
这是动画集合视图单元格的代码,例如关闭的门。 此集合有 2 列。 我为集合视图单元格大小的 UICollectionViewDelegateFlowLayout 方法添加了代码。 您可以根据需要对其进行自定义或更改。
这段代码展示了一种生成关门等动画的简单方法。
// MARK: - UICollectionViewDelegateFlowLayout
extension SettingsViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width:CGFloat(settingsCollectionView.frame.size.width * 0.46), height: settingsCollectionView.frame.size.height * 0.25)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 10
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// create a new cell if needed or reuse an old one
let cell: SettingsCollectionCell = settingsCollectionView.dequeueReusableCell(withReuseIdentifier: identifier, for: indexPath) as! SettingsCollectionCell
if !cell.isAnimated {
UIView.animate(withDuration: 0.5, delay: 0.5 * Double(indexPath.row), usingSpringWithDamping: 1, initialSpringVelocity: 0.5, options: indexPath.row % 2 == 0 ? .transitionFlipFromLeft : .transitionFlipFromRight, animations: {
if indexPath.row % 2 == 0 {
AnimationUtility.viewSlideInFromLeft(toRight: cell)
}
else {
AnimationUtility.viewSlideInFromRight(toLeft: cell)
}
}, completion: { (done) in
cell.isAnimated = true
})
}
return cell
}
}
这是 AnimationUtility 类的代码。
class AnimationUtility: UIViewController, CAAnimationDelegate {
static let kSlideAnimationDuration: CFTimeInterval = 0.4
static func viewSlideInFromRight(toLeft views: UIView) {
var transition: CATransition? = nil
transition = CATransition.init()
transition?.duration = kSlideAnimationDuration
transition?.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition?.type = kCATransitionPush
transition?.subtype = kCATransitionFromRight
// transition?.delegate = (self as! CAAnimationDelegate)
views.layer.add(transition!, forKey: nil)
}
static func viewSlideInFromLeft(toRight views: UIView) {
var transition: CATransition? = nil
transition = CATransition.init()
transition?.duration = kSlideAnimationDuration
transition?.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition?.type = kCATransitionPush
transition?.subtype = kCATransitionFromLeft
// transition?.delegate = (self as! CAAnimationDelegate)
views.layer.add(transition!, forKey: nil)
}
static func viewSlideInFromTop(toBottom views: UIView) {
var transition: CATransition? = nil
transition = CATransition.init()
transition?.duration = kSlideAnimationDuration
transition?.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition?.type = kCATransitionPush
transition?.subtype = kCATransitionFromBottom
// transition?.delegate = (self as! CAAnimationDelegate)
views.layer.add(transition!, forKey: nil)
}
static func viewSlideInFromBottom(toTop views: UIView) {
var transition: CATransition? = nil
transition = CATransition.init()
transition?.duration = kSlideAnimationDuration
transition?.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
transition?.type = kCATransitionPush
transition?.subtype = kCATransitionFromTop
// transition?.delegate = (self as! CAAnimationDelegate)
views.layer.add(transition!, forKey: nil)
}
}
【讨论】:
cell.isAnimated 属性。当我将您的代码复制并粘贴到我的项目中时,我收到错误:Value of type 'CollectionViewCell' has no member 'isAnimated'。想法?