显示动画添加子视图。

18

我想添加一个带有动画的子视图。 我正在使用addSubview方法,但它没有显示任何动画,所以我想在执行此操作时显示任何动画... 我正在使用以下代码:

UIViewController *vControllerHome = [[viewTemp alloc] initWithNibName:@"viewTemp" bundle:nil];
vControllerHome.view.frame =CGRectMake(0, 0, 320, 414);
[self.view addSubview:vControllerHome.view];
self.selectedViewController = vControllerHome;

有没有人能建议我如何做到这一点?

3个回答

38

这里是代码.. 试一下吧。

提示:请用要替换的视图名称替换 myView

CATransition *applicationLoadViewIn =[CATransition animation];
[applicationLoadViewIn setDuration:duration];
[applicationLoadViewIn setType:kCATransitionReveal];
[applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
[[myView layer]addAnimation:applicationLoadViewIn forKey:kCATransitionReveal];

27

这里是用于动画块的地方

[UIView transitionWithView:containerView 
                  duration:0.5 
               options:UIViewAnimationTransitionFlipFromRight //any animation
            animations:^ { [containerView addSubview:subview]; }
            completion:nil];

1
要移除子视图,请使用相同的代码,但将 [containerView addSubview:subview]; 替换为 [self.view removeFromSuperview];。 - rmooney

0

也许你可以子类化UIView并重写方法willMove(toSuperview newSuperview: UIView?)

这里是一个例子:

override public func willMove(toSuperview newSuperview: UIView?) {
    super.willMove(toSuperview: newSuperview)

    if let _ = newSuperview {
        // This view will be added to some view
        UIView.animate(withDuration: 0.2, delay: 0.0, usingSpringWithDamping: 0.6, initialSpringVelocity: 30.0, options: .curveEaseInOut, animations: {
            //...
        }, completion: { (finish) in

        })
    } else {
        // This view will be removed
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接