İPhone yönünü ayarlamanın belgelenmiş bir yolu var mı?


94

Belirli görünümlerde cihaz döndürmeyi desteklemek istediğim bir uygulamam var, ancak diğerleri Manzara modunda özellikle mantıklı değil, bu nedenle görünümleri değiştirirken döndürmeyi dikey olarak ayarlanmaya zorlamak istiyorum.

UIDevice üzerinde hile yapan ancak açıkça bir derleyici uyarısı oluşturan ve SDK'nın gelecekteki bir revizyonuyla ortadan kalkabilecek belgelenmemiş bir özellik ayarlayıcı var.

[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];

Yönlendirmeyi zorlamanın belgelenmiş herhangi bir yolu var mı?

Güncelleme: Bunu zaten uyguladığım için shouldAutorotateToInterfaceOrientation aramadığım için bir örnek vereceğimi düşündüm.

Uygulamamın Görünüm 1'de yatay ve dikey, Görünüm 2'de yalnızca dikey desteklemesini istiyorum. Tüm görünümler için shouldAutorotateToInterfaceOrientation'ı zaten uyguladım ancak kullanıcı Görünüm 1'de yatay moddaysa ve ardından Görünüm 2'ye geçerse, bunu zorlamak istiyorum Telefonu Dikey konumuna döndürmek için.


11
Bu konuda, Apple'ın ya yukarıdaki API'yi ifşa etmesini ya da EVET'i onurlandırmasını, bir görünüm ilk yüklendiğinde, yalnızca telefon döndüğünde değil, HAYIR'ın shouldRotate yönteminden döndürülmesini öneren bir hata bildirdim.
rustyshelf


1
[[UIDevice currentDevice] setOrientation: UIInterfaceOrientationPortrait]; Bu yöntem kullanımdan kaldırılmıştır ve artık mevcut değildir.
Hikmat Khan

Yanıtlar:


6

Bu, daha sonraki iPhone 3.1.2 SDK'sında artık bir sorun değildir. Şimdi, istifin üzerine geri itilen görünümün istenen yönelimine uygun görünüyor. Bu muhtemelen eski iPhone işletim sistemi sürümlerini algılamanız ve setOrientation'ı yalnızca en son sürümden önce uygulamanız gerektiği anlamına gelir.

Apple'ın statik analizinin eski SDK sınırlamaları etrafında çalıştığınızı anlayıp anlamayacağı net değil. Kişisel olarak Apple tarafından bir sonraki güncellememde yöntem çağrısını kaldırmam söylendi, bu yüzden eski cihazlar için bir hack olmanın onay sürecini geçip geçmeyeceğinden henüz emin değilim.


İPhone Simulator 3.3.2'de durum böyle değil. Hala çalışmıyor.
Ördek

4
@user Yığın üzerinde bir görünümü ittiğinizde nasıl yönlendirme talep edersiniz?
progrmr

4
Apple'ın statik analizini aşabilirsiniz. PerformSelector kullanarak ve Obj-C'nin müthiş dinamizmine güvenerek belgelenmemiş kodu başarıyla kullanıyorum.
Kenneth Ballenegger

@KennethBallenegger Yönergeleri okuduğumu ve / veya bu tür şeyleri gizlemenin uygulamanızı ve hatta belki de hesabınızı kaldırabileceğini kabul ettiğimi hatırlıyorum. Sadece belgelenmemiş API kullanmak için bunu riske atmam.
Ivan Vučica

101

Bu olaydan çok sonradır, ancak bir gezinme denetleyicisi kullanmayan ve / veya belgelenmemiş yöntemleri kullanmak istemeyen birinin gelmesi durumunda:

UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];

Bir vanilya görüntü denetleyicisini sunmak ve reddetmek yeterlidir.

Açıkçası shouldAutorotateToInterfaceOrientation geçersiz kılmanızdaki yönlendirmeyi yine de onaylamanız veya reddetmeniz gerekecek. Ancak bu, shouldAutorotate'in ... sistem tarafından tekrar çağrılmasına neden olacaktır.


1
Harika, bu, bu yazının doğru cevabı olarak işaretlenmemiş, ancak bu, benim sorunumun bir yarısını çözdü stackoverflow.com/questions/5030315 . Model görünümü hilesi portre yönelimini 'zorlar', ayrıca manzarayı zorlamak için birini biliyor musunuz?
epologee

5
Hah hah !! bu çok aptalca! AMA ÇALIŞIYOR! - tabii ki öyle! : D
hfossli

Harika, uzun zamandır bununla mücadele ediyorum. Teşekkürler! mate
Rahul Choudhary

3
Bu hem iOS5 hem de iOS6 için işe yarıyor gibi görünüyor: [self presentViewController: [UIViewController new] animasyonlu: NO tamamlama: ^ {[self dismissViewControllerAnimated: NO complete: nil]; }];
Inferis

1
Bu, iOS 7 ve iOS 8'de çalışıyor gibi görünüyor, ancak göze çarpan göze çarpan siyah bir ekran var (esas olarak iOS 8).
levigroker

16

Dikeyden yataya döndürmeye zorlamak istiyorsanız, kod burada. Görüntünüzün merkezini ayarlamanız gerektiğini unutmayın. Benimkinin manzarayı doğru yere yerleştirmediğini fark ettim. Aksi takdirde mükemmel çalıştı. Bahşiş için teşekkürler.

if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){

        [UIView beginAnimations:@"View Flip" context:nil];
        [UIView setAnimationDuration:0.5f];
        [UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
        self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
        self.view.center = CGPointMake(160.0f, 240.0f);

        [UIView commitAnimations];
}

Bir UIAlertView eklersem de çalışacak mı? CGAffineTransformMakeRotationGörüntünün döndürülmesini denedim , ancak UIAlertView hala durum çubuğu yönüne göre, yani -degreeToRadian (açı)? Böyle bir şey mi aldın?
NeverHopeless

Bunu a ile yapmanın en kolay yolu UIAlertView, görünüm denetleyicinizi alertView temsilcisi olarak ayarlamak ve ardından: - (void) didPresentAlertView:(UIAlertView *) alertViewüzerinde, akımı esas alarak döndürmeyi gerçekleştirirsiniz [UIApplication sharedApplication].statusBarOrientation. Eğer onu canlandırmazsan, çok tuhaf görünmemelisin.
Michael Gaylord

16

Anladığım kadarıyla, setOrientation:yöntem işe yaramıyor (veya belki artık çalışmıyor). İşte bunu yapmak için yaptığım şey:

önce, bu tanımlamayı dosyanızın en üstüne, #import'unuzun hemen altına koyun:

#define degreesToRadian(x) (M_PI * (x) / 180.0)

sonra, viewWillAppear:yöntemde

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}

bunun animasyonlu olmasını istiyorsanız, her şeyi bir animasyon bloğuna sarabilirsiniz, örneğin:

[UIView beginAnimations:@"View Flip" context:nil];
[UIView setAnimationDuration:1.25];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:NO];     
if (self.interfaceOrientation == UIInterfaceOrientationPortrait) {  
    self.view.transform = CGAffineTransformIdentity;
    self.view.transform = CGAffineTransformMakeRotation(degreesToRadian(90));
    self.view.bounds = CGRectMake(0.0, 0.0, 480, 320);
}
[UIView commitAnimations];

Ardından, portre modu denetleyicinizde, tersini yapabilirsiniz - şu anda yatay durumda olup olmadığını kontrol edin ve öyleyse, dikey konuma geri döndürün.


1
Self.view yerine self.window.view'u döndürmelisiniz. Görünümünüzün üstünde UITabBar veya başka denetleyiciler varsa bu kullanışlıdır.
Borut Tomazin

7

Yatay yönde UIViewControllerekranda bir ekranım olduğu bir sorun yaşıyordum UINavigationController. Akışta bir sonraki görüntü denetleyicisine basıldığında, cihazın dikey yöne dönmesine ihtiyacım vardı.

Fark ettiğim şey, shouldAutorotateToInterfaceOrientation:yeni bir görünüm denetleyicisi yığına itildiğinde yöntemin çağrılmaması, ancak yığından bir görünüm denetleyicisi çıkarıldığında çağrılmasıydı. .

Bundan yararlanarak, bu kod snippet'ini uygulamalarımdan birinde kullanıyorum:

- (void)selectHostingAtIndex:(int)hostingIndex {

    self.transitioning = YES;

    UIViewController *garbageController = [[[UIViewController alloc] init] autorelease];
    [self.navigationController pushViewController:garbageController animated:NO];
    [self.navigationController popViewControllerAnimated:NO];

    BBHostingController *hostingController = [[BBHostingController alloc] init];
    hostingController.hosting = [self.hostings objectAtIndex:hostingIndex];
    [self.navigationController pushViewController:hostingController animated:YES];
    [hostingController release];

    self.transitioning = NO;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
    if (self.transitioning)
        return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
    else
        return YES;
}

Temel olarak, boş bir görüntü denetleyicisi oluşturarak, onu yığına iterek ve hemen kaldırarak, arabirimin dikey konuma dönmesini sağlamak mümkündür. Denetleyici kaldırıldıktan sonra, ilk başta itmek istediğim denetleyiciye basıyorum. Görsel olarak harika görünüyor - boş, rastgele görüntüleme denetleyicisi kullanıcı tarafından asla görülmez.


Merhaba, bir VC'yi itmeden önce doğru yönde zorlamak için yönteminizi uyguladım, ancak bunun yalnızca Portre yönlerini zorlarken çalıştığını buldum (mevcut görünüm Dikey ise ve bir sonrakini manzaraya zorlamak istiyorsanız, kazandı shouldAutorotateToInterfaceOrientation'ı çağırmayın: haşhaş ederken). Bir görünümü Yatay'a zorlamak için bir geçici çözüm buldunuz mu?
Rafael Nobre

İlginç - Bu sorunu yaşamadım, üzgünüm. İtmeler ve patlamalar dizisiyle oynamayı denerdim, bir şeyler bulmanız için iyi bir şans var.
Andrew Vilcsak

7

İPhone'u programlı olarak gerekli yönlendirmeye zorlamanın basit bir yolu var - kdbdallas , Josh tarafından verilen yanıtlardan ikisini kullanarak :

//will rotate status bar
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];


//will re-rotate view according to statusbar
UIViewController *c = [[UIViewController alloc]init];
[self presentModalViewController:c animated:NO];
[self dismissModalViewControllerAnimated:NO];
[c release];

tıkır tıkır çalışıyor :)

DÜZENLE:

iOS 6 için bu işlevi eklemem gerekiyor: (modal viewcontroller üzerinde çalışıyor)

- (NSUInteger)supportedInterfaceOrientations
{
    return (UIInterfaceOrientationMaskLandscapeLeft | UIInterfaceOrientationMaskLandscapeRight);
}

Benim için bu bir cazibe gibi çalışmıyor: Gezinme çubuğu ve araç çubuğu, Manzara görünümünde sahip olacakları yüksekliğe kadar küçülüyor. En üstteki görünümü kaldırıp yeniden ekleme yöntemi doğru yüksekliği korur, ancak bir dezavantajı da vardır: Gezinme çubuğum biraz aşağıya iniyor (sanki ölçme çubuğu etkinleştirilmiş gibi)
AlexWien

Benim tarafımda, hem modal hem de itmeli görüntü denetleyicide çalışıyor. Ancak yalnızca iOS 5'te :(
Guntis Treulands

Evet ios5'te de çalışmasını sağladım. Artık ios6'da, modal manzara görünümü denetleyicisi kapatıldıktan sonra gezinme çubuğunun yüksekliği küçülüyor
AlexWien

7

Buna iyi bir çözüm bulmak için kazıyorum ve kazıyorum. Hile yapan şu blog gönderisini buldum: En dıştaki görünümünüzü anahtardan kaldırın UIWindowve tekrar ekleyin, sistem daha sonra shouldAutorotateToInterfaceOrientation:yöntemleri görünüm denetleyicilerinizden yeniden sorgulayarak uygulanacak doğru yönlendirmeyi zorlar. Görün: iPhone, Uiview'i yeniden yönlendirmeye zorluyor


Bu çözüm benim için en iyisi oldu. Daha da önemlisi, boş bir modalViewController sunan düzeltme, viewcontrollers'ı yığına itmenin yanlış animasyonuna neden olur. Bu UIWindow yöntemi aynı sorunu yaşamaz.
Rik Smith-Unna

5

Josh'un cevabı benim için iyi çalışıyor.

Ancak, bir "yön değişti, lütfen kullanıcı arayüzünü güncelleyin" bildirimi göndermeyi tercih ediyorum . Bu bildirim bir görünüm denetleyicisi tarafından alındığında, çağırarak shouldAutorotateToInterfaceOrientation:istediğiniz yöne geri dönerek herhangi bir yön belirlemenize olanak tanır YES.

[[NSNotificationCenter defaultCenter] postNotificationName:UIDeviceOrientationDidChangeNotification object:nil];

Tek sorun, bunun animasyon olmadan yeniden yönlendirmeye zorlamasıdır . Bu satırı beginAnimations:ve arasında kaydırmanız gerekircommitAnimations pürüzsüz bir geçiş elde etmek.

Umarım yardımcı olur.


3

FWIW, işte yönlendirmeyi manuel olarak ayarlama uygulamam (uygulamanızın kök görünüm denetleyicisine gitmek için, natch):

-(void)rotateInterfaceToOrientation:(UIDeviceOrientation)orientation{

    CGRect bounds = [[ UIScreen mainScreen ] bounds ];
    CGAffineTransform t;
    CGFloat r = 0;
    switch ( orientation ) {
        case UIDeviceOrientationLandscapeRight:
            r = -(M_PI / 2);
            break;
        case UIDeviceOrientationLandscapeLeft:
            r  = M_PI / 2;
            break;
    }
    if( r != 0 ){
        CGSize sz = bounds.size;
        bounds.size.width = sz.height;
        bounds.size.height = sz.width;
    }
    t = CGAffineTransformMakeRotation( r );

    UIApplication *application = [ UIApplication sharedApplication ];

    [ UIView beginAnimations:@"InterfaceOrientation" context: nil ];
    [ UIView setAnimationDuration: [ application statusBarOrientationAnimationDuration ] ];
    self.view.transform = t;
    self.view.bounds = bounds;
    [ UIView commitAnimations ];

    [ application setStatusBarOrientation: orientation animated: YES ];     
}

aşağıdaki UINavigationControllerDelegateyöntemle birleştiğinde (a kullandığınızı varsayarak UINavigationController):

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated{
    // rotate interface, if we need to
    UIDeviceOrientation orientation = [[ UIDevice currentDevice ] orientation ];
    BOOL bViewControllerDoesSupportCurrentOrientation = [ viewController shouldAutorotateToInterfaceOrientation: orientation ];
    if( !bViewControllerDoesSupportCurrentOrientation ){
        [ self rotateInterfaceToOrientation: UIDeviceOrientationPortrait ];
    }
}

Bu, bir gelen gelen UIViewControllermevcut cihaz yönünü destekleyip desteklemediğine göre kök görünümün döndürülmesini sağlar . Son olarak, rotateInterfaceToOrientationstandart iOS işlevselliğini taklit etmek için gerçek cihaz yönü değişikliklerine bağlanmak isteyeceksiniz . Bu olay işleyicisini aynı kök görünüm denetleyicisine ekleyin:

-(void)onUIDeviceOrientationDidChangeNotification:(NSNotification*)notification{
    UIViewController *tvc = self.rootNavigationController.topViewController;
    UIDeviceOrientation orientation = [[ UIDevice currentDevice ] orientation ];
    // only switch if we need to (seem to get multiple notifications on device)
    if( orientation != [[ UIApplication sharedApplication ] statusBarOrientation ] ){
        if( [ tvc shouldAutorotateToInterfaceOrientation: orientation ] ){
            [ self rotateInterfaceToOrientation: orientation ];
        }
    }
}

Son olarak, UIDeviceOrientationDidChangeNotificationbildirimlere kaydolun initveya buna loadviewbenzer:

[[ NSNotificationCenter defaultCenter ] addObserver: self
                                           selector: @selector(onUIDeviceOrientationDidChangeNotification:)
                                               name: UIDeviceOrientationDidChangeNotification
                                             object: nil ];
[[ UIDevice currentDevice ] beginGeneratingDeviceOrientationNotifications ];

Bu, bu sayfadaki gezinme denetleyici koduma başarıyla uyarlayabildiğim yanıtlardan yalnızca biri. Küçük bir sorun, döndürülen gezinme çubuğunun, normal mekanizma aracılığıyla döndürüldüğünde olduğu gibi dikey ve yatay yönler arasında yüksekliği değiştirmemesidir.
Dan Dyer

@DanDyer sorunu gezinme çubuğunun yanlış yüksekliği ile çözdünüz mü? (Özellikle ios6'da yükseklik yanlış)
AlexWien

@AlexWien Sonunda müşteriyi bunu yapmamamız gerektiğine ikna etmeyi başardım. İOS 6 için yeni shouldAutorotateyöntemle bir şeyler yapmanız gerekebilir (bkz. Stackoverflow.com/a/12586002/5171 ).
Dan Dyer

@DanDyer it.Now bütün işler çözüldü (SDK iOS6, hedef ios5) Ben hedef iOS6 ile tekrar test ediyorum, dün basit gizleme ve viewDidAppear navigasyon ve statusBar'a gösterisini Çözmedim
AlexWien

2

Bu benim için çalışıyor (teşekkür ederim Henry Cooke):

Benim için amaç sadece peyzaj yönelim değişiklikleri ile uğraşmaktı.

init yöntemi:

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(orientationChanged:)
                                             name:UIDeviceOrientationDidChangeNotification
                                           object:nil];

- (void)orientationChanged:(NSNotification *)notification {    
    //[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
    UIDeviceOrientation orientation = [UIDevice currentDevice].orientation;
    CGRect bounds = [[ UIScreen mainScreen ] bounds ];
    CGAffineTransform t;
    CGFloat r = 0;
    switch ( orientation ) {
        case UIDeviceOrientationLandscapeRight:
            r = 0;
            NSLog(@"Right");
            break;
        case UIDeviceOrientationLandscapeLeft:
            r  = M_PI;
            NSLog(@"Left");
            break;
        default:return;
    }

    t = CGAffineTransformMakeRotation( r );

    UIApplication *application = [ UIApplication sharedApplication ];
    [ UIView beginAnimations:@"InterfaceOrientation" context: nil ];
    [ UIView setAnimationDuration: [ application statusBarOrientationAnimationDuration ] ];
    self.view.transform = t;
    self.view.bounds = bounds;
    [ UIView commitAnimations ];

    [ application setStatusBarOrientation: orientation animated: YES ];
}

1

Belirli görünümlerde cihaz döndürmeyi desteklemek istediğim bir uygulamam var, ancak diğerleri Manzara modunda özellikle mantıklı değil, bu nedenle görünümleri değiştirirken döndürmeyi dikey olarak ayarlanmaya zorlamak istiyorum.

Bu konudaki yukarıdaki orijinal gönderinin artık çok eski olduğunu anlıyorum, ancak buna benzer bir sorunum vardı - yani. Kullanıcı tarafından yatay ve dikey arasında döndürülebilen bir ekran dışında, Uygulamamdaki tüm ekranlar yalnızca dikeydir.

Bu yeterince basitti, ancak diğer yayınlar gibi, önceki ekrana döndüğümde, uygulamanın mevcut cihaz yönünden bağımsız olarak otomatik olarak portreye dönmesini istedim.

Uyguladığım çözüm, yatay moddayken Gezinme Çubuğunu gizlemekti, bu da kullanıcının yalnızca dikey moddayken önceki ekranlara dönebileceği anlamına geliyor. Bu nedenle, diğer tüm ekranlar yalnızca dikey olabilir.

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)pInterfaceOrientation {
    BOOL lHideNavBar = self.interfaceOrientation == UIInterfaceOrientationPortrait ? NO : YES;
    [self.navigationController setNavigationBarHidden:lHideNavBar animated:YES];
}

Bu ayrıca, yatay modda daha fazla ekran alanı olması bakımından Uygulamam için ek bir faydaya sahiptir. Bu yararlıdır çünkü söz konusu ekran PDF dosyalarını görüntülemek için kullanılır.

Bu yardımcı olur umarım.


1

Sonunda bunu oldukça kolay çözdüm. Yukarıdaki tüm önerileri denedim ve yine de yetersiz kaldı, bu yüzden bu benim çözümümdü:

Yatay (Sol veya Sağ) kalması gereken ViewController'da, yön değişikliklerini dinliyorum:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(didRotate:)
                                             name:UIDeviceOrientationDidChangeNotification object:nil];

Sonra didRotate'de:

- (void) didRotate:(NSNotification *)notification
{   if (orientationa == UIDeviceOrientationPortrait) 
    {
        if (hasRotated == NO) 
        {
            NSLog(@"Rotating to portait");
            hasRotated = YES;
            [UIView beginAnimations: @"" context:nil];
            [UIView setAnimationDuration: 0];
            self.view.transform = CGAffineTransformIdentity;
            self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(-90));
            self.view.bounds = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
            self.view.frame = CGRectMake(0.0f, 0.0f, 480.0f, 320.0f);
            [UIView commitAnimations];

    }
}
else if (UIDeviceOrientationIsLandscape( orientationa))
{
    if (hasRotated) 
    {
        NSLog(@"Rotating to lands");
        hasRotated = NO;
        [UIView beginAnimations: @"" context:nil];
        [UIView setAnimationDuration: 0];
        self.view.transform = CGAffineTransformIdentity;
        self.view.transform = CGAffineTransformMakeRotation(DEGREES_TO_RADIANS(0));
        self.view.bounds = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        self.view.frame = CGRectMake(0.0f, 0.0f, 320.0f, 480.0f);
        [UIView commitAnimations];

    }
}

View.bounds / frame açıkça sıfırlandığı için otomatik yeniden boyutlandırmayı kullanan Süper Görünümleri / Alt Görünümleri aklınızda bulundurun ...

Manzara görünümünü korumak için bu yöntemin tek uyarısı, herhangi bir değişiklik yokmuş gibi görünmesinin daha iyi olacağı durumlarda gerçekleşmesi gereken yönler arasında geçiş yapan içsel animasyondur.


1

iOS 6 çözümü:

[[[self window] rootViewController] presentViewController:[[UIViewController alloc] init] animated:NO completion:^{
    [[[self window] rootViewController] dismissViewControllerAnimated:NO completion:nil];
}];

Kesin kod, uygulamaya ve ayrıca nereye yerleştirdiğinize bağlıdır (bunu AppDelegate'imde kullandım). Kullandığınız [[self window] rootViewController]şeyle değiştirin . Bir kullanıyordum UITabBarController.


0

Bir çözüm buldum ve Fransızca bir şeyler yazdım (ancak kod İngilizcedir). buraya

Bunun yolu, denetleyiciyi pencere görünümüne eklemektir (denetleyici shouldRotate .... işlevinin iyi bir uygulamasına sahip olmalıdır).


-3

UIViewControllers kullanıyorsanız, şu yöntem vardır:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

Dönüş NO istemediğiniz görünümleri içeren görünüm denetleyicileri için .

Daha fazla bilgi burada


1
Bu dönüşü durdurur, aradığım şey, kullanıcı yatay konumdaysa dönüşü tekrar portreye zorlamak. Ne demek istediğimi daha iyi anlatmak için yukarıya bir örnek ekledim.
Dave Verwer

-3

Bunun çalışma zamanında yapılmasının mümkün olduğunu sanmıyorum, ancak tabii ki kullanıcı arayüzünüze 90 derecelik bir dönüşüm uygulayabilirsiniz.


Ben aslen yayınlanan koduyla mümkündür, sadece belli olmaz ne zaman çalışma o kudreti durağı;)
Dave VERWER

-3

Kullandığım şey bu. (Bazı derleme uyarıları alırsınız ancak hem Simulator hem de iPhone'da çalışır)

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];

Bunun 4.1'de de çalışması için yeterli olduğunu buldum. Ancak durum çubuğum gizli olarak ayarlandığından üstte 20 piksel boşluk kazanıyorum :(
Anthony Main

setOrientation özel api'dir ve onu kullanan uygulama reddedilir.
alones
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.