UICollectionView(iOS 7~)
8704 단어 iOS
setCollectionViewLayout:animated:
(iOS 6) setCollectionViewLayout:animated:completion:
(iOS 7로부터)startInteractiveTransitionToCollectionViewLayout:completion:
(iOS 7로부터)finishInteractiveTransition
(iOS 7로부터)cancelInteractiveTransition
(iOS 7로부터)startInteractiveTransitionToCollectionViewLayout:completion:
의 API를 사용해 구현했다.샘플 코드
Github
프로세스 처리
UICollectionView의interactiveTransition과 제스처를 조합하여 다음과 같은 절차로 처리합니다.
startInteractiveTransitionToCollectionViewLayout:completion:
에서 TransitiontransitionProgress
finishInteractiveTransition
또는 cancelInteractiveTransition
finishInteractiveTransition
또는cancelInteractiveTransition
호출되면 프로그레스1이다.애니메이션을 0까지 재생한 다음compuletion 블록을 호출합니다.이 틈틈이 다음transsition을 시작하려면 붕괴됩니다.
다음 Transition이 시작된 후, 나는 틈을 뛰어넘어 계속하고 싶었지만, 어떻게 해야 할지 몰라서 제스처를 멈추기로 결정했다. (B)
소스 코드 요약
제스처 부분만 발췌하다.각양각색의 전선을 놓쳤기 때문에 전체적인 이미지는 Github를 보십시오.
#define kPAMProgressThreshold 0.5
-(void)pinchAction:(UIPinchGestureRecognizer *)gesture
{
switch(gesture.state){
case UIGestureRecognizerStateBegan:
{
NSLog(@"begin scale=%f",gesture.scale);
// 拡大なのか縮小なのかを記録しておく。
// これをしておかないと、拡大で開始して途中で縮小したりするとおかしな事になる。
self.zoomingStatus = gesture.pam_zoomStatus;
// Transitionする先のLayoutを用意
NSUInteger nextItemCount = [self nextHoraizontalItemCount];
UICollectionViewLayout *nextLayout=[UICollectionViewFlowLayout layoutWithHorizontalItemCount:nextItemCount];
// Transitionの開始
[self.collectionView startInteractiveTransitionToCollectionViewLayout:nextLayout
completion:^(BOOL completed, BOOL finish) {
NSLog( @"completion");
// Transitionの完了時にジェスチャーを止めるので、ここで再開
[self enableGesture];
}];
}
break;
case UIGestureRecognizerStateChanged:
// Transitionの進捗(progress)を0.0〜1.0で更新
self.transitionLayout.transitionProgress = [gesture pam_transitionProgressWithZoomStatus:self.zoomingStatus];
NSLog( @"transitionProgress=%f",self.transitionLayout.transitionProgress);
break;
case UIGestureRecognizerStateEnded:
// Transitionを完了
if( self.transitionLayout.transitionProgress > kPAMProgressThreshold ){
[self.collectionView finishInteractiveTransition];
self.currentHoraizontalItemCount = [self nextHoraizontalItemCount];
}else{
[self.collectionView cancelInteractiveTransition];
}
// 最後のアニメーションが終わるまでジェスチャーを停止
[self disableGesture];
break;
default:
break;
}
}
기타 애니메이션
이번에 U ICollection ViewController에서 섹션 디자인을 변경했지만 UIViewController 사이의 애니메이션도 괜찮을 것 같습니다.WWDC 2014 비디오(로그인 필요)의 "Custom Transitions Using View Controllers"에는 여러 가지 설명이 있습니다.쉽지 않아 보이지만 할 수 있는 일이 늘어날 것 같아.
Reference
이 문제에 관하여(UICollectionView(iOS 7~)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/paming/items/685b63d0ed20aaf124e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)