SpriteKit действительно не документирован так хорошо, вероятно, потому, что он настолько новый, что относительно немногие разработчики его внедрили. SpriteKit должен приостанавливать анимацию в фоновом режиме, но по моему опыту (и harrym17's) это приведет к ошибкам доступа к памяти и полностью прекратит работу приложения, а не создает его.
В соответствии с форумами разработчиков Apple, похоже, это известная ошибка в SpriteKit (она не всегда приостанавливает анимацию при фоновой настройке, так как она должна) вызывать memory access errors as per harrym17's comment. Вот краткое исправление, которое сработало для меня - мое приложение постоянно сбой при создании фона, и с момента добавления этого кода все работает нормально.
(Kudos to Keith Murray для этого кода на форумах Apple, насколько я вижу, он не разместил его на SO).
В AppDelegate.h
, убедитесь, что вы импортировать SpriteKit:
#import <SpriteKit/SpriteKit.h>
В AppDelegate.m
, редактировать applicationWillResignActive
метод:
- (void)applicationWillResignActive:(UIApplication *)application
{
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
// pause sprite kit
SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = YES;
}
И это ваш applicationDidBecomeActive
метод:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
// resume sprite kit
SKView *view = (SKView *)self.window.rootViewController.view;
view.paused = NO;
}
Там являются дополнительными проблемами, когда при воспроизведении звука через AVAudioSession
, по-видимому; Обходное решение упоминается in this thread.
Нужна ли вторая? –
Это исправление. По-видимому, SpriteKit все еще не обрабатывает звук. –
Эта проблема исправлена в iOS8. iOS7 и ниже, он падает. – rjm226