Bir iOS uygulamasına başka bir UIWindow eklemenin avantajları, sorunları, örnekleri?


92

Son zamanlarda bir iOS uygulamasının yalnızca bir iOS uygulamasına sahip olduğu gerçeğini merak ediyordum UIWindow. Başka bir tane oluşturup UIWindowekrana yerleştirmek bir sorun gibi görünmüyor .

Sorum biraz belirsiz, ama ilgileniyorum:

  • UIWindowBaşka yollarla yapılamayan bir saniyeyle potansiyel olarak ne elde edebilirim?
  • Birden çok UIWindowörnek kullanırken ne ters gidebilir ?
  • İnsanların UIWindowiPhone'da açılır pencere benzeri görünümler görüntülemek için 2. bir kullandıklarını gördüm . Bu, bunu yapmanın iyi bir yolu mu? Neden? Neden olmasın?
  • Bir başkasına sahip olmanın tamamen mantıklı olduğu başka örnekler var UIWindowmı?

Bir şeyi kaçırdığımdan değil. Başka bir UIWindowörnek oluşturma ihtiyacı hissetmedim ama belki de farkında olmadığım harika şeyler yapmaya izin verirdi! :-)

Bu sorunu çözmeme yardımcı olmasını umuyorum: Şu anda görüntülenen şeyin üzerine bir "kapak görünümü" eklemem gerekiyor. Halihazırda sunulan bir veya daha fazla modal kontrolör varsa da çalışmalıdır. Ben eklerseniz UIViewkök kontrolörün görünümüne, modal kontrolörler böylece popover denetleyicileri yapmak, üstüne otur. Kapak görünümünü modsal olarak sunarsam ve halihazırda modal bir kontrolör varsa, ekranın sadece bir kısmı kapsanır.


İOS uygulamalarında birden fazla UIWindows kullanma shaune.com.au/using-multiple-uiwindows-in-ios-applications
onmyway133

Yanıtlar:


27

A UIWindow, sistem klavyesi gibi diğer UI öğelerinin üzerinde kayabilir.

Son paragrafınızı ele almak için: UIWindowAna pencerenizle aynı çerçeveyle bir a yapın . windowLevelÖzelliğini olarak ayarlayın UIWindowLevelStatusBar. hiddenÖzelliğini olarak ayarlayın NO.


Pekala. Teşekkürler. Bunu biliyordum. Sorularım için biraz detaya girebilir misin? MakeKeyAndVisible tarafından eklenen bir saniyelik UIWindow'un RID'sini nasıl alacağınızı biliyor musunuz?
Krumelur

İkinci UIWindow'un gizli özelliğini YES olarak ayarlayın.
rob mayoff

Teşekkürler. Ve pencereyi anahtar ve görünür hale getirerek mi gösteriyorum? Ve onu BAŞKA BİR pencereyi görünür yaparak ve sadece diğerini atarak gizlerim? UIActionSheet'in yaptığı gibi bir UIWindow'u nasıl canlandırabilirim?
Krumelur

Buna dikkat et. ! = UIWindowLevelNormal konumunda ise, klavye <iOS7'de onun altında görünecektir.
Shawn

108

Rob'un cevabından başlayarak biraz oynadım ve bu konu hakkında bilgi almaya çalışan diğerleri için bazı notlar yazmak istiyorum:

  • Bir başkasını eklemek hiç sorun değil UIWindow. Sadece bir tane oluşturun ve makeKeyAndVisible. Bitti.
  • Başka bir pencereyi görünür hale getirerek onu kaldırın, ardından artık ihtiyacınız olmayan pencereyi serbest bırakın.
  • "Anahtar" olan pencere tüm klavye girişlerini alır.
  • UIWindow her şeyi kapsar, modalleri, popover'ları vb. bile kapsar. Harika!
  • UIWindowher zaman dolaylı olarak dikeydir. Dönmez. Yeni pencerenin kök denetleyicisi olarak bir denetleyici eklemeniz ve bunun dönüşü işlemesine izin vermeniz gerekir. (Tıpkı ana pencere gibi)
  • Pencerenin seviyesi, ne kadar "yüksek" görüntüleneceğini belirler. UIWindowLevelStatusBarHer şeyi kapsaması için ayarlayın . hiddenÖzelliğini HAYIR olarak ayarlayın .
  • 2. UIWindowekran, her şeyin üzerinde kayan görünümler getirmek için kullanılabilir. Kukla bir denetleyici oluşturmadan, yalnızca bunu bir UIPopoverController.
  • Açılır pencere denetleyicisinin olmadığı, ancak buna benzer bir şeyi taklit etmek isteyebileceğiniz iPhone'da özellikle yararlı olabilir.
  • Ve evet, tabii ki sorunumu çözdü: Uygulama aktivasyonu iptal ederse, iOS'un uygulamanızın mevcut içeriğinin ekran görüntüsünü almasını önlemek için şu anda gösterilenin üzerine bir kapak penceresi ekleyin.

Cevabınız olmasaydı, başka bir UIWindow kullanma cesaretine sahip olamazdım. Bu aynı zamanda son derece yardımcı oldu çünkü ikinci UIWindow kendi başına otomatik olarak dönmezdi.
Dan Abramov

1
Çok aydınlatıcı görev. Ancak bu pencereyi terk ederseniz ve temeldeki pencere anahtarını görünür hale getirirseniz ve bu pencerenin rootViewController'ı şu anda sunulan bir modal denetleyiciye sahipse ne olur? Modal görünüm denetleyicisini geri sunacak mı? Uygulamamızda olan şey, rootViewController'ın modal değil sunulmasıdır ...
Nava Carmon

@Krumelur Bu iyi. Kuşkuluyum. Diyelim ki 2. UIWindow tüm mevcut görünümlerin üstünde görüntüleniyor. Kullanıcı, bir tane daha görüntü denetleyicisi sunan 1. UIWindow'daki görünümde bir düğmeye tıkladığında. Bu 2. UIWindow gizlenir. Bu UIWindow'un tüm uygulama boyunca her zaman görüntülenmesini sağlama.
Easwaramoorthy K

1
UIWindow'u özel stilli uyarı görünümlerini ve iphone açılır pencerelerini uygulamak için her zaman kullanıyorum. Görünümü her zaman tam ekran yapmaya yardımcı olur, tam ekran görünümü içerir ve başka bir "içerik" görünümünü içeriye yerleştirir, böylece dış görünüm herhangi bir dokunma olayını yakalar (ve böylece güzel bir gölge ekleyip diğer içeriğimi karartabilirim ^^)
Martin Ullrich

3
İkinci bir pencerenin yalnızca görünür olması için tutulmadığı unutulmamalıdır (normal görünümlerin gözetim tarafından tutulmasıyla karşılaştırıldığında).
Rivera

0

İşte Apple'ın Belgeler iyi anlaşılması UIWindow için: https://developer.apple.com/library/archive/documentation/WindowsViews/Conceptual/WindowAndScreenGuide/WindowScreenRolesinApp/WindowScreenRolesinApp.html

Birden çok UIWindow örneğini kullanmanın iyi ancak belirli bir nedeni, uygulama ekranını video kaydetmeniz gerektiğinde. Kaydedilen son videoya belirli öğeleri (kayıt düğmesi, kayıt durumu vb.) Dahil etmek istemeyebilirsiniz, böylece bu öğeleri üstte ayrı bir UIWindow'a yerleştirebilirsiniz.

Eğer ReplayKit kullanıyorsanız Aslında, olur zorunda bunlar hariç UI öğeleri için ayrı UIWindow kullanın. Daha fazla bilgi burada: https://medium.com/ar-tips-and-tricks/how-to-record-a-screen-capture-with-replaykit-whilst-hiding-the-hud-element-bedcca8e31e

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.