【问题标题】:Why are my CATransitions acting up?为什么我的 CATransitions 出现问题?
【发布时间】:2010-12-23 20:50:47
【问题描述】:

我正在使用以下代码通过 CATransition 在视图之间切换。

CATransition *applicationLoadViewIn = [CATransition animation];

    [applicationLoadViewIn setDuration:20];

    [applicationLoadViewIn setType:kCATransitionPush];

    [applicationLoadViewIn setSubtype:kCATransitionFromTop];

    [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];

    ViewToSwitchTo *myviewcontroller = [[ViewToSwitchTo alloc] init];

    [self.view.layer addAnimation:applicationLoadViewIn forKey:kCATransitionPush];

    [self.view addSubview:myviewcontroller.view];

它的功能主要是我想要的。它应该从顶部推动,但是由于某种原因它的行为很奇怪。首先,我要切换到的视图应该从底部进入,但由于某种原因,我要切换到的视图以低不透明度出现在它的顶部,所以你可以看到它们。但是,您还会看到进来的视图,在其自身和另一个视图之上,向上移动了 100 像素,再次具有低不透明度。就在过渡的中点之前,一切正常,你只看到进来的视图和出去的视图,做他们应该做的事情。但是在中途点之后,我要切换到的视图出现在它的最终目的地,在我要切换的视图下方,并且我要切换的视图的不透明度降低了。

这是怎么回事?

【问题讨论】:

  • 我不知道这里发生了什么,但如果您还没有观看 2010 年 WWDC 会议 424 和 425 核心动画实践(第 1 部分和第 2 部分),那么您应该。他们可能会或可能不会阐明这个特定问题,但他们充满了非常详细的与 CA 相关的绝妙建议。
  • 我想,这就是它的工作方式。见this question

标签: iphone catransition


【解决方案1】:

我真的不明白你想要什么,但希望这段代码有助于实现,如果没有,请告诉更多关于你的 CATransition

-(void) startAnimation {
    fullImageView.alpha = 0.50;
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:2.0];
    [UIView setAnimationRepeatCount:1];
    [UIView setAnimationRepeatAutoreverses:NO];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDidStopSelector:@selector(pulseAnimationDidStop:finished:context:)];
    fullImageView.alpha = 1.0;
    [UIView commitAnimations];
}

- (void)pulseAnimationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context {
    if(hasFocus) {
        [self startAnimation];
    } else {
        fullImageView.alpha = 1.0;
    }
}

-(void) setHasFocus:(BOOL)_hasFocus {
    hasFocus = _hasFocus;
    if(hasFocus) {
        [self startAnimation];
    }
}

【讨论】:

    【解决方案2】:

    你也可以这样用

    CATransition *applicationLoadViewIn = [CATransition animation];
        [applicationLoadViewIn setDuration:1.5];
        [applicationLoadViewIn setType:kCATransitionPush];
        [applicationLoadViewIn setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
        //[applicationLoadViewIn setRepeatCount:114];
    
        productVC=[[PoductViewController alloc]initWithNibName:@"PoductViewController" bundle:[NSBundle mainBundle]];
    
        [[productVC.view layer] addAnimation:applicationLoadViewIn forKey:kCATransitionPush];
        [self.view addSubview:productVC.view];
    

    但我建议你使用导航控制器来代替

    [self.view addSubview:productVC.view];
    

    随便用

    [self.navigationController pushViewController:productVC animated:YES];
    

    如果你使用它,将没有背景视图,你会看到当前视图的白屏。但是如果添加子视图,则需要手动删除子视图。

    【讨论】:

      猜你喜欢
      • 2020-02-28
      • 2012-02-12
      • 2021-11-27
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      相关资源
      最近更新 更多