<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Just Developer Blog, заметки с тегом: просмотр медиа файлов в iOS</title>
<link>http://bibobo.ru/tags/prosmotr-media-faylov-v-ios/</link>
<description></description>
<generator>E2 (v3254; Aegea)</generator>

<item>
<title>Использование QLPreviewController для просмотра файлов (iOS)</title>
<guid isPermaLink="true">http://bibobo.ru/all/ispolzovanie-qlpreviewcontroller-dlya-prosmotra-faylov-ios/</guid>
<link>http://bibobo.ru/all/ispolzovanie-qlpreviewcontroller-dlya-prosmotra-faylov-ios/</link>
<comments>http://bibobo.ru/all/ispolzovanie-qlpreviewcontroller-dlya-prosmotra-faylov-ios/</comments>
<description>&lt;p&gt;Для реализации просмотра файлов различных форматов (изображения, word, excel, txt, медиа и т. п.) в iOS существует очень удобный класс QLPreviewController. Для его удобного использования необходимо сделать следующее:&lt;/p&gt;
&lt;p&gt;&lt;/br&gt;&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Создать класс-наследник QLPreviewController, который инкапсулирует все детали реализации&lt;/li&gt;
&lt;li&gt;Создать класс QLPreviewControllerDataSource, который будет являться источником данных для контроллера&lt;/li&gt;
&lt;li&gt;Создать классы-наследники QLPreviewItem, которые будут хранить информацию о просматриваемом элементе&lt;br /&gt;
&lt;input id="button_ios_qlpreview" type="button" onclick="toggle(cut_ios_qlpreview, button_ios_qlpreview)" value="Читать дальше" hiddenText="Свернуть" visibleText="Читать дальше"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div id="cut_ios_qlpreview" style="display: none;" displayOld=""&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Без лишних слов сразу взглянем на код контроллера&lt;/p&gt;
&lt;p&gt;&lt;/br&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// Контроллер, который позволяет отобразить документы (изображения, ворд, экзель, пдф и т.п.) в виде превью
/// поддерживает несколько документов для отображения
/// &amp;lt;/summary&amp;gt;
public class QuickLookPreviewController : QLPreviewController
{
    /// &amp;lt;summary&amp;gt;
    /// Отобразить список NSUrl'ов
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;returns&amp;gt;&amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt;, if urls was previewed, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt; otherwise.&amp;lt;/returns&amp;gt;
    /// &amp;lt;param name=&amp;quot;urls&amp;quot;&amp;gt;Urls.&amp;lt;/param&amp;gt;
    public bool PreviewUrls(params NSUrl[] urls)
    {
        List&amp;lt;QLPreviewItem&amp;gt; items = new List&amp;lt;QLPreviewItem&amp;gt;();
        foreach (NSUrl url in urls)
        {
            QLPreviewItemNsUrl item = new QLPreviewItemNsUrl(url);
            if (QLPreviewController.CanPreviewItem(item))
            {
                items.Add(item);
            }
        }

        return PreviewItems(items.ToArray());
    }

    /// &amp;lt;summary&amp;gt;
    /// Отобразить список QLPreviewItem
    /// &amp;lt;/summary&amp;gt;
    /// &amp;lt;returns&amp;gt;&amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt;, if items was previewed, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt; otherwise.&amp;lt;/returns&amp;gt;
    /// &amp;lt;param name=&amp;quot;items&amp;quot;&amp;gt;Items.&amp;lt;/param&amp;gt;
    public bool PreviewItems(params QLPreviewItem[] items)
    {
        if (items.Length &amp;gt; 0)
        {
            DataSource = new PreviewControllerDataSource(items);
            return true;
        }

        return false;
    }

    /// &amp;lt;summary&amp;gt;
    /// QL Preview источник данных
    /// &amp;lt;/summary&amp;gt;
    private class PreviewControllerDataSource : QLPreviewControllerDataSource
    {
        private QLPreviewItem[] _items = new QLPreviewItem[0];

        public PreviewControllerDataSource(params QLPreviewItem[] items)
        {
            _items = items;
        }

        public override nint PreviewItemCount(QLPreviewController controller)
        {
            return _items.Length;
        }

        public override IQLPreviewItem GetPreviewItem(QLPreviewController controller, nint index)
        {
            return _items[index];
        }
    }

    /// &amp;lt;summary&amp;gt;
    /// QL Preview Item, принимающий NSUrl
    /// &amp;lt;/summary&amp;gt;
    public class QLPreviewItemNsUrl : QLPreviewItem
    {
        private NSUrl _documentUrl;

        public QLPreviewItemNsUrl(NSUrl documentUrl)
        {
            _documentUrl = documentUrl;
        }

        public override string ItemTitle
        {
            get
            {
                return _documentUrl.LastPathComponent;
            }
        }
        public override NSUrl ItemUrl
        {
            get
            {
                return _documentUrl;
            }
        }
    }

    /// &amp;lt;summary&amp;gt;
    /// QL Preview Item, принимающий имя и путь к файлу из файловой системы
    /// &amp;lt;/summary&amp;gt;
    public class QLPreviewItemFileSystem : QLPreviewItem
    {
        string _fileName, _filePath;

        public QLPreviewItemFileSystem(string fileName, string filePath)
        {
            _fileName = fileName;
            _filePath = filePath;
        }

        public override string ItemTitle
        {
            get
            {
                return _fileName;
            }
        }
        public override NSUrl ItemUrl
        {
            get
            {
                return NSUrl.FromFilename(_filePath);
            }
        }
    }

    /// &amp;lt;summary&amp;gt;
    /// QL Preview Item, принимающий имя ипуть к файлу из бандла
    /// &amp;lt;/summary&amp;gt;
    public class QLPreviewItemBundle : QLPreviewItem
    {
        string _fileName, _filePath;
        public QLPreviewItemBundle(string fileName, string filePath)
        {
            _fileName = fileName;
            _filePath = filePath;
        }

        public override string ItemTitle
        {
            get
            {
                return _fileName;
            }
        }
        public override NSUrl ItemUrl
        {
            get
            {
                var documents = NSBundle.MainBundle.BundlePath;
                var lib = Path.Combine(documents, _filePath);
                var url = NSUrl.FromFilename(lib);
                return url;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;/br&gt;&lt;/p&gt;
&lt;p&gt;Использовать данный код можно следующим образом:&lt;/p&gt;
&lt;p&gt;&lt;/br&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;QuickLookPreviewController previewController = new QuickLookPreviewController();
if (previewController.PreviewUrls(new NSUrl[]{ fileUrl }))
{
    this.NavigationController.PushViewController(previewController, true);
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
<pubDate>Wed, 13 Jan 2016 22:10:14 +0300</pubDate>
</item>


</channel>
</rss>