Opensource CoverFlow Komponente im Stile vom IKImageBrowserView

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Opensource CoverFlow Komponente im Stile vom IKImageBrowserView

    Hi Leute,

    heute will ich Euch mein Projekt vorstellen, an dem ich in den letzten Wochen und Monaten gearbeitet habe:

    MMFlowView, eine Opensource Implementation des CoverFlows Effektes im Stile des IKImageBrowsers. Hier ein paar Stichworte:

    - komplette Neuimplementation unter ausschließlicher Verwendung von public APIS
    - effizientes Caching der Bilder (asynchron)
    - Unterstützung aller Formate die auch IKImageBrowserView bietet (einschließlich Film- und QuartzComposerCompositon-Vorschau)
    - Drag&Drop
    - Bindings-Unterstützung
    - Datasource und Delegate ähnlich wie IKImageBrowserDatasource und IKImageBrowserDelegate
    - Accessibility-Unterstützung (VoiceOver)
    - CoreAnimation für die Darstellung des CoverFlow Effektes
    - QuickLook-Unterstützung
    - FreeBSD 2-clause Lizenz
    - sehr effizient (tausende Bilder sollten möglich sein)

    Zwar gibt es etliche Versionen im Netz, aber die haben z.T. andere Ausrichtungen bzw. sind nicht Feature-komplett oder verwenden private APIs (ImageKit bringt ein solches Control als private-API mit). Ich verwende zur Darstellung der Bilder CALayer anstatt regulärer views (anders als z.B. iCaroussel). Diese Entscheidung bedingte, dass ich Accessibility-Unterstützung selbst implementieren musste, belohnt wurde ich aber durch besseres Laufzeitverhalten. Die Bilder werden vom Control gecacht und asynchron geladen.
    Ich habe versucht, die Komponente so wiederverwendbar wie möglich zu machen, d.h. wenn Ihr mit IKImageBrowserView vertraut seid, müsstet Ihr recht fix mit MMFlowView klar kommen. Ich werde in den nächsten Tagen einen Blogeintrag veröffentlichen, der sich im Detail mit der Implementation befasst, vorerst lade ich den source hier nur als zip-File hoch und möchte Euch bitten, das angehängte Demoprojekt bei Euch zu testen. In Kürze veröffentliche den source dann auch auf github. Vorausgesetzt wird Mac OS 10.6, entwickelt habe ich unter Lion.

    Danke für Eure Zeit und viel Spaß damit, ich freue mich über Kritik und Anregungen,

    Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Markus Müller ()

  • Interessantes Projekt !

    Erstmal muss ich mich bedanken. Hatte auf diesem Mac noch keine Profile fürn Mac installiert. Nun nachgeholt :)

    Was mir auffällt, die CPU-Auslastung geht hier bis zum Anschlag hoch (10.7.4 - Mac Mini BJ 2011 - 8 GB Ram). Demzufolge ist es auch nicht möglich, die Bilder kontrolliert zu scrollen. Hab dazu auch ne ganze Reihe von Meldungen im Debugger....


    --> gist.github.com/247e6aa1dac2d4840eb1
    _____________________________
    Alle Angaben ohne Gewähr :)

    On the internet you can be anything you want. It's strange that so many people choose to be stupid.


    Superbientem animus prosternet
  • Die Meldungen kommen von QuartzCompositions, kommentiere mal die Zeile im AppDelegate aus, welche den Compositions Ordner lädt (in applicationDidFinishedLoading).

    Die Compositions werden z.t. mit OpenCL vom Quartz-Framework berechnet, kann sein, dass die ohne dedizierte GPU die Systemlast hochziehen. Ansonsten braucht das Control wenig Speicher, die Bilder werden mit einem NSCache vorgehalten (nicht größer als benötigt) und je nach Last automatisch wieder aus dem Speicher geworfen.

    @Kay: es ist geplant, das View in einem kommenden Projekt zu benutzen. Es hat mich immer gestört, dass Apple zwar die Icon-Platzhaltergrafiken für CoverFlow anbietet, aber kein öffentlich zugängliches view zur Verfügung stellt. Außerdem hat es mich schon immer mal gereizt, den CoverFlow Effekt zu programmieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Markus Müller ()

  • Drag and Drop ist schon implementiert, Du musst die Datasource setzen und die entspr. Methoden implementieren, siehe Header MMFlowView.h für Doku.

    Noch ein Wort zum Einbinden in eigene Projekt: man muss lediglich MMFlowView.m und MMFlowView.h zum Projekt hinzufügen, gegen Quartz und QTKit linken, weitere Abhängigkeiten bestehen nicht.
  • Es sind nur drei Methoden:

    Quellcode

    1. /* Invoked the flow view when the mouse button is released over the specified index if the datasource validated the drop.
    2. The datasource should read the data from the dragging pasteboard provided through the NSDraggingInfo-object */
    3. - (BOOL)flowView:(MMFlowView*)aFlowView acceptDrop:(id < NSDraggingInfo >)info atIndex:(NSUInteger)anIndex;
    4. /* The receiver may validate the drop at the specified index */
    5. - (NSDragOperation)flowView:(MMFlowView*)aFlowView validateDrop:(id < NSDraggingInfo >)info proposedIndex:(NSUInteger)anIndex;
    6. /* Invoked by the flow view when drag should begin. Return NO to abort the drag, otherwise write the data to the pasteboard */
    7. - (BOOL)flowView:(MMFlowView*)aFlowViev writeItemAtIndex:(NSUInteger)anIndex toPasteboard:(NSPasteboard *)pboard;

    :)