Суть данного способа заключается в передаче изображения из вашего приложения прямо в Instagram-экран с фильтрами (ответ на вопрос «почему так?» можно найти здесь). Так как в данном примере будет использоваться изображение, полученное с камеры iOS устройства — логично разделить его на 2 этапа:
1. Запуск камеры и получение снимка (для этого воспользуемся классом UIImagePickerController:).
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
// Включаем редактирование изображений (масштабирование и перемещение)
picker.allowsEditing = YES;
// Устанавливаем в качестве источника получения данных камеру
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController: picker animated: YES];
[picker release];
2. Открытие полученного изображения в приложении Instagram (для этого воспользуемся классом UIDocumentInteractionController)
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage : (UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
// Сохраняем изображение с разрешением *.igo
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"image.igo"];
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:savedImagePath atomically:YES];
// Проверяем, доступно ли приложение Instagram на данном устройстве
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
NSURL *imageUrl = [NSURL fileURLWithPath:savedImagePath];
UIDocumentInteractionController * docController = [[UIDocumentInteractionController alloc] init];
docController.delegate = self;
[docController retain];
// Указываем тип программ для открытия
docController.UTI = @"com.instagram.exclusivegram";
[docController setURL:imageUrl];
// Показываем меню выбора доступных приложений для отображения изображения
[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
} else {
// Если приложение Instagram не найдено - показываем соответствующее сообщение
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Warning"
message:@"You have no installation Instagram App" delegate:self cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];
}
}
В нашем случае для открытия изображения будет использоваться только Instagram. Для использования всех подходящих приложений устройства нужно заменить строки
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"image.igo"];
docController.UTI = @"com.instagram.exclusivegram";
на
NSString *savedImagePath = [documentsDirectory stringByAppendingPathComponent:@"image.ig"];
docController.UTI = @"com.instagram.photo";
В случае загрузки изображения из другого источника нужно предварительно сохранить его в формате PNG или JPEG (преимущественно JPEG). Для получения лучшего результата рекомендуется использовать JPEG с разрешением как минимум 612 x 612 пикселей, иначе оно не будет загружено (пользователю будет показано сообщение о невозможности загрузки).