UIView animateWithDuration立即跳转到完成处理程序

时间:2015-09-26 20:21:11

标签: ios animation uiview

 NSLog(@"started");
[UIView animateWithDuration:2 animations:^{
        NSLog(@"inside");
} completion:^(BOOL finished){

    NSLog(@"finished");
}];

这是输出:

2015-09-26 13:17:21.541看[9894:1848566]开始了

2015-09-26 13:17:21.541在

中查看[9894:1848566]

2015-09-26 13:17:21.551看[9894:1848566]完成了

请注意,时间戳是从“内部”到“完成”之间的毫秒数。'

这是我的完整代码,结果相同且动画无法运行。 这是为自定义viewController演示文稿完成的。

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    // Get the set of relevant objects.
    UIView *containerView = [transitionContext containerView];
    UIViewController *fromVC = (TJWCameraRollCVC *)[transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    TJWPhotoViewController *toVC   = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    UIView *toView = [transitionContext viewForKey:UITransitionContextToViewKey];
    UIView *fromView = [transitionContext viewForKey:UITransitionContextFromViewKey];

    // Set up some variables for the animation.
    CGRect containerFrame = containerView.frame;
    CGRect toViewStartFrame = [transitionContext initialFrameForViewController:toVC];
    CGRect toViewFinalFrame = [transitionContext finalFrameForViewController:toVC];
    CGRect fromViewFinalFrame = [transitionContext finalFrameForViewController:fromVC];

    NSMutableArray *oldObjects = [[NSMutableArray alloc] init];

    UIImageView *zoomImage;

    // Set up the animation parameters.
    if (presenting) {
        // Modify the frame of the presented view so that it starts
        // offscreen at the lower-right corner of the container.

        UIImageView *zoomImage = [[UIImageView alloc] initWithImage:toVC.chosenImage];
        zoomImage.frame = CGRectMake(toVC.fullScreenOrigin.x, toVC.fullScreenOrigin.y, containerFrame.size.width, containerFrame.size.height);
        zoomImage.alpha = 0.2;
        zoomImage.transform = CGAffineTransformMakeScale(0.1, 0.1);
        [containerView addSubview:zoomImage];

        toView.frame = CGRectMake(containerFrame.size.width, containerFrame.size.height, containerFrame.size.width, containerFrame.size.height);

    }
    else {
        // Modify the frame of the dismissed view so it ends in
        // the lower-right corner of the container view.
        fromViewFinalFrame = CGRectMake(containerFrame.size.width, containerFrame.size.height, toView.frame.size.width, toView.frame.size.height);
    }

    // Always add the "to" view to the container.
    // And it doesn't hurt to set its start frame.
    [containerView addSubview:toView];

    // Animate using the animator's own duration value.
    NSLog(@"started");
    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        NSLog(@"inside");
        if (presenting) {
            NSLog(@"presenting");

            // Move the presented view into position.
            [zoomImage setFrame:toViewFinalFrame];
            [zoomImage setTransform: CGAffineTransformMakeScale(1, 1)];
            [zoomImage setAlpha:1];

        }
        else {
            // Move the dismissed view offscreen.
            [fromView setFrame:fromViewFinalFrame];
        }
    } completion:^(BOOL finished){

        NSLog(@"finished");
        BOOL success = ![transitionContext transitionWasCancelled];
        NSLog(@"%d", success);

        // After a failed presentation or successful dismissal, remove the view.
        if ((presenting && !success) || (!presenting && success)) {
            [toView removeFromSuperview];
        }

        if (presenting && success) {
//            toView.frame = containerFrame;
            [zoomImage removeFromSuperview];
        }

        // Notify UIKit that the transition has finished
        [transitionContext completeTransition:success];
    }];
}

0 个答案:

没有答案