Совместное использование расширения: захватить миниатюру в пользовательском контроллере представления, например, SLComposeServiceViewController
Я пытаюсь получить уменьшенное изображение с веб-сайта, чтобы я мог вставить его в свой пользовательский UIViewController для расширения общего доступа. Я знаю, что SLComposeServiceViewController делает это бесплатно, но я должен сделать настроенный контроллер представления. Есть ли способ сделать это с существующими API?
Благодарю.
2 ответа
Я также достиг предела в настройке SLComposeServiceViewController
и пришлось создать собственный превью. Основной подход таков:
for (NSExtensionItem *item in self.extensionContext.inputItems)
{
for (NSItemProvider *itemProvider in item.attachments)
{
//kUTTypeVCard, kUTTypeURL, kUTTypeImage, kUTTypeQuickTimeMovie
NSString *typeIdentifier = (__bridge NSString *)kUTTypeImage;
if ([itemProvider hasItemConformingToTypeIdentifier:typeIdentifier])
{
[itemProvider loadPreviewImageWithOptions:nil completionHandler:^(UIImage *image, NSError *error)
{
if (image)
{
//Use image
}
}];
}
}
}
Обратите внимание, что
- (void)loadPreviewImageWithOptions:(NSDictionary *)options completionHandler:(NSItemProviderCompletionHandler)completionHandler
Загружает изображение предварительного просмотра для этого элемента, вызывая предоставленный блок предварительного просмотра или возвращаясь к обработчику на основе QuickLook. Этот метод, как и loadItemForTypeIdentifier:options: завершением, как:, поддерживает неявное приведение типов для параметра элемента блока завершения. Классы допустимых значений: NSData, NSURL, UIImage/NSImage.
Попробуйте этот код, чтобы получить миниатюру из файла URL:
NSURL *path = self.url;
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:(NSString *)kQLThumbnailOptionIconModeKey];
CGImageRef ref = QLThumbnailImageCreate(kCFAllocatorDefault, (__bridge CFURLRef)path, CGSizeMake(600, 800 /* Or whatever size you want */), (__bridge CFDictionaryRef)options);
NSImage *thunbnail = [[NSImage alloc]initWithCGImage:ref size:NSZeroSize];