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

Sri*_*rri 3 objective-c uiviewcontroller ios

我的视图控制器中有一个图像视图。当向视图控制器的下侧识别出平移手势时,我想关闭视图控制器。虽然我已经实现了使用平移手势关闭视图控制器,但我试图弄清楚如何在关闭之前添加动画,就像在 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];


    }

}
Run Code Online (Sandbox Code Playgroud)

我尝试添加一个 CATransition,希望淡出动画会起作用,但它不起作用,一旦应用平移手势,视图就会消失。

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

照片查看器。 我现在有这个,当我在这个视图上使用平移手势时,它会被关闭。 但我想添加一个动画,以便它在第二张图片中被忽略

这是我想要实现的动画

小智 6

尝试这个:

@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)
}
Run Code Online (Sandbox Code Playgroud)

我展示了一个 SubViewController 并在其上添加了一个 UIButton。将这些代码添加到按钮单击事件中,这对我有用。


Đor*_*vić 5

Swift 4.2, iOS 11

Here is an elegant way using extensions:

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

        return transition
    }
}
Run Code Online (Sandbox Code Playgroud)

Then you can just write these three lines of code in a function or inside the action button in your UIViewController:

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

  • 这很好用!我为接受双精度的fadeTransition 函数添加了一个参数。然后将参数传递给 transition.duration。然后您可以在任何地方更改持续时间! (2认同)