标签: uiviewanimationtransition

UIViewController - 自定义解除转换的问题

摘要

我有一个内容UIViewController,它使用自定义转换呈现设置UIViewController.演示文稿是presentViewController:animated:completion:.

当我稍后解除设置时dismissViewControllerAnimated:completion:,呈现控制器突然跳回设置控制器演示之前的初始位置.

我在设备上有一个解决方法,但不是模拟器.但是,我想知道我做错了什么而不是黑客入侵让它消失的小屋.我还打算让这个动画互动,我怀疑这个问题会在我这样做时放大.

定制过渡 - 打开引擎盖

期望的效果是呈现控制器在屏幕上向下滑动,并且看到呈现的控制器位于其后面,从其抬起以填充屏幕.在呈现控制器的使用寿命期间,呈现控制器的顶部保持在屏幕上.它停留在屏幕的底部,但位于显示的控制器上方.

您可以想象在汽车(前部控制器)上抬起发动机罩以查看后面的发动机(显示的设置),但发动机罩在底部保持可见,以获得一些背景信息.

我计划对其进行改进,以便呈现控制器真正看起来以3d方式提升视角,但我还没有那么远.

当设置被取消时,原始呈现控制器(发动机罩)应向上滑回屏幕,并且呈现的控制器(设置)稍微下沉(关闭发动机罩).

这是切换屏幕上和屏幕外设置的方法(它只是由UIButton调用).你会注意到呈现视图控制器将自己设置为<UIViewControllerTransitioningDelegate>.

-(void) toggleSettingsViewController
{
  const BOOL settingsAreShowing = [self presentedViewController] != nil;
  if(!settingsAreShowing)
  {
    UIViewController *const settingsController = [[self storyboard] instantiateViewControllerWithIdentifier: @"STSettingsViewController"];
    [settingsController setTransitioningDelegate: self];
    [settingsController setModalPresentationStyle: UIModalPresentationCustom];
    [self presentViewController: settingsController animated: YES completion: nil];
  }
  else
  {
    [self dismissViewControllerAnimated: YES completion: nil];
  }
}
Run Code Online (Sandbox Code Playgroud)

要实现<UIViewControllerAnimatedTransitioning>呈现视图控制器,也只需返回自身<UIViewControllerAnimatedTransitioning>

-(id<UIViewControllerAnimatedTransitioning>) animationControllerForPresentedController:(UIViewController *)presented presentingController:(UIViewController *)presenting …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uikit uiviewanimationtransition ios

26
推荐指数
1
解决办法
3万
查看次数

UIView.animateWithDuration不动画Swift(再次)

注意:我已经检查了以下堆栈溢出问题:

27907570,32229252,26118141,31604300

我想要做的就是当一个按钮附带的IBAction调用时,在视图中淡化动画(通过alpha).然后在视图上的按钮被击中时反转.

我的皱纹可能是我在故事板视图中使用ViewDock上的辅助视图.视图在viewDidLoad时被添加到子视图中,其中框架/边界设置为与超级视图相同(用于完全停留)

这是作为叠加视图完成的原因,因为它是一个教程指示器.

结果(就像许多其他列出这个问题的人一样)是视图(和包含的控件)只是立即出现并立即消失.没有褪色.

我已尝试使用延迟,带有和不带完成,带有转换的animationWithDuration,甚至以旧的UIView.beginAnimations启动.

什么都行不通.建议热烈欢迎.

代码与我可以做到的一样简单:
编辑:将代码扩展到与
Edit2: TL 相关的所有内容; DR除了UIViewAnimateWithDuration之外,其他任何东西都可以工作,它似乎忽略了块和持续时间,只是直接运行内联代码UI更改.解决这个问题得到了赏金

@IBOutlet var infoDetailView: UIView! // Connected to the view in the SceneDock

override func viewDidLoad() {
    super.viewDidLoad()

    // Cut other vDL code that isn't relevant

    setupInfoView()
}

func setupInfoView() {
    infoDetailView.alpha = 0.0
    view.addSubview(infoDetailView)
    updateInfoViewRect(infoDetailView.superview!.bounds.size)
}

func updateInfoViewRect(size:CGSize) {
    let viewRect = CGRect(origin: CGPointZero, size: size)

    infoDetailView.frame = viewRect
    infoDetailView.bounds = viewRect

    infoDetailView.layoutIfNeeded()
    infoDetailView.setNeedsDisplay()
}

override func viewWillTransitionToSize(size: …
Run Code Online (Sandbox Code Playgroud)

animation uiviewanimation uiviewanimationtransition ios swift

22
推荐指数
4
解决办法
2万
查看次数

如何翻转单个UIView(不翻转父视图)

这是一个iPad项目,我有一个带有几个子视图的UIView,我试图使用[UIView transitionFromView:toView:duration:options:completion]为其中一个UIViews制作动画,但是当我运行此方法时,整个父视图被翻转!这是我正在使用的代码:

UIView *secondView = [[UIView alloc] initWithFrame:CGRectMake(200, 200, 300, 300)];
[newView setBackgroundColor:[UIColor redColor]];
    [UIView transitionFromView:self.firstView.view toView:secondView duration:1.0 options:UIViewAnimationOptionTransitionFlipFromLeft completion:nil];
Run Code Online (Sandbox Code Playgroud)

有关如何在不动画整个父视图的情况下在这些视图之间切换的任何想法?谢谢!

objective-c uiviewanimation uiviewanimationtransition ios

21
推荐指数
2
解决办法
3万
查看次数

iPhone SDK 4"半卷页面过渡"

在史蒂夫乔布斯今年早些时候发布iPhone SDK 4的主题演讲中,其中一张幻灯片显示"半卷曲页面过渡"是新SDK的一部分:

alt text http://cl.ly/c203189b44788d490ae8/content

我查看了iOS API文档,似乎无法找到这种转换.有谁知道它在哪里?

iphone cocoa-touch uiviewanimationtransition ios4

19
推荐指数
2
解决办法
1万
查看次数

在添加子视图时显示动画

我想添加一个带动画的子视图.我正在使用添加子视图,所以它没有显示任何动画所以我想在我这样做时显示任何动画...我使用下面的代码: -

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

任何人都可以建议我这样做吗?

animation addsubview uiviewanimation uiviewanimationtransition

19
推荐指数
2
解决办法
3万
查看次数

dismissModalViewController with transition:从左到右

我使用一个很好的方法来解雇我的模态视图控制器:

[self dismissModalViewControllerWithTransition:2];
Run Code Online (Sandbox Code Playgroud)

这使得幻灯片从左向右过渡,就像导航控制器弹出视图一样.

由于此方法是非公开方法,因此Apple不会接受它.如何在我的代码中编程这种动画(从左到右滑动,关闭模态视图,从右到左滑动以呈现模态视图)?

提前致谢

iphone animation catransition uiviewanimationtransition

17
推荐指数
2
解决办法
9955
查看次数

在addSubView中从左到右添加幻灯片放映(转换)

我试着模仿NavigationViewController,非常类似于默认MailAppiPhone

当邮件总结一下,应该滑入邮件的详细信息,并在返回按钮被点击,邮件摘要视图被滑动式回来.

这是我必须动画从摘要到细节的过渡(removeFromSuperView)

CGRect temp = self.view.frame;
temp.origin.x = 300;
[UIView animateWithDuration:0.5
                      delay:0.0
                    options: UIViewAnimationCurveEaseOut
                 animations:^{
                     self.view.frame = temp;
                 }completion:^(BOOL finished){
                     [self.view removeFromSuperview];
                 }];
Run Code Online (Sandbox Code Playgroud)

这就是我必须动画从Detail to Summary(addSubview)转换的动画

    CATransition *transition = [CATransition animation];
    transition.duration = 0.5;
    transition.type = kCATransitionFromRight;
    transition.subtype = kCATransitionFade;
    [parentView.layer addAnimation:transition forKey:nil];
    [parentView addSubview:myVC.view];
Run Code Online (Sandbox Code Playgroud)

现在,我的第一部分代码运行良好!在哪里 - 作为第二部分,我只能实现淡入动画.如何引入幻灯片过渡?

iphone objective-c uiviewanimationtransition ios

16
推荐指数
1
解决办法
4万
查看次数

视图在被呈现后被UITransitionView阻止

我有一个侧面导航控制器,并通过UIButton呈现它.当我直接将这个NC作为根视图控制器时[self presentviewcontroller: NC animated: YES completion: nil],某些原因NC的菜单面被一个UITransitionView我无法消失的东西阻挡.

我附上了一张照片 查看层次结构. 这里 是另一个.

我尝试过以下方法:

UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window];
    window.backgroundColor = kmain;


    CATransition* transition = [CATransition animation];
    transition.duration = .5;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromTop;

    [nc.view.layer addAnimation:transition forKey:kCATransition];

    [UIView transitionWithView:window
                      duration:0.5
                       options:UIViewAnimationOptionTransitionNone
                    animations:^{ window.rootViewController = nc; }
                    completion:^(BOOL finished) {
                        for (UIView *subview in window.subviews) {
                            if ([subview isKindOfClass:NSClassFromString(@"UITransitionView")]) {
                                [subview removeFromSuperview];
                            }
                        }
                    }];
Run Code Online (Sandbox Code Playgroud)

但它非常hacky,并且随着窗口的rootviewcontroller在转换过程中发生变化,它会有点波动,导航控制器的一部分和右上角变黑.看起来很糟糕.

uiviewcontroller uinavigationcontroller catransition uiviewanimationtransition ios

16
推荐指数
3
解决办法
7764
查看次数

容器视图在completeTransition上消失:

我正在使用自定义视图控制器转换UIViewControllerAnimatedTransitioning,以显示和关闭视图控制器.

呈现动画效果很好,但是当我运行dismiss动画时,一旦我调用completeTransition:containerView被删除的动画.

我不确定发生了什么,这里是转换代码:

- (void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext {
    UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];
    UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    UIView *containerView = [transitionContext containerView];
    containerView.backgroundColor = [UIColor blackColor];

    if (self.reverse) {
        [containerView addSubview:toViewController.view];
        [containerView addSubview:fromViewController.view];
    } else {
        [containerView addSubview:fromViewController.view];
        [containerView addSubview:toViewController.view];
    }

    if (! self.reverse) { // Forward
        toViewController.view.frame = CGRectMake(-containerView.frame.size.width, 0, containerView.frame.size.width, containerView.frame.size.height);
    } else {
        fromViewController.view.frame = CGRectMake(0, 0, containerView.frame.size.width, containerView.frame.size.height);
    }

    [UIView animateWithDuration:[self transitionDuration:transitionContext] delay:0 usingSpringWithDamping:0.75f initialSpringVelocity:1.0f options:UIViewAnimationOptionCurveLinear animations:^{
        if (self.reverse) {
            fromViewController.view.frame …
Run Code Online (Sandbox Code Playgroud)

objective-c uiviewcontroller uiview uiviewanimationtransition ios

15
推荐指数
1
解决办法
7833
查看次数

展开/折叠UITableViewCell以实现类似Evernote的过渡

我有兴趣实现视图控制器之间的转换,非常类似于Evernote的iOS应用程序中的转换:

在此输入图像描述

当点击"位置"时,它会平滑地扩展为看起来像UINavigationController的绿色边框.要折叠它,我可以点击"返回"或从屏幕左侧滑动以逐渐过渡到主屏幕.

我不是在寻找准确的代码示例来进行复制粘贴,而是寻找有关哪些概念和Apple API可以利用的高级指导.进一步来说,

  • 这可能使用哪些转换/动画API?
  • "场所"展开后,如何在整个视图控制器周围实现绿色边框?

objective-c uiviewcontroller uiviewanimationtransition ios custom-transition

15
推荐指数
1
解决办法
2127
查看次数