1

(長い投稿をお詫びします)AQGridViewをジャズアップするために、添付のコードは選択したセルをUIViewにコピーし、そのビューをアニメーション化して画面全体に拡大し、ビューを全画面カバーアニメーションのように変換します。自由に再利用できますが、それは私の問題ではありません。私の問題は風景のアニメーションですが、これは異なっている必要があります。セルビューを画面の右半分にアニメーション化し、拡大して画面の右半分に塗りつぶし(すでに完了しています)、画面を横切って左側に回転させます。CGPointMake(0.5、0.5);にアンカーポイント 動作しません。また、変換x値を画面の半分に設定してから元に戻すこともできません。実行するだけで、画面から飛び出します。ヘルプ!!

編集:(プロパティに新しいUIView'sものを追加していることに気づかなかったおかげで、コードは機能するself.navigationController.viewようになりました。そのため、それをレンダリングして反転するだけで、翻訳は必要ありません!)動作するコード:

if(UIInterfaceOrientationIsPortrait(viewController.interfaceOrientation)) {
            self.view.userInteractionEnabled = NO;

            [self.navigationController.view addSubview:viewForCopy];
            [self.navigationController.view bringSubviewToFront:viewForCopy];
            [viewForCopy setFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)];
            [viewForCopy setAlpha:1.0f];

            [[_gridView cellForItemAtIndex:index] setAlpha:0.0f];

            [UIView animateWithDuration:1.5f
                                  delay:0.0f
                                options:UIViewAnimationCurveEaseInOut
                             animations:^{
                                 [self.navigationController.navigationBar setAlpha:0.0f];
                                 [newShadow removeFromSuperlayer];
                                 [viewForCopy setFrame:CGRectMake(-158, 10, self.view.bounds.size.width * 1.55, self.view.bounds.size.height * 1.25)];
                                 [self.navigationController.navigationBar setAlpha:0.0f];  
                             } 
                             completion:^(BOOL finished) {
                                 [UIView animateWithDuration:2.0f
                                                       delay:0.0f
                                                     options:UIViewAnimationCurveEaseInOut
                                                  animations:^{
                                                      [viewForCopy setAlpha:0.0f];
                                                      CATransform3D _3Dt = CATransform3DIdentity;
                                                      _3Dt = CATransform3DTranslate(_3Dt, viewForCopy.frame.size.width * -1, 0, 0);
                                                      _3Dt = CATransform3DRotate(_3Dt, M_PI / -2.0f, 0.0f, 0.1f, 0.0f);  
                                                      _3Dt.m34 = 1.0f / 500.0f;
                                                      _3Dt = CATransform3DTranslate(_3Dt, viewForCopy.frame.size.width, 0, 0);
                                                      viewForCopy.layer.transform = _3Dt;
                                                      [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.navigationController.view cache:YES];
                                                      [self.navigationController pushViewController:viewController animated:NO];

                                                  } 
                                                  completion:^(BOOL finished) {
                                                  }];
                                 [[_gridView cellForItemAtIndex:index] setAlpha:1.0f];
                                 [self.navigationController.view sendSubviewToBack:viewForCopy];

                             }];
        }
             else if(UIInterfaceOrientationIsLandscape(viewController.interfaceOrientation)){
                 UIView *viewforCopyLandscape2 = [[[UIView alloc]initWithFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)]autorelease];
                 viewforCopyLandscape2.backgroundColor = [UIColor whiteColor];
                 viewforCopyLandscape2.alpha = 0.0f;

                 [self.navigationController.view addSubview:viewforCopyLandscape2];
                 [self.navigationController.view bringSubviewToFront:viewforCopyLandscape2];
                 [self.navigationController.view addSubview:viewForCopy];
                 [self.navigationController.view bringSubviewToFront:viewForCopy];

                 [newShadow removeFromSuperlayer];

                 [viewForCopy setFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)];

                 [[_gridView cellForItemAtIndex:index] setAlpha:0.0f];

                 self.view.userInteractionEnabled = NO;

                 [UIView animateWithDuration:1.5f
                                       delay:0.0f
                                     options:UIViewAnimationCurveEaseInOut
                                  animations:^{
                                      [viewforCopyLandscape2 setFrame:CGRectMake(0, 20, self.view.bounds.size.width/2, self.view.bounds.size.height)];
                                      [viewForCopy setFrame:CGRectMake(407, 10, self.view.bounds.size.width * .78, self.view.bounds.size.height * 1.25)];
                                      [self.navigationController.navigationBar setAlpha:0.0f];  
                                      viewforCopyLandscape2.alpha = 1.0f;
                                  } 
                                  completion:^(BOOL finished) {

                                      UIView *viewForCopyLandscape = [[[UIView alloc]initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height)]autorelease];
                                      UIGraphicsBeginImageContext(CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height));
                                      [self.navigationController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
                                      UIImageView *viewImage = [[[UIImageView alloc]initWithImage:UIGraphicsGetImageFromCurrentImageContext()]autorelease];
                                      UIGraphicsEndImageContext();
                                      viewForCopyLandscape = viewImage;
                                      [self.navigationController.view addSubview:viewForCopyLandscape];
                                      [self.navigationController.view bringSubviewToFront:viewForCopyLandscape];

                                      [viewForCopy setAlpha:0.0f];
                                      [UIView animateWithDuration:2.0f
                                                            delay:0.0f
                                                          options:UIViewAnimationCurveEaseInOut
                                                       animations:^{

                                                           CATransform3D transform = CATransform3DMakeRotation(-M_PI / 1.1, 0.0, 1.0, 0.0);
                                                           transform.m34 = 1.0f / 2500.0f;
                                                           viewForCopyLandscape.layer.transform = transform;

                                                           [self.navigationController.view sendSubviewToBack:viewForCopy];
                                                           [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.navigationController.view cache:YES];
                                                           [self.navigationController pushViewController:viewController animated:NO];
                                                           [viewforCopyLandscape2 removeFromSuperview];

                                                       }           
                                                       completion:^(BOOL finished) {
                                                           [[_gridView cellForItemAtIndex:index] setAlpha:1.0f];
                                                           [viewForCopy removeFromSuperview];
                                                           [UIView animateWithDuration:1.00 animations:^ {
                                                               [viewForCopyLandscape setAlpha:0.0f];

                                                           }];
                                                       }];
                                  }];
}
4

1 に答える 1

0

新しいUIViewをself.navigationController.viewプロパティに追加していたことに気づかなかったおかげで、コードは機能するようになりました。そのため、必要なのはそれをレンダリングして反転することだけで、翻訳は必要ありません!)

if(UIInterfaceOrientationIsPortrait(viewController.interfaceOrientation)) {
            self.view.userInteractionEnabled = NO;

            [self.navigationController.view addSubview:viewForCopy];
            [self.navigationController.view bringSubviewToFront:viewForCopy];
            [viewForCopy setFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)];
            [viewForCopy setAlpha:1.0f];

            [[_gridView cellForItemAtIndex:index] setAlpha:0.0f];

            [UIView animateWithDuration:1.5f
                                  delay:0.0f
                                options:UIViewAnimationCurveEaseInOut
                             animations:^{
                                 [self.navigationController.navigationBar setAlpha:0.0f];
                                 [newShadow removeFromSuperlayer];
                                 [viewForCopy setFrame:CGRectMake(-158, 10, self.view.bounds.size.width * 1.55, self.view.bounds.size.height * 1.25)];
                                 [self.navigationController.navigationBar setAlpha:0.0f];  
                             } 
                             completion:^(BOOL finished) {
                                 [UIView animateWithDuration:2.0f
                                                       delay:0.0f
                                                     options:UIViewAnimationCurveEaseInOut
                                                  animations:^{
                                                      [viewForCopy setAlpha:0.0f];
                                                      CATransform3D _3Dt = CATransform3DIdentity;
                                                      _3Dt = CATransform3DTranslate(_3Dt, viewForCopy.frame.size.width * -1, 0, 0);
                                                      _3Dt = CATransform3DRotate(_3Dt, M_PI / -2.0f, 0.0f, 0.1f, 0.0f);  
                                                      _3Dt.m34 = 1.0f / 500.0f;
                                                      _3Dt = CATransform3DTranslate(_3Dt, viewForCopy.frame.size.width, 0, 0);
                                                      viewForCopy.layer.transform = _3Dt;
                                                      [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.navigationController.view cache:YES];
                                                      [self.navigationController pushViewController:viewController animated:NO];

                                                  } 
                                                  completion:^(BOOL finished) {
                                                  }];
                                 [[_gridView cellForItemAtIndex:index] setAlpha:1.0f];
                                 [self.navigationController.view sendSubviewToBack:viewForCopy];

                             }];
        }
             else if(UIInterfaceOrientationIsLandscape(viewController.interfaceOrientation)){
                 UIView *viewforCopyLandscape2 = [[[UIView alloc]initWithFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)]autorelease];
                 viewforCopyLandscape2.backgroundColor = [UIColor whiteColor];
                 viewforCopyLandscape2.alpha = 0.0f;

                 [self.navigationController.view addSubview:viewforCopyLandscape2];
                 [self.navigationController.view bringSubviewToFront:viewforCopyLandscape2];
                 [self.navigationController.view addSubview:viewForCopy];
                 [self.navigationController.view bringSubviewToFront:viewForCopy];

                 [newShadow removeFromSuperlayer];

                 [viewForCopy setFrame:CGRectMake([_gridView rectForItemAtIndex:index].origin.x, [_gridView rectForItemAtIndex:index].origin.y + 65, [_gridView rectForItemAtIndex:index].size.width, [_gridView rectForItemAtIndex:index].size.height)];

                 [[_gridView cellForItemAtIndex:index] setAlpha:0.0f];

                 self.view.userInteractionEnabled = NO;

                 [UIView animateWithDuration:1.5f
                                       delay:0.0f
                                     options:UIViewAnimationCurveEaseInOut
                                  animations:^{
                                      [viewforCopyLandscape2 setFrame:CGRectMake(0, 20, self.view.bounds.size.width/2, self.view.bounds.size.height)];
                                      [viewForCopy setFrame:CGRectMake(407, 10, self.view.bounds.size.width * .78, self.view.bounds.size.height * 1.25)];
                                      [self.navigationController.navigationBar setAlpha:0.0f];  
                                      viewforCopyLandscape2.alpha = 1.0f;
                                  } 
                                  completion:^(BOOL finished) {

                                      UIView *viewForCopyLandscape = [[[UIView alloc]initWithFrame:CGRectMake(self.view.frame.origin.x, self.view.frame.origin.y, self.view.bounds.size.width, self.view.bounds.size.height)]autorelease];
                                      UIGraphicsBeginImageContext(CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height));
                                      [self.navigationController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
                                      UIImageView *viewImage = [[[UIImageView alloc]initWithImage:UIGraphicsGetImageFromCurrentImageContext()]autorelease];
                                      UIGraphicsEndImageContext();
                                      viewForCopyLandscape = viewImage;
                                      [self.navigationController.view addSubview:viewForCopyLandscape];
                                      [self.navigationController.view bringSubviewToFront:viewForCopyLandscape];

                                      [viewForCopy setAlpha:0.0f];
                                      [UIView animateWithDuration:2.0f
                                                            delay:0.0f
                                                          options:UIViewAnimationCurveEaseInOut
                                                       animations:^{

                                                           CATransform3D transform = CATransform3DMakeRotation(-M_PI / 1.1, 0.0, 1.0, 0.0);
                                                           transform.m34 = 1.0f / 2500.0f;
                                                           viewForCopyLandscape.layer.transform = transform;

                                                           [self.navigationController.view sendSubviewToBack:viewForCopy];
                                                           [UIView setAnimationTransition:UIViewAnimationTransitionNone forView:self.navigationController.view cache:YES];
                                                           [self.navigationController pushViewController:viewController animated:NO];
                                                           [viewforCopyLandscape2 removeFromSuperview];

                                                       }           
                                                       completion:^(BOOL finished) {
                                                           [[_gridView cellForItemAtIndex:index] setAlpha:1.0f];
                                                           [viewForCopy removeFromSuperview];
                                                           [UIView animateWithDuration:1.00 animations:^ {
                                                               [viewForCopyLandscape setAlpha:0.0f];

                                                           }];
                                                       }];
                                  }];
}
于 2012-08-10T05:39:45.463 に答える