2015-10-07 30 views
9

uygulama Örneğin iOS 9.viewWillTransitionToSize: withTransitionCoordinator: Uygulama arka gider veya çağrılan inaktif

beri arka plan veya inaktif girdiğinde uygulaması ise yöntem viewWillTransitionToSize:withTransitionCoordinator:, birden çok kez çağrılan görünür iPad'deki portta, ev düğmesine basmak, uygulamanın 1024x768 boyutunda (manzara) ve daha sonra 768x1024 boyutunda (resme dönecek şekilde) yöntem çağrısı almasına neden olacaktır. Bu, iOS uygulamasının uygulama değiştirici için ekran görüntülerini elde etmek için bunu gerçekleştirdiği sonucuna varmamı sağladı.

Uygulama mantığımız, ekran boyutuna ve yeni boyutla ilgili olarak modelimizi güncelleyen ekran boyutu tetikleme görevlerine göre değişir. Kullanıcı cihazı döndürdüğünde veya çoklu görev moduna geçtiğinde bunu yapmalıyız (bölünmüş görünüm), ancak kullanıcı arka plana girdiğinde bunu yapmamalıyız.

Bir fikir UIApplicationWillResignActiveNotification bildirim kullanmak, ama bu bildirim gönderilmeden önce bazen viewWillTransitionToSize:withTransitionCoordinator: çağrılan çünkü imkansız görevi olduğu ortaya çıktı ve bildirim gönderildikten sonra onu çağrılan othertimes:/

Herhangi fikirleri ?

cevap

1

Şu anda aynı problemi yaşıyorum. Boyut değiştiğinde çok fazla iş yapıyorum ve arka plana girerken bunu gerçekleştiremiyorum. Bana "en" zaman için çalışan bir şey, uygulamanın [uiapplication sharedApplication] applicationState] kullanarak arka planda olup olmadığını kontrol etmektir. ViewWillTransitionToSize için 2 ek çağrı yapılmadan önce uygulama durumu UIApplicationStateBackground olarak ayarlanır. Bu tutarlı görünüyor. Uygulamanın çoklu görev kullanmaya başladığında bazı sorunlar yaşıyorum, sonra arka plana gider ve sonra tekrar tam boyutta ön plana çıkar. Hangi boyut değişikliklerinin kullanılması gerektiğini belirlemek için aramaların sırası tutarlı görünmemektedir.

+0

Benim geçerli bir çözüm 0.1 saniye viewWillTransitionToSize mantığı erteleme ve UIApplication.sharedApplication(). ApplicationState hala etkin olup olmadığını kontrol etmektir. Bu çirkin bir hack, ama başka bir yol göremiyorum. –

0

Yup, aynı sorun. 0.1 saniye kullanmak yerine, koordinatörün transitionDuration()'u kullanabilirsiniz. Ardından, arka plan durumunu kontrol edin.

+0

Animasyon tamamlanmadan önce eyalette ilgileniyorsanız maalesef ... –

1

viewWillTransitionToSize:withTransitionCoordinator'da geçişin ne zaman tamamlandığını bildirmek için UIViewControllerTransitionCoordinator'ı kullanabilirsiniz. Ardından, uygulamanızın arka planında olmadığını kontrol edin ve mantığınızı gerçekleştirin.

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator { 
    [coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) { 

     // after transition 

     if ([UIApplication sharedApplication].applicationState != UIApplicationStateBackground) { 
      // perform logic 
     } 
    }]; 
} 
+1

Güç düğmesine basarsanız, birçok kez activeState döner. – Rajneesh071