2014-09-20 10 views
18

Aus einem unbekannten Grund scheint es einen möglichen Fehler mit allen Screenshot-Methoden auf dem iPhone 6 Simulator (und Gerät) zu geben. Immer, wenn ich einen der Bildschirm Methoden aufrufen, einschließlich:Snapshot Methoden auf iPhone 6 Gerät und Simulator

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

mit afterScreenUpdates auf JA gesetzt, flackert der Bildschirm. Wenn NEIN eingestellt ist, tritt kein Flimmern auf, aber ich kann die benötigte Funktionalität nicht finden.

Diese Methoden funktionieren gut mit iOS7.1 und iOS8 in allen anderen Simulatoren außer für iPhone 6 und 6+.

Seltsamerweise, wenn ich ein brandneues Projekt mit Storyboards starte und einen ähnlichen Code versuche, kann ich das Flimmern nicht reproduzieren. Ich habe ein gif des Flimmerns angebracht mein Nicht-Storyboard-Projekt mit:

enter image description here

Und hier ist der sehr einfache View-Controller:

@implementation TestSnapshotController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Snap" style:UIBarButtonItemStylePlain target:self action:@selector(_snap)]; 

    self.blueView = [UIView new]; 
    self.blueView.backgroundColor = [UIColor blueColor]; 
    self.blueView.frame = CGRectMake(100.0f, 100.0f, 100.0f, 100.0f); 
    [self.view addSubview:self.blueView]; 
} 

- (void)_snap 
{ 
    [self.blueView snapshotViewAfterScreenUpdates:YES]; 
} 

@end 

Und hier ist mein AppDelegate für alle Fälle:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

    TestSnapshotController *testVC = [TestSnapshotController new]; 
    UINavigationController *rootNavVC = [[UINavigationController alloc] initWithRootViewController:testVC]; 

    self.window.rootViewController = rootNavVC; 
    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

Jede Hilfe würde sehr geschätzt werden!

Antwort

5

Wir das gleiche Problem sehen, wenn Sie den folgenden Code ausführen:

[window drawViewHierarchyInRect:window.bounds afterScreenUpdates:YES]; 

Die einzige Lösung, die wir bisher gefunden haben, ist sicher zu stellen, dass die Anwendung Bilder starten Größe für das iPhone hat 6 und 6+ und dann bekommen wir nicht mehr das Flackern.

2

Im Anschluss an Ryans Lösung, fügte ich einen Startbildschirm Xib (oder Storyboard) und das Problem auf dem iPhone 6 und 6 plus gelöst.

So stellen Sie sicher, dass Sie es in den Projekteinstellungen festgelegt haben, sollte es so etwas wie dies am Ende aussehen:

enter image description here

0

Es scheint ein Fehler auf dem Apple-Seite zu sein, die auf skalierte Anwendungen auftreten (die dass kein Design/assets/Layout Unterstützung für iPhone 6/6 +) Dies hat mir geholfen, darüber hinwegkommen: snapshotViewAfterScreenUpdates glitch on iOS 8

Grundsätzlich verwendet: [view.layer renderInContext:UIGraphicsGetCurrentContext()];

Verwandte Themen