snapshotViewAfterScreenUpdates glitch na iOS 8

Zauważyłem, że uruchomienie tego spowoduje, że widok (lub główne okno, nie jestem pewien) zmieni rozmiar na chwilę, gdy działa na iPhone 6/6 + symulator skalowany z układu iPhone 5 (bez przechodzenia obrazu uruchamiania dla iPhone 6/6+): {]}

[self.view snapshotViewAfterScreenUpdates:YES];

Jakiś pomysł, jak to zrobić, gdy nie można przejść " nie " tam?

Update (Jul 13th):
wydaje się, że nie reprodukuje się już na iOS 8.4.

Author: Vadim Kotov, 2014-09-16

3 answers

Ponieważ wydawało się to problemem Apple / API, postanowiłem nie używać tej metody, gdy muszę przejść " tak."

Możesz po prostu zrobić zrzut ekranu (UIImage) widoku i umieścić go w UIImageView, aby działać jako "UIView", którego użyłeś do uzyskania z metody migawki.

Oto link do kodu: Jak przechwycić UIView do UIImage bez utraty jakości na wyświetlaczu retina

#import <QuartzCore/QuartzCore.h>

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}
 13
Author: kgaidis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:33:29

Właśnie miałem ten problem.

Powodem było to, że nie miałem zdjęć startowych odpowiednich dla iPhone 6 ani 6 plus. Innym problemem, który widziałem z powodu tego nieistniejącego obrazu, było to, że dostałem rozmiar dla iPhone 5, gdy zapytałem o granice rozmiaru ekranu tak:

CGSize screenSize = [[UIScreen mainScreen] bounds].size;

Kiedy naprawiłem te obrazy, ten problem został rozwiązany.

P. S-powinno działać niezależnie od tego, czy używasz katalogu zasobów, czy pliku nib dla obrazu startowego. W katalogu zasobów należy dodać "V" po prawej stronie (atrybuty IOS 8 i nowsze, i ustawić obrazy dla "Retina HD 5.5 "(dla 6 plus) i " Retina HD 4.7 " (dla iPhone 6)

 3
Author: oren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-16 15:39:07

Wygląda na to, że @anon i @PJC mają rację i to jest błąd UIKit. Czasami może być wykonywana przez [view.layer renderInContext:UIGraphicsGetCurrentContext()]

W tym momencie Sam rozwiązałem problem, ręcznie dostosowując układy dla iPhone 6/6+, ponieważ w natywnych rozwiązaniach urządzenia problem się nie powtarza.

 1
Author: Dannie P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-01 10:57:36