Ios 如何在关闭视图控制器时获得淡出动画

Ios 如何在关闭视图控制器时获得淡出动画,ios,objective-c,uiviewcontroller,Ios,Objective C,Uiviewcontroller,我的视图控制器中有一个图像视图。当识别到朝向视图控制器下方的平移手势时,我想关闭视图控制器。虽然我已经实现了用平移手势关闭视图控制器,但我正试图弄清楚如何在关闭之前添加动画,就像iPhone中的照片应用程序一样 -(void)addPanGesture{ UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dis

我的视图控制器中有一个图像视图。当识别到朝向视图控制器下方的平移手势时,我想关闭视图控制器。虽然我已经实现了用平移手势关闭视图控制器,但我正试图弄清楚如何在关闭之前添加动画,就像iPhone中的照片应用程序一样

 -(void)addPanGesture{

    UIPanGestureRecognizer *gestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(dismissViewGes:)];
    gestureRecognizer.delegate = self;
    [self.view addGestureRecognizer:gestureRecognizer];


}



-(void)dismissViewGes:(UIPanGestureRecognizer *)gesture {


    CGPoint velocity = [gesture velocityInView:self.view];


    if(velocity.y > 0)
    {



        CATransition *transition = [[CATransition alloc]init];
        transition.duration = 2;
        [transition setValue:[NSNumber numberWithFloat:0.5f] forKey:kCATransitionFade];
        transition.subtype = kCATransitionFromTop;
        [self.view.layer addAnimation:transition forKey:nil];

        [[NetWrapper shared] addRemovedController:self];
        [self dismissViewControllerAnimated:NO completion:nil];


    }

}
我尝试添加一个CATTransition,希望淡出动画可以工作,但它不工作,只要应用了平移手势,视图就会消失

如何在视图关闭时添加淡出,就像在照片应用程序中一样


如果需要在显示或取消ViewController时添加动画,则应使用UIViewControllerAnimatedTransitioning,这里有一个类似的答案:

如果需要交互,可以使用UIPercentDrivenInteractiveTransition,这是一个控制百分比转换的类

关于这一切,苹果公司提供了一个很好的示例代码: 它有点旧,但很简单。

试试这个:

@IBAction func clickDismiss(_ sender: Any) {
    let transition: CATransition = CATransition()
    transition.duration = 0.5
    transition.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
    transition.type = kCATransitionFade
    transition.subtype = kCATransitionFromBottom
    self.view.window!.layer.add(transition, forKey: nil)
    self.dismiss(animated: false, completion: nil)
}

我提供了一个子ViewController并在其上添加了一个UIButton。将这些代码添加到按钮点击事件中,这对我很有用。

Swift 4.2,iOS 11

以下是一种使用扩展的优雅方式:

extension CATransition {
    func fadeTransition() -> CATransition {
        let transition = CATransition()
        transition.duration = 0.4
        transition.type = CATransitionType.fade
        transition.subtype = CATransitionSubtype.fromRight

        return transition
    }
}
然后,您可以在函数中或在
UIViewController的操作按钮中编写这三行代码:

private func dismissVC() {
    let transition = CATransition().fadeTransition()
    navigationController?.view.layer.add(transition, forKey: kCATransition)
    navigationController?.popViewController(animated: false)
}

你可以在主视图前面拍摄一个视图,然后将背景颜色设置为白色,并根据需要设置alpha。我试过了,即使不起作用<代码>[UIView animateWithDuration:2.0f动画:^{[self.view setAlpha:0.5];}完成:^(BOOL finished){[UIView animateWithDuration:0.3f动画:^{[self.view setAlpha:0.1];}完成:^(BOOL finished){/[[NetWrapper共享]addRemovedController:self];[self-dismissViewControllerAnimated:NO-completion:nil];}];}];}]您忘记了一行[自动布局需要]。只需在完成这项工作之前编写它(但与我上面提到的代码相同)。我真正想要的是,我想展示苹果如何在他们的photos应用程序中显示动画,就像我们只是将view控制器放入上一个视图中一样。我发现了这个教程,你可以参考:这很好用!我为fadeTransition函数添加了一个参数,该函数采用双精度。然后将参数传递给transition.duration。然后你可以在任何地方更改持续时间!