1

我希望你能帮助我我正在尝试在我的应用程序中实现一个自定义转换,它将显示一个自定义模态视图控制器。我能够让视图控制器按预期显示,但是,我无法转换为动画。对此的任何帮助或正确方向的指针将不胜感激。

请在下面查看我的代码:

-(NSTimeInterval)transitionDuration:(id<UIViewControllerContextTransitioning>)transitionContext{
    return 1.0;
}

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext
{
    UIViewController *fromVC = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toVC = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    CGRect sourceRect = [transitionContext initialFrameForViewController:fromVC];

    fromVC.view.frame = sourceRect;

    UIGraphicsBeginImageContextWithOptions(fromVC.view.frame.size, NO, 0);
    [fromVC.view drawViewHierarchyInRect:fromVC.view.bounds afterScreenUpdates:YES];
    UIImage *fromVCImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIView *container = [transitionContext containerView];
    [container setBackgroundColor:[UIColor colorWithPatternImage:fromVCImage]];

    [container insertSubview:toVC.view belowSubview:fromVC.view];

    CGRect fromVCFrame = fromVC.view.frame;

    __block CGRect toVCFrame = toVC.view.frame;
    toVCFrame.origin.y = fromVCFrame.origin.y + fromVCFrame.size.height;
    [toVC.view setFrame:toVCFrame];
    [toVC.view setAlpha:0.0];
    [toVC.view setBackgroundColor:[UIColor colorWithPatternImage:fromVCImage]];

    [transitionContext finalFrameForViewController:toVC];

    //3.Perform the animation...............................
    [UIView animateWithDuration:1.0
                     animations:^{
                         toVCFrame.origin.y = fromVCFrame.origin.y;
                         toVC.view.frame = toVCFrame;

                         [toVC.view setAlpha:1.0];
                     }
                     completion:^(BOOL finished) {
                         //When the animation is completed call completeTransition
                         [transitionContext completeTransition:YES];
                     }];
}

通过 UITapGestureRecognizer 调用 presentViewController 时从视图控制器添加代码

- (void) onTapGesture:(UITapGestureRecognizer *)recognizer
{
    ImagesCollectionViewController *imagesCollectionView = [[Utils getStoryboardForDeviceWithIdentifier:MAIN_STORYBOARD] instantiateViewControllerWithIdentifier:IMAGES_VIEW];
    imagesCollectionView.transitioningDelegate = self;
    imagesCollectionView.modalTransitionStyle = UIModalPresentationCustom;

    [self presentViewController:imagesCollectionView animated:YES completion:^{

    }];
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForDismissedController:(UIViewController *)dismissed
{
    return self.contentSlideTransitionManager;
}

- (id<UIViewControllerAnimatedTransitioning>)animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:(UIViewController *)source
{
    return self.contentSlideTransitionManager;
}
4

1 回答 1

2

我猜这是你的问题:

 [container insertSubview:toVC.view belowSubview:fromVC.view];

If toVC.viewis below fromVC.view,它隐藏在它的后面,所以你看不到它的作用。

于 2014-02-21T01:51:25.770 回答