SORU
21 HAZİRAN 2014, CUMARTESİ


"Görünümü Denetleyicisi" kaybolur UİViewControllerContextTransitioning kullanarak

Bir sorunum var ve aşağıda tarif ettim.

Özel geçişler için UİViewControllerContextTransitioning kullanıyorum.

Kontrolörler , ilk görünümü denetleyicisi ve ikinci görünümü denetleyicisi 2 seçenek var.

Şimdi animasyon ile ilk görünümü denetleyicisi secondview denetleyicisi eklemek istiyorum. Bunu daha önce yaptım, şimdi kumanda secondview denetleyicisi aşağıda ilk görünüm görebiliriz secondview denetleyicisi şeffaf var.

Ama ilk görünüm denetleyicisi görmek mümkün değilim , ve sadece siyah ekran secondview denetleyicisi aşağıda görebiliyorum.

İşte kod.

-(void)animateTransition:(id<UIViewControllerContextTransitioning>)transitionContext{
    self.transitionContext = transitionContext;
    if(self.isPresenting){
        [self executePresentationAnimation:transitionContext];
    }
    else{
       [self executeDismissalAnimation:transitionContext];
    }
  }

-(void)executePresentationAnimation:(id<UIViewControllerContextTransitioning>)transitionContext{
     UIView* inView = [transitionContext containerView];
     UIViewController* toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

     UIViewController* fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

     CGRect offScreenFrame = inView.frame;
     offScreenFrame.origin.y = inView.frame.size.height;
     toViewController.view.frame = offScreenFrame;

    toViewController.view.backgroundColor = [UIColor clearColor];
    fromViewController.view.backgroundColor = [UIColor clearColor];
    inView.backgroundColor = [UIColor  clearColor];
    [inView insertSubview:toViewController.view aboveSubview:fromViewController.view];
     // [inView addSubview:toViewController.view];
    CFTimeInterval duration = self.presentationDuration;
    CFTimeInterval halfDuration = duration/2;

    CATransform3D t1 = [self firstTransform];
    CATransform3D t2 = [self secondTransformWithView:fromViewController.view];

    [UIView animateKeyframesWithDuration:halfDuration delay:0.0 options:UIViewKeyframeAnimationOptionCalculationModeLinear animations:^{

    [UIView addKeyframeWithRelativeStartTime:0.0f relativeDuration:0.5f animations:^{
        fromViewController.view.layer.transform = t1;
    }];

    [UIView addKeyframeWithRelativeStartTime:0.5f relativeDuration:0.5f animations:^{
        fromViewController.view.layer.transform = t2;
    }];
    } completion:^(BOOL finished) {
    }];


    [UIView animateWithDuration:duration delay:(halfDuration - (0.3*halfDuration)) usingSpringWithDamping:0.7f initialSpringVelocity:6.0f options:UIViewAnimationOptionCurveEaseIn animations:^{
        toViewController.view.frame = inView.frame;
    } completion:^(BOOL finished) {
        [self.transitionContext completeTransition:YES];
    }];
}

[self.transitionContext completeTransition:YES]; aradığında, aniden ilk görünüm denetleyicisi kayboluyor ve siyah ekran ikinci görünümü denetleyicisi altında görüntüler.

Herhangi bir fikri olan var mı ? Teşekkürler.

CEVAP
5 Temmuz 2014, CUMARTESİ


Aynı sorun burada da iOS 8'de bir hata gibi görünüyor geçiriyordum. filed a radar ettim.

Reveal ekran kararıyor ve sonra hiyerarşi görünümü kontrol ediyordum. UIWindow anahtarı tamamen boş – hiç hiyerarşi görünümü!

Reveal'd

Biraz kolay bir çözüm var gibi görünüyor, basit durumlar için oynadım. Sadece yeniden ekleyin. toViewController'nin anahtar pencerenin bir küme olarak görüntüleyin:

transitionContext.completeTransition(true)
UIApplication.sharedApplication().keyWindow!.addSubview(toViewController.view)

Kontrol ettim ve rootViewController anahtar pencere hala doğru ayarlandığından, bu sorun değil. Eğer zaten sunulan kalıcı bir denetleyici içinde kumandanız size sunulan ne olacağını emin değilim, daha karmaşık durumlar için, etrafında deneme yapmak zorundasınız.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DONFANTASTICKYPESS

    DONFANTASTIC

    1 Temmuz 2007
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011