Yatay modda iPhone uygulaması, 2008 sistemleri


98

Lütfen bu sorunun 2008 yılına ait olduğunu ve şu anda yalnızca tarihi bir ilgi konusu olduğunu unutmayın.


Cihazın konumundan bağımsız olarak, baştan itibaren yatay modda çalışan bir iPhone uygulaması oluşturmanın en iyi yolu nedir?

Hem programlı olarak hem de Arayüz Oluşturucuyu kullanarak.


5
Gelecekteki okuyucular için, lütfen bu ünlü sorunun 2011 itibariyle Apple tarafından ÇÖZÜLDÜĞÜNE dikkat edin . Aşağıdaki yanıtta test projesine dikkat edin.
Şişko

Yanıtlar:


47

Yalnızca tarihi yanıt. İnanılmaz derecede güncel değil.

Lütfen bu cevabın artık çok güncel olmadığını unutmayın /

Bu cevap yalnızca tarihsel bir meraktır .


Heyecan verici haberler! Aşağıda Andrew tarafından keşfedildiği gibi, bu sorun Apple tarafından 4.0+ sürümünde düzeltildi.

Görünüşe göre görüşün boyutunu her görüşe zorlamak artık gerekli YOKTUR ve "yalnızca ilk seferde çalışan" özel ciddi manzara sorunu çözülmüştür.

Nisan 2011 itibariyle, 4.0'ın altında herhangi bir şeyi test etmek ve hatta inşa etmek mümkün değil, bu nedenle soru tamamen tarihi bir merak. Geliştiricilere bu kadar uzun süre sorun yaratması inanılmaz!


İşte orijinal tartışma ve çözüm. Bu sistemler çalıştırılabilir bile olmadığından, bu tamamen konu dışıdır.


Bunun tam olarak çalışmasını sağlamak SON DERECE ZOR - oyunda en az üç sorun / hata var.

bunu deneyin .. arayüz oluşturucu peyzaj tasarımı

Özellikle, "ve shouldAutorotateToInterfaceOrientation her yerde düzgün bir şekilde kullanmanız gerekir" ifadesinin her yerde, tüm tam ekran görünümleriniz anlamına geldiğini unutmayın.

Umarım bu kabusta yardımcı olur!

Burada elimizdeki EK iyi bilinen sorunun önemli bir hatırlatıcısı: BİRDEN FAZLA görünüm (tüm manzara) arasında geçiş yapmaya çalışıyorsanız , BU SADECE ÇALIŞMIYOR . Bunu hatırlamak çok önemlidir, yoksa sorunla günler kaybedersiniz. Kelimenin tam anlamıyla MÜMKÜN DEĞİLDİR. İOS platformundaki en büyük açık, bilinen hatadır. Donanımın yüklediğiniz ikinci görünümü, manzara olmasını sağlamanın tam anlamıyla bir yolu yoktur. Can sıkıcı ama basit bir çözüm ve yapmanız gereken şey, orada oturmaktan başka hiçbir şey yapmayan ve görüşleriniz arasında geçiş yapmanıza izin veren önemsiz bir UIViewController'a sahip olmaktır.

Başka bir deyişle, iOS'ta büyük bir bilgi hatası nedeniyle:

[window addSubview:happyThing.view];
[window makeKeyAndVisible];

Bunu yalnızca bir kez yapabilirsiniz . Daha sonra, happyThing.view'u kaldırmaya çalışırsanız ve bunun yerine newThing.view'u yerleştirirseniz, İŞE YARAMIYOR VE BU KADAR. Makine, görünümü asla manzaraya döndürmez. Hile düzeltmesi yok, Apple bile çalışmasını sağlayamıyor. Benimsemeniz gereken geçici çözüm, sadece orada oturan ve sadece çeşitli görünümlerinizi (happyThing, newThing, vb.) Tutan genel bir UIViewController'a sahip olmaktır. Umarım yardımcı olur!


2
Bunun 4.x'te düzeltildiğine inanıyorum. Bir sürü farklı ekrana, biraz manzara ve biraz portreye sahip bir oyun gönderdik ve sadece 3.x'te çalışmadı. Bunu halletmek için fazladan kukla görünüme girmek istemediğimizden, bunun yerine 4.x'i talep ettik - ki bu soru sorulduktan bir yıl sonra muhtemelen sorun değil.
AndrewS

"Her zaman yatay" yapmadık, daha çok çeşitli manzara veya portre yaptık. Her VC doğrudan pencereye eklenir ve pencereden kaldırılır. Uygulama yatay olarak başlar, birkaç ekran geçişinde bu şekilde kalır. Sahte bir görünüm kullanmıyoruz, ancak her ekranda Autorotate'i geçersiz kılmalıyız. 4.x'te dokunmatikten telefona kadar sorun yok.
AndrewS

41

Apple Geliştirici Sitesinden:

Uygulamanızı yatay modda başlatmak ve böylece durum çubuğunun hemen uygun konumda olmasını sağlamak için, Liste 2'de gösterildiği gibi uygun değerle (UIInterfaceOrientationLandscapeRight veya UIInterfaceOrientationLandscapeLeft) UIInterfaceOrientation anahtarını eklemek için Info.plist dosyanızı düzenleyin.

Liste 2: Uygulamanızı yatay modda başlatma

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

5
Bu artı, shouldAutorotateToInterfaceOrientation yöntemlerinde return (interfaceOrientation! = UIInterfaceOrientationPortrait); ve bitirdiniz.
Michael Behan

5
Soru, cihazın yatay modda nasıl başlatılacağını sorar. Cevaplar bu bilgiyi veriyor. Bundan sonra yönlendirme sorusunda belirtilmemiştir. +1 Michael Pryor
ingh.am

1
Şaşırtıcı bir şekilde, "cevap" aslında cihazı yatay modda BAŞLATMAZ - !! Muhtemelen tüm Apple ortamındaki en ünlü hata / zorluktur. Çok çalışan iPad geliştiricisi için temel bir özellik!
Şişko

@mbehan Ayrıca UIInterfaceOrientationPortraitUpsideDown da var, dolayısıyla bir düzeltme değil. Ek olarak, .plist'teki UIInterfaceOrientation yalnızca 3.2+ üzerinde desteklenir, 3.1.3 ve daha eski aygıtlarda desteklenmez (ve iPhone 2G'nin bu sürümde takılı kaldığını unutmayın).
Ivan Vučica

28

Kendim test ettikten sonra tüm gönderilerin özeti ve entegrasyonu; 4.x, 5.x için aşağıdaki güncellemeyi kontrol edin.

3.2'den itibaren, çalışan bir uygulamanın yönünü koddan değiştiremezsiniz.

Ancak bir uygulamayı sabit bir yönelimle başlatabilirsiniz, ancak bunu yapmak bu kadar kolay değildir.

Bu tarifi deneyin:

  1. için yönünü ayarlamak UISupportedInterfaceOrientationsiçinde Info.plistdosyanın
  2. pencerenizde 480x320 "temel görünüm denetleyicisi" tanımlayın. Diğer tüm görünümler, görünümüne bir alt görünüm olarak eklenecektir.
  3. tüm görünüm denetleyicilerinde shouldAutorotateToInterfaceOrientation:yöntemi ayarlayın (elbette, plistte tanımladığınız aynı değeri döndürmek için)
  4. tüm görünüm denetleyicilerinde bir arka plan görünümü ayarlar

    self.view.frame = CGRectMake(0, 0, 480, 320)

    içerisinde viewDidLoadyöntem.

Güncelleme (iOS 4.x, 5.x) : Apple iOS Uygulama Programlama Kılavuzu'nun "Gelişmiş Uygulama Hileleri" bölümünde "Yatay Modda Başlatma" paragrafı vardır.

Referanslar:


1
Bunun tek, gerçekten çalışan çözüm olduğunu doğrulayabilirim (küçük bir eklemeyle). Bunu bulup değerlendirmek saatlerimi aldı. Diğer tüm yanıtlar, soruna yalnızca kısmi çözümlerdir.
Johannes Rudolph

8

İlk önce info.plist'i ayarladım

<key>UIInterfaceOrientation</key>
<string>UIInterfaceOrientationLandscapeRight</string>

sonra bu kodu applicationDidFinishLaunching'e koydum:

CGAffineTransform rotate = CGAffineTransformMakeRotation(1.57079633);
[window setTransform:rotate];

CGRect contentRect = CGRectMake(0, 0, 480, 320); 
window.bounds = contentRect; 
[window setCenter:CGPointMake(160.0f, 240.0f)]; 

Bu şekilde, Arayüz Oluşturucu'da yatay modda görünüm üzerinde çalışabilirim.


7

sasb ve michaelpryor'un cevabı doğru görünüyor, ancak işinize yaramıyorsa şu alternatifi deneyin:

- (void)applicationDidFinishLaunchingUIApplication *)application {
    application.statusBarOrientation = UIInterfaceOrientationLandscapeRight;
}

Ya da bu:

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Ya da bu:

[application setStatusBarOrientation: UIInterfaceOrientationLandscapeRight animated:NO];

Önce aramanız da gerekebilir window makeKeyAndVisible;.

Birkaç bağlantı: Yatay modda geliştirme , iPhone SDK: Yalnızca Manzara moduna nasıl zorlanır?

@Robert: Lütfen iPhone SDK, NDA ve Stack Overflow'a bakın .


6

Henüz kimsenin bu cevabı bulamamasına şaşırdım:

Tüm testlerimde, bir modal görünüm denetleyicisini reddettiğinde, üst görüntü denetleyicisinin tercih edilen yönelim kümesi shouldAutorotateToInterfaceOrientation, bir UINavigationController'ın bir parçası olduğunda bile onurlandırılır. Yani bunun çözümü basit:

Arka plan için UIImageView ile sahte bir UIViewController oluşturun. Görüntüyü, uygulamanızın başlangıçta kullandığı default.png görüntüsüne ayarlayın.

Ne zaman viewWillAppearkök görünümü denetleyicisi çağrılan, sadece animasyon olmadan kukla görünüm denetleyicisi sunuyoruz.

viewDidAppearSahte görüntü denetleyicinizde çağrıldığında, güzel bir çapraz çözme animasyonuyla görünüm denetleyicisini kapatın .

Bu sadece işe yaramıyor, aynı zamanda iyi görünüyor! BTW, sadece açıklama için kök görünüm denetleyicisini şu şekilde yapıyorum viewWillAppear:

- (void)viewWillAppear:(BOOL)animated
{
 if ( dummy != nil ) {
  [dummy setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
  [self presentModalViewController:dummy animated:NO];
  [dummy release];
  dummy = nil;
 }
...
}

5

En son iPhone OS Programlama Kılavuzu, örnek kodla birlikte bununla ilgili tam bir bölüme sahiptir. Eminim bu yeni bir ekleme, bu yüzden belki kaçırmışsınızdır. Uymanız gereken tüm koşulları açıklar; temelde ...

  • Info.plist özelliklerini ayarlayın (bu durum çubuğunun konumunu değiştirir, ancak görünümü değiştirmez)
  • UIViewController viewDidLoad: yönteminizde veya applicationDidFinishLaunching: yönteminizde veya uygulamanızda, görünümünüzü merkezi çevresinde manuel olarak döndürün ("Otomatik yeniden boyutlandırma davranışları", sayfa 124)

"Manzara Modunda Başlatma" bölümüne bakın, sayfa 102.


4

Bu yanıtı görün: YALNIZCA iPhone veya iPad için Yatay Mod

  1. pliste yön ekle
  2. shouldAutorotateToInterfaceOrientation = tüm dosyalarda YES

Karışık modlar kullanıyor olsanız da, daha iyi durumda olabilirsiniz

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
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.