2014-09-20 17 views
18

Z jakiegoś niewiadomego powodu wydaje się, że istnieje potencjalny błąd we wszystkich metodach zrzutu ekranu na symulatorze iPhone'a (i urządzeniu). Ilekroć wywołać dowolną z metod screenshot tym:Metody snapshotów złamane na urządzeniu i symulatorze iPhone 6

snapshotViewAfterScreenUpdates: resizableSnapshotViewFromRect: drawViewHierarchyInRect:

z afterScreenUpdates ustawiona na wartość Tak, ekran migocze. Jeśli ustawione na NIE, to nie pojawia się migotanie, ale nie mogę uzyskać potrzebnej funkcjonalności.

Te metody działają dobrze zarówno w wersji iOS7.1, jak i iOS8 we wszystkich innych symulatorach, z wyjątkiem iPhone'a 6 i 6+.

Co dziwne, jeśli zacznę nowy projekt przy użyciu storyboardów i wypróbuję podobny kod, nie mogę odtworzyć migotania. Mam załączeniu gif migotania przy użyciu mojego non-storyboard projekt:

enter image description here

A tutaj jest bardzo prosty kontroler widok:

@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 

A oto moja AppDelegate na wszelki wypadek:

- (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; 
} 

Każda pomoc będzie bardzo ceniona!

Odpowiedz

5

Widzimy ten sam problem, gdy uruchomiony następujący kod:

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

Jedynym rozwiązaniem, które udało nam się znaleźć tak daleko jest, aby upewnić się, że aplikacja uruchomi obrazów o rozmiarze dla iPhone 6 i 6+ a potem już nie migoczymy.

2

Po dodaniu rozwiązania Ryansa, dodałem ekran startowy xib (lub storyboard), który rozwiązał problem na iPhone 6 i 6 plus.

Więc upewnij się, że masz to ustawione w ustawieniach projektu, powinien w końcu wygląda mniej więcej tak:

enter image description here

0

Wydaje się, że to błąd na stronie Apple, który występuje na skalowanych aplikacji (tych które nie mają design/aktywa/wsparcia układ dla iPhone 6/6 +) Ten pomógł mi dostać się nad nim: snapshotViewAfterScreenUpdates glitch on iOS 8

Zasadniczo używa: [view.layer renderInContext:UIGraphicsGetCurrentContext()];

Powiązane problemy