SORU
28 EYLÜL 2012, Cuma


İOS 6 Yatay yönelim cihaz gücü

10 görünümü denetleyicileri ile bir uygulama verdim. Gezinti kontrol cihazı/yük onları boşaltmak için kullanıyorum.

Tüm portre modunda. 7. VC manzara olduğunu varsayalım. Dolu olunca manzara içinde ibraz edilmesi gerekiyor.

Lütfen önermek yönünü İOS 6 portreden manzaraya gidip zorlamak için bir yol(İOS 5 de çalışmak için iyi olacaktır).

YapıyordumÖNCEİOS 6:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    UIViewController *c = [[[UIViewController alloc]init] autorelease];
    [self presentModalViewController:c animated:NO];
    [self dismissModalViewControllerAnimated:NO];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

Ve kalıcı bir VC zararlı kayıtsız yönünü Gözden uygulaması zorluyordu, shouldAutorotateToInterfaceOrientation adlı başlamıştı.

Ben ne İOS 6 çalıştılar:

- (BOOL)shouldAutorotate{
    return YES;
}
-(NSUInteger)supportedInterfaceOrientations{
    return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
    return UIInterfaceOrientationLandscapeLeft;
}

Yük kontrol ünitesi, dikey olarak kalmaya devam ediyor. Cihaz dönen sonra, yönünü iyi değiştiriyor. Ama manzara için otomatik olarak yükü döndürmek için kumanda yapmak istiyorum, böylece kullanıcı cihazın verileri doğru görmek için döndürün.

Başka bir sorun: cihaz dikey olarak geri döner sonra yönlendirme supportedInterfaceOrientations UIInterfaceOrientationMaskLandscape sadece belirtilen olmama rağmen portre gider. Olur neden?

Ayrıca,YOKyukarıdaki 3 yöntem denir.

(Yararlı) bazı veriler:

  1. Plist dosyama 3 yönelimleri - ama ters belirtildi.
  2. Proje Xcode 4.3 İOS 5'te başladı. Xibs dahil olmak üzere tüm sınıfları Güncellemelerinden 4.5 İOS 6, şimdi ben son sürümü kullanın önce oluşturulmuş.
  3. Plıst dosya durum çubuğunda görünür ayarlanır.
  4. Xib dosyası (yatay olmak istiyorum) durum çubuğu "Yok", yönlendirmeyi yatay. ayarlanır.

Herhangi bir yardım için teşekkür ederiz. Teşekkürler.

CEVAP
4 EKİM 2012, PERŞEMBE


Tamam, Millet, benim çözüm yayınlayacağız.

Ben ne var:

  1. Görünüm tabanlı bir uygulama, birkaç görünümü denetleyicileri. (Navigasyon dayanıyordu, ama görünüm tabanlı, yönlendirme sorunları nedeniyle yapmak zorunda kaldım).
  2. Tüm görünümü denetleyicileri portre, bir landscapeLeft hariç.

Görevleri:

  1. Görünüm benim denetleyicileri biri otomatik olarak yatay döndürmek gerekir, kullanıcı aygıtı tutan ne kadar iyi olursa olsun. Diğer tüm kontrolörler portre olmalı ve peyzaj denetleyicisi ayrıldıktan sonra, app dikey döndürme, kullanıcı aygıtı tutan, yine, önemli bir güç gerekir.
  2. Bu İOS 6 üzerinde çalışmak gerekir.x olarak 5 İOS.x

Git!

(GüncellemeMakroları @İvan tarafından önerilen Vučica) kaldırıldı

Senin PORTRE denetleyicileri böyle autorotation yöntemleri geçersiz kılmak görünüm:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}
-(BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

2 yaklaşımlar görebilirsiniz: ve İOS 6 İçin başka bir İOS 5 için.

PEYZAJ için aynı denetleyicisi, bazı eklemeler ve değişikliklerle görünümü:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation{
    [image_signature setImage:[self resizeImage:image_signature.image]];
    return (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft);
}
-(BOOL)shouldAutorotate {
    return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
    [image_signature setImage:[self resizeImage:image_signature.image]];
    return UIInterfaceOrientationMaskLandscapeLeft;
}

DİKKAT: autorotation yürürlükteİOS 5bu eklemek gerekir:

- (void)viewDidLoad{
    [super viewDidLoad];
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 6.0)
        [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:NO];    
}

Benzer şekilde, sonra bırakın MANZARA denetleyicisi, ne olursa olsun denetleyicisi yükle, sana gereken gücü tekrar autorotation için İOS 5, ama şimdi sen-ecek kullanma UIDeviceOrientationPortrait olarak bir PORTRE denetleyicisi:

- (void)viewDidLoad{
        [super viewDidLoad];
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 6.0)
            [[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];    
    }

Şimdi son şey (ve biraz tuhaf) - başka bir kontrolör, İOS bağlı olarak geçiş yolu değiştirmek zorunda:

NSObject sınıfı "" ("Geçiş" Alman). Schalter

Schalter.h":

#import <Foundation/Foundation.h>

@interface Schalter : NSObject
  (void)loadController:(UIViewController*)VControllerToLoad andRelease:(UIViewController*)VControllerToRelease;
@end

Schalter.m ki:

#import "Schalter.h"
#import "AppDelegate.h"

@implementation Schalter
  (void)loadController:(UIViewController*)VControllerToLoad andRelease:(UIViewController*)VControllerToRelease{

    //adjust the frame of the new controller
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect windowFrame = [[UIScreen mainScreen] bounds];
    CGRect firstViewFrame = CGRectMake(statusBarFrame.origin.x, statusBarFrame.size.height, windowFrame.size.width, windowFrame.size.height - statusBarFrame.size.height);
    VControllerToLoad.view.frame = firstViewFrame;

    //check version and go
    if (IOS_OLDER_THAN_6)
        [((AppDelegate*)[UIApplication sharedApplication].delegate).window addSubview:VControllerToLoad.view];
    else
        [((AppDelegate*)[UIApplication sharedApplication].delegate).window setRootViewController:VControllerToLoad];

    //kill the previous view controller
    [VControllerToRelease.view removeFromSuperview];
}
@end

ŞİMDİ, bu Schalter kullanma ( Ürünler denetleyicisi için Depo denetleyicisi galiba ) :

#import "Warehouse.h"
#import "Products.h"

@implementation Warehouse
Products *instance_to_products;

- (void)goToProducts{
    instance_to_products = [[Products alloc] init];
    [Schalter loadController:instance_to_products andRelease:self];
}

bla-bla-bla your methods

@end

Elbette instance_to_products nesne serbest bırakmak gerekir:

- (void)dealloc{
     [instance_to_products release];
     [super dealloc];
}

Evet, işte burası. Downvote için tereddüt etmeyin, umurumda değil. Bu itibar çözüm için arıyoruz olanlar için. Şerefe! Sava Mazare.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006
  • RickardRick

    RickardRick

    9 Mart 2007
  • ShotgunSandwichENT

    ShotgunSandw

    3 EKİM 2012