Совместное использование расширения: захватить миниатюру в пользовательском контроллере представления, например, 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];
Другие вопросы по тегам