1

一部のviewControllerビューにボタンがあります。touchUpInside:メソッドは、モーダル ビュー コントローラーを提示します。タップしたボタン枠の中央から表示したい。どうすればこの結果を達成できますか? 私は試した:

webController.view.transform = CGAffineTransformScale(CGAffineTransformIdentity, self.buuton.center.x, self.button.center.y);
        [self presentViewController:webController animated:NO completion:^{
            // some code
        }];

しかし、それは私のUIを損傷しました。も使用しようとしましたが[UIView beginAnimation]、成功しませんでした。

4

2 に答える 2

1

私は、サブビューとして destvc.view を sourcevc.view に追加するというトリックで同様のことを達成しました。以下の関数を参照して、スケールインおよびスケールアウトします。

同じトリックを視覚効果としてのみ使用し、最後にアニメーションなしで VC を提示できます。

    +(void) animWithAlpha:(float)alpha view:(UIView*)view{
          [UIView animateWithDuration:0.15
                          delay:0.0
                        options:UIViewAnimationOptionBeginFromCurrentState
                     animations:^{
                         view.alpha = alpha;
                     }
                     completion:^(BOOL fin) {}];
    }


    +(void) zoomIN:(UIViewController*)sourceViewController destination:(UIViewController*)destinationViewController fromPoint:(CGPoint)point{

        [sourceViewController.view addSubview:destinationViewController.view];
        [destinationViewController.view setFrame:sourceViewController.view.window.frame];
        [destinationViewController.view setTransform:CGAffineTransformMakeScale(0.15, 0.1)];
        destinationViewController.view.center  = point;
        sourceViewController.view.userInteractionEnabled=NO;
        destinationViewController.view.alpha = 0.5;
        [self animWithAlpha:1 view:destinationViewController.view];
        [UIView animateWithDuration:0.4
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseInOut
                         animations:^{
                             [destinationViewController.view setTransform:CGAffineTransformMakeScale(1, 1)];
                             destinationViewController.view.center  = sourceViewController.view.center;
                         }
                         completion:^(BOOL finished){
                             if(finished){
                                 [destinationViewController.view setTransform:CGAffineTransformMakeScale(1, 1)];
                                 destinationViewController.view.center  = sourceViewController.view.center;
                                 sourceViewController.view.userInteractionEnabled=YES;
                             }
                         }];

    }

    +(void) zoomOUT:(UIViewController*)sourceViewController  destination:(UIView*)destination toPoint:(CGPoint)point{
        [sourceViewController.view setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
        [sourceViewController.parentViewController.view setUserInteractionEnabled:NO];
        [destination setUserInteractionEnabled:NO];
        [UIView animateWithDuration:0.4
                              delay:0.0
                            options:UIViewAnimationOptionCurveEaseOut
                         animations:^{
                             [sourceViewController.view setTransform:CGAffineTransformMakeScale(0.01, 0.01)];
                             [sourceViewController.view setAlpha:1.0];
                             sourceViewController.view.center  = point;
                         }
                         completion:^(BOOL finished){
                             if(finished){
                                 [sourceViewController.view setTransform:CGAffineTransformMakeScale(1.0, 1.0)];
                                 [sourceViewController.view removeFromSuperview];
                                 sourceViewController.view.center  = point;
                                 [destination setUserInteractionEnabled:YES];
                             }
    }
于 2013-10-04T11:41:41.520 に答える