UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0f);
if ([self.view drawViewHierarchyInRect: self.view.bounds]){
NSLog(@"Successfully draw the screenshot.");
} else {
NSLog(@"Failed to draw the screenshot.");
}
UIImage *screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
/* Сохраняем его на диске */
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSURL *documentsFolder = [fileManager URLForDirectory: NSDocumentDirectory
inDomain: NSUserDomainMask
appropriateForURL: nil
create: YES
error: nil];
NSURL *screenshotUrl = [documentsFolder
URLByAppendingPathComponent:@"screenshot.png"];
NSData *screenshotData = UIImagePNGRepresentation(screenshot);
if ([screenshotData writeToURL: screenshotUrl atomically: YES]){
NSLog(@"Successfully saved screenshot to %@", screenshotUrl);
} else {
NSLog(@"Failed to save screenshot.");
}
}
В начале этого кода мы создаем новый контекст изображения и получаем его представление в виде изображения с помощью UIGraphicsGetImageFromCurrentImageContext. Имея это представление, мы воспользуемся NSFileManager, чтобы найти путь к каталогу Documents (Документы) нашего приложения, который находится на диске (см. раздел 12.1). Наконец, мы получаем представление скриншота в виде данных (с помощью функции UIImagePNGRepresentation) и после этого можем сохранить данное представление на диске. Мы должны получить представление изображения в формате PNG или JPEG, воспользовавшись для этого функцией UIImageJPEGRepresentation. Так мы получим данные, соответствующие изображению в этом формате (PNG/JPEG). Имея данные, мы можем сохранить их на диске или выполнить с ними другие операции.
См. также
Раздел 11.11, глава 6.
Глава 18. Фреймворк Core Motion
18.0. Введение
Устройства с операционной системой iOS, в частности iPhone и iPad, обычно оборудованы акселерометром. На некоторых устройствах, например новых iPhone и iPad, есть также гироскоп. Прежде чем пытаться использовать в ваших приложениях для iOS акселерометр или гироскоп, нужно проверить доступность (наличие) этих сенсоров на том устройстве, на котором работает ваша программа. В разделах 18.1 и 18.2 описаны приемы, которые можно использовать для обнаружения акселерометра или гироскопа. Устройства iOS, оснащенные гироскопом, могут регистрировать движение вдоль шести осей.
Рассмотрим ситуацию, которая позволяет оценить, насколько полезен гироскоп. Например, акселерометр не может обнаружить вращение устройства вокруг его вертикальной оси, если вы крепко держите устройство в руках, сидите в компьютерном кресле и крутитесь на нем по часовой стрелке или против часовой стрелки. Относительно пола в вашей комнате или относительно планеты Земля устройство вращается вокруг вертикальной оси, но оно при этом не вращается вокруг собственной оси
Гироскоп, имеющийся в некоторых устройствах с iOS, может регистрировать такие движения. И мы можем писать более гладкие и безошибочные программы обнаружения движения. Обычно такие возможности полезны в играх, так как при их программировании разработчику зачастую требуется узнать не только о том, как устройство движется по осям
Программист может пользоваться фреймворком Core Motion для доступа к информации, поступающей как от акселерометра, так и от гироскопа (при их наличии). Фреймворк Core Motion применяется во всех разделах этой главы. При работе с новым компилятором LLVM, чтобы связать новое приложение с системным фреймворком, вам всего лишь потребуется импортировать этот фреймворк в верхней части заголовочных файлов и файлов реализации, а компилятор сам выполнит все необходимые операции для импорта фреймворка в приложение.