Soru UITabBar ile iOS 6'da tek bir UIViewController'ı otomatik olarak getirin


Sadece içinde çalışan bir uygulamam var Portrait Mode, ancak video görüntüleyebilen tek bir Görünüm var, bu yüzden o görünümün de çalışmasını istiyorum. landscape modeancak iOS 6'da bunu nasıl yapabileceğimi anlayamıyorum, şimdi buna sahibim:

AppDelegate.m'de var:

self.window.rootViewController = myTabBar;

daha sonra projenin özeti:

enter image description here

ve ben bunu görüntülemek zorundayım irisin rotasyonunu algılamak için iOS 6'da buldum:

- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskAll;
}

// Tell the system It should autorotate
- (BOOL) shouldAutorotate {
return YES;
}

Bu yüzden yukarıdaki kodu sadece benim UIViewController Peyzajda da kullanmak istiyorum ama işe yaramıyor, nasıl yapabileceğimi bilen var mı? Sadece videoyu gösterdiğinde otomatik döndürmeyi istiyorum.


25
2017-09-23 09:40


Menşei




Cevaplar:


İlk olarak, hedef ayarlarınız şöyle görünmelidir: Supported Interface Orientations

UITabBarController'da:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}

-(NSUInteger)supportedInterfaceOrientations
{
    if (self.selectedViewController) 
        return [self.selectedViewController supportedInterfaceOrientations];

    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate
{
    return YES;
}

ViewController'ınızın içinde:

a) eğer döndürmek istemiyorsanız:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

- (BOOL)shouldAutorotate
{
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

b) manzaraya dönmek isterseniz:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (BOOL)shouldAutorotate
{
    return YES;
}

- (NSInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAllButUpsideDown;
}

Düzenle:

Diğer çözüm, AppDelegate içinde bu yöntemi uygulamaktır:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    NSUInteger orientations = UIInterfaceOrientationMaskAll;

    if (self.window.rootViewController) {
        UIViewController* presented = [[(UINavigationController *)self.window.rootViewController viewControllers] lastObject];
        orientations = [presented supportedInterfaceOrientations];
    }
    return orientations; 
}

49
2017-09-23 10:57



Cevabınız için teşekkürler, ancak UITabBar'ı şu şekilde oluşturursam UITabBarController için kodu nasıl ve nerede yazabileceğimi anlayamıyorum: UITabBarController * myTabBar = [UITabBarController alloc] init]; ve sonra tabbar için viewcontrollers ayarlayın ve App Delegate didfinish yönteminde her şeyi ... - Piero
UITabBar sadece bir kontroldür, bana hangi konteyneri eklediğini söylemelisin, Beppe'den bir eşya bak. - mientus
AppDelegate in didFinishLaunchingWithOptions Tamam ben şunu yapacağım: self.window.rootViewController = myTabBar; Bu yüzden bu delegeyi uygulama delegesinde yapmak zorundayım? - Piero
MyTabBar hangi tiptir? UITabBarController? - mientus
cevap bu: stackoverflow.com/questions/12504464/... - Piero


Bir yorum yazardım ama yapamam, bu yüzden bir cevap olarak gönderiyorum.

Bu benim senaryomdu:

Uygulamam, oryantasyonu yalnızca belirli görünümlerde değiştirmeyi destekliyor ve sadece istediklerim için bunu nasıl yapacağımı anlayamadım, sonra bu soruya inildim ve mientus'un cevabını gördüm (Teşekkürler). UITabBarController alt sınıfını önerdi ve bu yöntemleri geçersiz kıldı:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{

    NSLog(@"AUTO ROTATE IN CUSTOM TAB BAR");
    // You do not need this method if you are not supporting earlier iOS Versions
    return [self.selectedViewController shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}


-(NSUInteger)supportedInterfaceOrientations{

    NSLog(@"supportedInterfaceOrientations IN CUSTOM TAB BAR");

    if (self.selectedViewController)
        return [self.selectedViewController supportedInterfaceOrientations];

    return UIInterfaceOrientationMaskPortrait;
}

-(BOOL)shouldAutorotate{

    NSLog(@"shouldAutorotate IN CUSTOM TAB BAR");
    return [self.selectedViewController shouldAutorotate];
}

sonra her bir görüntü denetleyicinin içinde dönme isteyip istemediğimi belirtmek için yöntemler kullanacağım. UITabBarController'daki yöntemler çağrılıyordu ama benim viewcontroler'mdakiler değil, bu yüzden rotasyon yapmak istemediğim yerde oluyordu. Sonra UINavigationController alt sınıfını ve aynı yöntemleri yalnızca bu şekilde bakmak için desteklenenInterfaceOrientation öğesindeki bu değişiklikle geçersiz kıldım:

- (NSUInteger)supportedInterfaceOrientations{

NSLog(@"supportedInterfaceOrientations IN CUSTOM NAV BAR CALLING CURRENT VIEW CONTROLLER");
UIViewController* presented = [[self viewControllers] lastObject];
return [presented supportedInterfaceOrientations];

}

temel olarak bu, mevcut görünüm denetleyicisini alır ve sonra desteklenen yönlendirme ve voila için benim viewcontroller benim yöntemleri çağırır ve ben istediğim yere yönlendirme yapabilirsiniz sorar.


3
2018-02-06 20:29





Görünüm sadece dikey görünümün alt görünümünü döndürmek istiyor mu? Rotasyon davranışını genellikle rootviewcontroller'dan miras alır. Daha sonra root viewcontroller'da autorotate döndürmek için NO döndürürseniz, her bir underview'de rotasyonu durdurursunuz.

Mimarinizi bu şekilde bölmenizi öneririm:

rootViewController -> supportedInterfaceOrientations = Portre & OlmalıdırAutorotate = YES NORotationViewControllers -> supportedInterfaceOrientations = Portre & OlmalıdırAutorotate = YES rotationViewControllers -> supportedInterfaceOrientations = Tümü & OlmalıdırAutorotate = YES

Bunu zaten okumadıysanız, bir göz atın: Çoklu Arayüz Yönlendirmelerini Destekleme


0
2017-09-23 10:48