私は、画像のコレクションのためのProfileCollectionViewControllerというコレクションビューを持っています。 イメージをクリックすると、イメージをフルスクリーンで表示するHorizontalProfileViewControllerが表示されます。 Backボタンが押されたときHorizontalProfileViewController私は全画面イメージをProfileViewControllerのサムネイルにアニメーション表示させたい。サムネイルの位置がわかるように、ProfileViewControllerから選択したインデックスパスをinitialIndexPathとしてHorizontalProfileViewControllerに渡します。以下は私のトランジションアニメーションコードUICollectionViewControllerへのカスタムポップアニメーションが動作しない
import UIKit
class SEHorizontalFeedToProfile: NSObject, UIViewControllerAnimatedTransitioning {
func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
return 0.2
}
func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
if let profileVC = transitionContext.viewControllerForKey(UITransitionContextToViewControllerKey) as? SEProfileGridViewController, horizontalFeedVC = transitionContext.viewControllerForKey(UITransitionContextFromViewControllerKey) as? SEProfileHorizontalViewController, containerView = transitionContext.containerView() {
let duration = transitionDuration(transitionContext)
profileVC.collectionView?.reloadData()
if let indexPath = horizontalFeedVC.initialIndexPath {
let cell = profileVC.collectionView?.cellForItemAtIndexPath(indexPath)
print(indexPath)
let imageSnapshot = horizontalFeedVC.view.snapshotViewAfterScreenUpdates(false)
let snapshotFrame = containerView.convertRect(horizontalFeedVC.view.frame, fromView: horizontalFeedVC.view)
imageSnapshot.frame = snapshotFrame
horizontalFeedVC.view.hidden = true
profileVC.view.frame = transitionContext.finalFrameForViewController(profileVC)
containerView.insertSubview(profileVC.view, belowSubview: horizontalFeedVC.view)
containerView.addSubview(imageSnapshot)
UIView.animateWithDuration(duration, animations: {
var cellFrame = CGRectMake(0, 0, 0, 0)
if let theFrame = cell?.frame {
cellFrame = theFrame
}
let frame = containerView.convertRect(cellFrame, fromView: profileVC.collectionView)
imageSnapshot.frame = frame
}, completion: { (succeed) in
if succeed {
horizontalFeedVC.view.hidden = false
// cell.contentView.hidden = false
imageSnapshot.removeFromSuperview()
transitionContext.completeTransition(!transitionContext.transitionWasCancelled())
}
})
}
}
}
}
私はブレークポイントを入れて、コード
let cell = profileVC.collectionView?.cellForItemAtIndexPath(indexPath)
にセルがnilであることが分かっています。なぜそれが無くなるのか分かりません。私を助けてください。私は事前に感謝します。
profileVCが
UICollectionViewController
のサブクラスであるPS:何の問題もなく、まったく同じことを行い、次のプロジェクトをチェックアウトしてください。私はそれを模倣しようとしましたが、それは私の上で動作しません。 https://github.com/PeteC/InteractiveViewControllerTransitions
nilをすべきではない 'cellForItemAtIndexPath'はnilを返します。あなたの質問はなぜ私の細胞が見えないのですか? – beyowulf
私の質問はなぜpopViewアニメーションのtoViewControllerのセルがないのですか?どうすれば修正できますか? – Subash
コレクションビュー – jrturton