Почему мои CATransitions действуют? - PullRequest
1 голос
/ 23 декабря 2010

Я использую следующий код для переключения между представлениями с помощью 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 пикселей вверх, поверх него и другого вида, снова с низкой непрозрачностью.Непосредственно перед серединой перехода все работает нормально, вы видите только входящее представление и выходящее, делающее то, что они должны делать.Но немного позже, чем на полпути, вид, на который я переключаюсь, появляется в своем конечном назначении, под видом, с которого я переключаюсь, и вид, с которого я переключаюсь, уменьшен в непрозрачности.здесь

Ответы [ 2 ]

0 голосов
/ 24 декабря 2010

Вы также можете использовать этот способ

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];

Но я предлагаю вам использовать Navigation Controller вместо

[self.view addSubview:productVC.view];

просто используйте

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

Если вы используете это, фоновое представление не будет отображаться, вы увидите белый экран текущего вида. Но если вы добавите подпредставление, то вам нужно вручную удалить подпредставление.

0 голосов
/ 24 декабря 2010

Я действительно не понимаю, что вы хотите, но надеюсь, что этот код поможет реализовать, если нет, то расскажите о себе больше 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];
    }
}
...