UICollectionView(iOS 7~)

8704 단어 iOS
iOS 7에서 UICollectionView의 레이아웃'동시 애니메이션'을 변경하기 위해 다음과 같은 두 가지 API 그룹이 추가되었습니다.
  • 헤드셋 등 애니메이션을 사용할 때
  • 중도 제어가 작동하지 않아 간단하게 사용할 수 있음
  • setCollectionViewLayout:animated:(iOS 6)
  • setCollectionViewLayout:animated:completion:(iOS 7로부터)
  • 제스처 등 애니메이션을 통해
  • 중도 통제 가능,'축소축소축소축소'
  • 가능
  • startInteractiveTransitionToCollectionViewLayout:completion:(iOS 7로부터)
  • finishInteractiveTransition(iOS 7로부터)
  • cancelInteractiveTransition(iOS 7로부터)
  • 이번에는 위기 제스처로 UICollectionView를 확대 축소하고 싶어 startInteractiveTransitionToCollectionViewLayout:completion:의 API를 사용해 구현했다.

    샘플 코드


    Github

    프로세스 처리


    UICollectionView의interactiveTransition과 제스처를 조합하여 다음과 같은 절차로 처리합니다.
  • 제스처 시작
  • 다음 UICollectionViewLayout 객체 생성
  • startInteractiveTransitionToCollectionViewLayout:completion:에서 Transition
  • 시작
  • 제스처 상태 변경
  • Pinch Gesture의 경우 scale의 값을 얻을 수 있으므로 이를 바탕으로 0~1의 진도(Progress)를 계산하여 U I C ole ction ViewTransition Layout의transitionProgress
  • 이progress에 따라 원시 레이아웃과 새 레이아웃 사이의 상태를 자동으로 계산하고 표시
  • 제스처 끝
  • progress의 값에 따라 호출finishInteractiveTransition 또는 cancelInteractiveTransition
  • 일시 중지 제스처(B)
  • (간격 발생)(A)
  • 애니메이션 완료
  • start를 호출할 때의compuletion 블록
  • 제스처 다시 시작(B)
  • 여기서 주의해야 할 것은 제스처의 끝에서 애니메이션의 완성까지 간격이 있다는 것이다(A).프로그레스가 0.6 등 0마리인 경우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"에는 여러 가지 설명이 있습니다.쉽지 않아 보이지만 할 수 있는 일이 늘어날 것 같아.

    좋은 웹페이지 즐겨찾기