Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如果一部分是UIView animateWithDuration,而另一部分是transitionFromView,如何进行自定义视图控制器转换?_Ios_Objective C_Cocoa Touch_Ios7_Uiviewcontroller - Fatal编程技术网

Ios 如果一部分是UIView animateWithDuration,而另一部分是transitionFromView,如何进行自定义视图控制器转换?

Ios 如果一部分是UIView animateWithDuration,而另一部分是transitionFromView,如何进行自定义视图控制器转换?,ios,objective-c,cocoa-touch,ios7,uiviewcontroller,Ios,Objective C,Cocoa Touch,Ios7,Uiviewcontroller,我似乎不知道如何在iOS 7中使用自定义视图控制器转换来执行animateWithDuration和transitionWithView 这是我转换视图的代码。我基本上希望从初始视图(表示为屏幕截图)过渡到模糊和变暗(我将初始屏幕截图图像分解为模糊图像,并在其顶部添加一个黑色透明视图): -(void)animateTransfion:(id)transitionContext{ ImageGalleryPageViewController*toViewController=(ImageGall

我似乎不知道如何在iOS 7中使用自定义视图控制器转换来执行
animateWithDuration
transitionWithView

这是我转换视图的代码。我基本上希望从初始视图(表示为屏幕截图)过渡到模糊和变暗(我将初始屏幕截图图像分解为模糊图像,并在其顶部添加一个黑色透明视图):

-(void)animateTransfion:(id)transitionContext{
ImageGalleryPageViewController*toViewController=(ImageGalleryPageViewController*)[transitionContext ViewControllerWorkey:UITransitionContextToViewControllerKey];
UIViewController*fromViewController=[transitionContext ViewControllerWorky:UITransitionContextFromViewControllerKey];
//添加一个表示我们从中转换的视图控制器的图像视图
UIImage*fromVCImage=[自转换视图到图像:fromViewController.view];
UIImageView*fromVCImageView=[[UIImageView alloc]initWithImage:fromVCImage];
[[transitionContext containerView]添加子视图:来自VCImageView];
//创建同一图像视图的模糊版本
GPUImageiOSBlurFilter*blurFilter=[[GPUImageiOSBlurFilter alloc]init];
blurFilter.blurRadiusInPixels=2.0;
UIImage*blurredFromVCImage=[blurFilter ImageByFilterInImage:fromVCImage];
UIImageView*blurredFromVCImageView=[[UIImageView alloc]initWithImage:blurredFromVCImage];
//添加一个深色覆盖层
UIView*darkOverlay=[[UIView alloc]initWithFrame:fromVCImageView.frame];
darkOverlay.backgroundColor=[UIColor blackColor];
darkOverlay.alpha=0.0;
[[transitionContext containerView]添加子视图:darkOverlay];
[UIView animateWithDuration:[self-transitionDuration:transitionContext]动画:^{
darkOverlay.alpha=0.8;
}完成:^(布尔完成){
}];
[UIView转换FromView:fromVCImageView到View:blurredFromVCImageView持续时间:[自转换持续时间:转换上下文]选项:UIView动画选项转换交叉溶解完成:^(布尔完成){
[transitionContext completeTransition:![transitionContext transitionWasCancelled];
}];
}
但只有模糊部分起作用,而不是变暗部分。如果我移除最后一块,只使用第一块,那么变暗效果很好。我似乎不能两者兼得


我怎样才能使它们都起作用?我知道可能有一种方法可以调整模糊图像的alpha值,但我想使用
transitionFromView:
来实现更高级的效果。

transitionWithView:…
中,逻辑或
UIViewAnimationOptionBeginFromCurrentState
作为您的选项之一。否则,由于另一个动画刚刚开始,暗覆盖动画将突然完成。包含此选项将告诉下一个动画从上一个动画的当前状态开始。

有一种方法可以实现您尝试执行的操作,而不必同时使用
animateWithDuration
transitionWithView
。在动画转换中,您应该在动画转换完成之前添加
from
-和
toViewController
的视图,因此您可以只使用
fromViewController
的视图,而不必添加
fromVCImageView
。然后,您可以使用
transitionWithView:…
在顶部添加
blurredFromVCImageView
,并使用其中一个选项
UIViewAnimationOptionAllowAnimatedContent
在动画块中执行暗覆盖动画。
- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    ImageGalleryPageViewController* toViewController = (ImageGalleryPageViewController *)[transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];
    UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    // Add an image view representing the view controller we're transitioning from
    UIImage *fromVCImage = [self convertViewToImage:fromViewController.view];
    UIImageView *fromVCImageView = [[UIImageView alloc] initWithImage:fromVCImage];

    [[transitionContext containerView] addSubview:fromVCImageView];

    // Create a blurred version of the same image view
    GPUImageiOSBlurFilter *blurFilter = [[GPUImageiOSBlurFilter alloc] init];
    blurFilter.blurRadiusInPixels = 2.0;

    UIImage *blurredFromVCImage = [blurFilter imageByFilteringImage:fromVCImage];
    UIImageView *blurredFromVCImageView = [[UIImageView alloc] initWithImage:blurredFromVCImage];

    // Add a dark overlay
    UIView *darkOverlay = [[UIView alloc] initWithFrame:fromVCImageView.frame];
    darkOverlay.backgroundColor = [UIColor blackColor];
    darkOverlay.alpha = 0.0;

    [[transitionContext containerView] addSubview:darkOverlay];

    [UIView animateWithDuration:[self transitionDuration:transitionContext] animations:^{
        darkOverlay.alpha = 0.8;
    } completion:^(BOOL finished) {
    }];

    [UIView transitionFromView:fromVCImageView toView:blurredFromVCImageView duration:[self transitionDuration:transitionContext] options:UIViewAnimationOptionTransitionCrossDissolve completion:^(BOOL finished) {
        [transitionContext completeTransition:![transitionContext transitionWasCancelled]];
    }];
}