<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Roger Boesch &#187; iPhone</title>
	<atom:link href="http://www.rogerboesch.com/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rogerboesch.com</link>
	<description>iPhone, iPad und iPod Touch</description>
	<lastBuildDate>Thu, 01 Apr 2010 20:04:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone Games</title>
		<link>http://www.rogerboesch.com/2010/03/06/iphone-games/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/iphone-games/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 17:36:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=880</guid>
		<description><![CDATA[Mobile Spiele sind Volkssport. In allen Altersgruppen, in allen Einkommensgruppen, in allen Bildungsschichten, in Single-, Mehrpersonen- und Familienhaushalten – überall wird gespielt.
Dabei gibt es den typischen Spieler gemäss Studie nicht, denn Computerspiele werden in allen Altersschichten und &#8211; gruppen gespielt, wobei für unsere Betrachtung vorallem der sogenannte Freizeitspieler interessant ist. Mit 54% stellt er auch [...]]]></description>
			<content:encoded><![CDATA[<p>Mobile Spiele sind Volkssport. In allen Altersgruppen, in allen Einkommensgruppen, in allen Bildungsschichten, in Single-, Mehrpersonen- und Familienhaushalten – überall wird gespielt.<br />
Dabei gibt es den typischen Spieler gemäss Studie nicht, denn Computerspiele werden in allen Altersschichten und &#8211; gruppen gespielt, wobei für unsere Betrachtung vorallem der sogenannte Freizeitspieler interessant ist. Mit 54% stellt er auch die bei weitem grösste und mit<br />
Durchschnittsalter von 44 Jahren älteste Gruppe aller Videospieler dar. Angepasste Studien für mobile Spiele oder gar spezifische fürs iPhone gibt es erst Wenige, die angegebenen Zahlen dürften aber insbesondere auf dem iPhone nochmals deutlich höher ausfallen. Der Freizeitspieler ist überwiegend berufstätig und spielt nur gelegentlich. Zum Entspannen oder zum Zeitvertreib, wenn es seine vielfältigen anderen Freizeitaktivitäten, der Job oder die Familie gerade zulassen. Er ist in jeder Hinsicht gesetzt, sowohl beruflich als auch familiär. In seinem Haushalt ist ein mittleres bis gehobenes Nettoeinkommen verfügbar. Die Entscheidung zum Spielen fällt oft spontan: Auf dem Arbeitsweg, in der Mittagspause, nach dem Abendessen oder vor dem Schlafen gehen. Auch mit einem weiteren Vorurteil räumt der Freizeitspieler gründlich auf: Männer und Frauen sind in der Gruppe gleich stark vertreten. Seine bevorzugten Genres sind Fun-, Sport- oder Geschicklichkeitsspiele, nur selten greift er zu Actionspielen oder Strategie- und Fantasiespielen. Die Zeit, sich mit komplexen Spielszenarien auseinander zu setzen, hat er gar nicht. Deshalb ist es ihm wichtig, dass die Spiele eine einfache Bedienung haben und nicht zu viel geistige Anstrengung verlangen. Spiele sind für ihn ein entspannender Ausgleich zu den Herausforderungen im Berufsalltag, er geniesst die zeitvertreibende und zerstreuende Wirkung von Spielen. Spielen auf dem iPhone (iPod Touch)<br />
Der Einfluss des iPhone auf den mobilen Markt ist gewaltig. Es wurden Massen von neuen Nutzern angelockt und die Nutzung des mobilen Internets wurde erheblich erweitert. iPhone Besitzer nutzen ihr Mobiltelefon auf eine völlig andere Art und Weise als der durchschnittliche Mobilfunknutzer. Nutzungsmuster zeigen auf, dass das iPhone gern als Unterhaltungsgerät verwendet wird. Das iPhone Paket mit Browser, Nachrichtendiensten, Spielen, Musik und Filmen ist perfekt für die Zielgruppe. In den USA hat das iPhone den Markt für Handyspiele bereits umgekrempelt. Die Handys von Apple werden mit Abstand am häufigsten für den Download von Spielen genutzt. So haben im November 2009 über 70% der iPhone Nutzer schon mindestens ein Spiel heruntergeladen, während der Durchschnitt des Gesamtmarkts gerade einmal bei unglaublichen 5% liegt.</p>
<h2>Nutzen als Werbeplatform</h2>
<p>Die schwindende Wirkung von konventionellen Werbeformen verlangt nach neuen Wegen, über die Menschen effizient erreicht werden können. Werben mit Spielen ist einer dieser Wege. Games erhalten als Freizeitbeschäftigung in dreierlei Hinsicht Bedeutung für die Werbeindustrie: Aufgrund der demografischen Verbreitung, der aufmerksamkeitsstarken Wirkung und des intensiven Involvements des Spielers in die Handlung. Hinzu kommt eine hohe Aufmerksamkeit: Wer spielt, richtet seinen Fokus ausschliesslich auf die Spielhandlung. Dabei treffen Videospiele sogar den wichtigsten Werbeträger, das Fernsehen, an seiner empfindlichsten Stelle: Berufstätige spielen überwiegend zur Entspannung nach Feierabend, zur so genannten „Primetime“. Genau dann, wenn sie eigentlich für die Werbebotschaften erreichbar sein sollten. Wenn man diese Aufmerksamkeitzurückgewinnen will, kommt man also nicht umhin, mit den Werbe-Botschaften auch in Spielen und deren Umfeld präsent zu sein. Werben lässt sich dabei auf zwei unterschiedliche Weisen:</p>
<h2>Als Teil des Gameplay</h2>
<p>Wenn Marke oder Produkt zum Teil der Spielhandlung werden, ist das Involvement des Spielers am grössten. Die Wahrnehmung ist garantiert, der Spieler setzt sich intensiv mit der Marke auseinander und wird die im Spiel erlebten Emotionen mit der Marke in Verbindung bringen. Diese Werbeform ist nicht nur die effektivste, sie ist sicher auch die aufwendigste.</p>
<h2>Teil der Spieleszenerie</h2>
<p>Die Werbung, die Marke oder das Produkt tauchen im Szenario des Games auf, zum Beispiel als Bandenwerbung in einem Sportspiel. Oder aber als Getränkeautomat, Geschäftsfiliale oder einfach als Teil einer Kulisse. Spannend ist diese Werbeform vor allem, wenn sie dynamisch ins Spiel eingefügt wird und nicht statisch im Spiel integriert sein muss. So können Banden oder Billboards tagesaktuell und sogar mit regionalem Bezug platziert werden. Auf dem iPhone sind beide Arten problemlos möglich. Durch die perfekte Symbiose von grossem Display, guten Multimediainhalten und einfachem Onlinezugriff ist das iPhone schnell zum inbegriff des mobilen Spielens geworden, mit rasant wachsender Tendenz.</p>
<h2>Spielegenres, Umsetzung und Kosten</h2>
<p>Die bevorzugten Genres auf dem iPhone sind Fun-, und Geschicklichkeitsspiele, was durch den Typ des Freizeitspielers und des mobilen Nutzerverhaltens auch logisch erscheint. Hinzu kommen zwei wesentliuche Faktoren:</p>
<ul>
<li><strong>Ein schneller Einstieg: </strong>Es muss sofort erkennbar sein, um was es geht.</li>
<li><strong>Kurze Nutzungszeiten</strong>: Die durchschnittliche Spielezeit beträgt gerade einmal 5 Minuten. Unterschieden wird grundsätzlich zwischen 2D und 3D Spielen. Aus technischer Sicht ist auf dem iPhone prinzipiell beides möglich, es hat sich aber gezeigt, dass obige Bedingungen am Besten auf 2D Spiele zutreffen. Hinzu kommt, dass professionelle 3D Spiele und insbesondere die Erstellung der Assets problemlos fünfstellige Beträge erreichen können. Budgets die zumeist noch nicht zur Verfügung stehen im Bereich der mobilen Spiele. 2D Spiele haben zudem einen ganz speziellen Reiz und gehen auch besser mit den visuellen Einschräkungen und Limitation des Displays um. Hinzu kommt, dass sich viele der Spieler an Spiele aus der eigenen Kinder- und Jugendzeit erinnert fühlen. Wer kennt nicht Pac-Man, Donkey Kong, Super Mario und wie sie alle heissen&#8230;</li>
</ul>
<p>Denken auch Sie daran, ein iPhone Game zu realisieren? Dann lassen Sie uns darüber sprechen!</p>
<p><a href="http://www.rogerboesch.com/wp-content/uploads/2010/03/Scuba.png" rel="lightbox[880]"><img class="alignnone size-medium wp-image-887" title="Scuba" src="http://www.rogerboesch.com/wp-content/uploads/2010/03/Scuba-300x162.png" alt="" width="300" height="162" /></a><a href="http://www.rogerboesch.com/wp-content/uploads/2010/03/MyIsland.png" rel="lightbox[880]"><img class="alignnone size-medium wp-image-888" title="MyIsland" src="http://www.rogerboesch.com/wp-content/uploads/2010/03/MyIsland-300x162.png" alt="" width="300" height="162" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/iphone-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TouchViz</title>
		<link>http://www.rogerboesch.com/2010/03/06/touchviz/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/touchviz/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 17:13:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Fernsehen]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=873</guid>
		<description><![CDATA[
Live-Sendungen, bei denen für Analyse spontan aktuellste Grafiken eingeblendet werden müssen, waren für Moderation und Regie bisher eine spezielle Herausforderung. touchViz unterstützt nun alle Beteiligten wirksam. Am iPhone oder iPod touch kann sich die Moderation über bereitstehende Grafiken/Einspieler informieren und diejenige vorwählen, die als nächstes behandelt wird &#8211; Informationsvermittlung mit Fingerspitzengefühl! touchViz erlaubt, während Live-Sendungen [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>Live-Sendungen, bei denen für Analyse spontan aktuellste Grafiken eingeblendet werden müssen, waren für Moderation und Regie bisher eine spezielle Herausforderung. touchViz unterstützt nun alle Beteiligten wirksam. Am iPhone oder iPod touch kann sich die Moderation über bereitstehende Grafiken/Einspieler informieren und diejenige vorwählen, die als nächstes behandelt wird &#8211; Informationsvermittlung mit Fingerspitzengefühl! touchViz erlaubt, während Live-Sendungen die Grafikausgabe über ein iPhone/iPod touch direkt interaktiv zu steuern. In solchen Sendungen muss die Live-Moderation spontan auf sich verändernde Situationen eingehen und aktuellste Grafiken abrufen können. Bei der bisher üblichen Arbeitsweise stellt dies höchste Anforderungen an die Kommunikation mit der Regie.</p>
<p><a title='Original Link: http://www.touchviz.com/'  href="http://www.rogerboesch.com/?Vfu_jkBY">Kunden Link</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/touchviz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>20 Minuten</title>
		<link>http://www.rogerboesch.com/2010/03/06/20-minuten/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/20-minuten/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 15:02:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iApps]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=831</guid>
		<description><![CDATA[Eines unserer ersten iApp&#8217;s und auch unter den ersten 500, die am Anfang im AppStore erhältlich waren. Vom Code der Anfangszeit ist zwar nicht mehr viel drin und auch an der Oberfläche wurde die iApp von uns ständig verbessert. Dies und der konsequente Einsatz des Kunden was Content und Weiterentwicklung betrifft, machen die 20Minuten iApp [...]]]></description>
			<content:encoded><![CDATA[<p>Eines unserer ersten iApp&#8217;s und auch unter den ersten 500, die am Anfang im AppStore erhältlich waren. Vom Code der Anfangszeit ist zwar nicht mehr viel drin und auch an der Oberfläche wurde die iApp von uns ständig verbessert. Dies und der konsequente Einsatz des Kunden was Content und Weiterentwicklung betrifft, machen die 20Minuten iApp noch immer zu einer der meistinstallierten Apps inder Schweiz.</p>
<p><a title='Original Link: http://itunes.apple.com/ch/app/20-minuten-mobile-deutsch/id285688859?mt=8'  href="http://www.rogerboesch.com/?8ETJZ_xC">AppStore Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/20-minuten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Klimaguide</title>
		<link>http://www.rogerboesch.com/2010/03/06/klimaguide/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/klimaguide/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 14:09:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=817</guid>
		<description><![CDATA[Der Jungfrau Klimaguide läuft auf iPhones, denn diese Geräte bieten nicht nur eine Vielzahl technischer Funktionen, die sich hervorragend zur multimedialen Vermittlung von Wissen eignen, sie sind auch sehr benutzerfreundlich. Auch wer noch nie ein iPhone in den Händen gehalten hat, findet sich Dank der intuitiven Benutzerführung schnell auf dem Gerät zurecht. Bei der Miete [...]]]></description>
			<content:encoded><![CDATA[<p>Der Jungfrau Klimaguide läuft auf iPhones, denn diese Geräte bieten nicht nur eine Vielzahl technischer Funktionen, die sich hervorragend zur multimedialen Vermittlung von Wissen eignen, sie sind auch sehr benutzerfreundlich. Auch wer noch nie ein iPhone in den Händen gehalten hat, findet sich Dank der intuitiven Benutzerführung schnell auf dem Gerät zurecht. Bei der Miete des Geräts erhalten Sie zudem eine kurze Einführung sowie eine leichtverständliche Gebrauchsanleitung für unterwegs.<br />
Für den Jungfrau Klimaguide haben wir für den Kunden eine Applikation für das iPhone entwickelt. Diese Anwendung gibt es bis jetzt nur in der Jungfrauregion – eine echte Weltpremiere!</p>
<p><a title='Original Link: http://www.jungfrau-klimaguide.ch/#/de/home'  href="http://www.rogerboesch.com/?pJBwRkjX">Kunden Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/klimaguide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iGolfrules</title>
		<link>http://www.rogerboesch.com/2010/03/06/igolfrules/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/igolfrules/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 13:44:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[Golf]]></category>
		<category><![CDATA[iApps]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=811</guid>
		<description><![CDATA[Eine weitere iApp aus, die wir erstellen konnten ist iGolrules. Diese iApp beantwortet alle Regelfragen in Sekundenschnelle. Damit hat man stets einen virtuellen Schiedsrichter an seiner Seite, der einem hilft, die Regeln zu seinen Gunsten anzuwenden und von sämtlichen Erleichterungsverfahren Gebrauch zu machen. Die App beruht auf „Golfregeln kompakt“, einem  internationalen Bestseller.
Auch diese iApp ist seit [...]]]></description>
			<content:encoded><![CDATA[<p>Eine weitere iApp aus, die wir erstellen konnten ist iGolrules. Diese iApp beantwortet alle Regelfragen in Sekundenschnelle. Damit hat man stets einen virtuellen Schiedsrichter an seiner Seite, der einem hilft, die Regeln zu seinen Gunsten anzuwenden und von sämtlichen Erleichterungsverfahren Gebrauch zu machen. Die App beruht auf „Golfregeln kompakt“, einem  internationalen Bestseller.</p>
<p>Auch diese iApp ist seit gut einem Jahr auf den obersten Platzierungen im AppStore und dank dem wirklich guten Content der dahintersteht, wird das sicherlich auch so bleiben. Eine Entwicklung, die Spass gemacht hat und dank derer ich heute Golfregeln kenne, ohne je gross selber gespielt zu haben <img src='http://www.rogerboesch.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a title='Original Link: http://www.igolfrules.com/index_D.html'  href="http://www.rogerboesch.com/?PojdDY_q">Kunden Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/igolfrules/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tages Anzeiger</title>
		<link>http://www.rogerboesch.com/2010/03/06/tages-anzeiger/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/tages-anzeiger/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 09:29:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iApps]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=802</guid>
		<description><![CDATA[Die iApp für den Tages Anzeiger war technisch sicher eines der anspruchsvollsten iPhone Projekte zu diesem Zeitpukt für uns. Wir hatten uns entschlossen, als erstes eine leistungsfähige Basis (Framework) aus den vielen guten Klassen, die wir bereits hatten zu erstellen, denn dich nicht funktionalen Anforderungen hatten es für ein Handy (Was das iPhone nun mal [...]]]></description>
			<content:encoded><![CDATA[<p>Die iApp für den Tages Anzeiger war technisch sicher eines der anspruchsvollsten iPhone Projekte zu diesem Zeitpukt für uns. Wir hatten uns entschlossen, als erstes eine leistungsfähige Basis (Framework) aus den vielen guten Klassen, die wir bereits hatten zu erstellen, denn dich nicht funktionalen Anforderungen hatten es für ein Handy (Was das iPhone nun mal ist&#8230;) in sich. Einfach ausgedrückt liegt die Herausforderung darin, immer nur soviel Daten zu laden wie gerade nötig, wenn der Nutzer aber eine Funktion auslöst müssen diese unmittelbar verfübar sein und die iApp soll jederzeit flüssig und leicht bedienbar bleiben. Klingt nach Multithreading und ist es auch&#8230;</p>
<p><a title='Original Link: http://itunes.apple.com/ch/app/tages-anzeiger/id322823380?mt=8'  href="http://www.rogerboesch.com/?6TuQj_Dv">AppStore Link</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/tages-anzeiger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TV Screen &#8211; Fernsehen auf dem iPhone</title>
		<link>http://www.rogerboesch.com/2010/03/06/tv-screen-fernsehen-auf-dem-iphone/</link>
		<comments>http://www.rogerboesch.com/2010/03/06/tv-screen-fernsehen-auf-dem-iphone/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 09:05:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iApps]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=794</guid>
		<description><![CDATA[Zusammen mit 20 minuten haben wir im Dezember TV Screen lanciert und präsentieren den Nutzern damit nichts weniger als eine Weltneuheit. Egal ob Sportfan oder Serienjunkie, damit verpasst man auch unterwegs garantiert keine Sendung mehr. Denn das Signal der Fernsehstationen wird live auf das iPhone gestreamt, 24 Stunden am Tag. Das aktuelle Programmangebot umfasst jetzt [...]]]></description>
			<content:encoded><![CDATA[<p>Zusammen mit 20 minuten haben wir im Dezember TV Screen lanciert und präsentieren den Nutzern damit nichts weniger als eine Weltneuheit. Egal ob Sportfan oder Serienjunkie, damit verpasst man auch unterwegs garantiert keine Sendung mehr. Denn das Signal der Fernsehstationen wird live auf das iPhone gestreamt, 24 Stunden am Tag. Das aktuelle Programmangebot umfasst jetzt schon 16 Sender.</p>
<p>TV Screen ist ein Projekt, wie es so nur auf dem iPhone möglich ist. Dabei ist das iPhone eigentlich nur der Spiegel nach aussen. Klar, mit Cover Flow Ansicht, Video Overlay Infos zur Sendung und InApp Purchase wird auch einiges an Technik geboten, aber der wahre Erfolg dieser iApp, die sich seit Wochen in den vordersten Rängen tummelt ist die Kombination aus gutem Marketing, den richtigen Features zum richtigen Zeitpunkt und das kontinuerliche Verbessern und Eweitern der App. Ein Erfolgsrezept, dass sich 1:1 auf jede erfolgreiche iApp umsetzen lässt. Bei über 100&#8242;000 iApps, die sich im AppStore befinden geht es auch gar nicht mehr anders.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2010/03/06/tv-screen-fernsehen-auf-dem-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>1-jähriges App Store Jubiläum</title>
		<link>http://www.rogerboesch.com/2009/09/03/1-jahriges-app-store-jubilaum/</link>
		<comments>http://www.rogerboesch.com/2009/09/03/1-jahriges-app-store-jubilaum/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 17:46:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Recent Projects]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iApps]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=685</guid>
		<description><![CDATA[Wie doch die Zeit vergeht&#8230; Fast genau vor einem Jahr haben wir unsere erste iApp in den AppStore gestellt, damals noch 1 von 500! In der Zwischenzeit haben wir rund 40 Kundenprojekte umgesetzt und die iApp von &#8220;damals&#8221; unterscheiden sich zwischenzeitlich grundsätzlich von denen, die als Erstes den Weg in den AppStore gefunden haben.
Am Beispiel [...]]]></description>
			<content:encoded><![CDATA[<p>Wie doch die Zeit vergeht&#8230; Fast genau vor einem Jahr haben wir unsere erste iApp in den AppStore gestellt, damals noch 1 von 500! In der Zwischenzeit haben wir rund 40 Kundenprojekte umgesetzt und die iApp von &#8220;damals&#8221; unterscheiden sich zwischenzeitlich grundsätzlich von denen, die als Erstes den Weg in den AppStore gefunden haben.</p>
<p>Am Beispiel der iApp für den Tages Anzeiger (<a title='Original Link: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=322823380&amp;mt=8'  href="http://www.rogerboesch.com/?3NBd7D8s">iTunes Link</a>) lässt sich dies gut erkennen.</p>
<p>iPhone Applikationen sind eine ganz spezielle Spezies, denn eigentlich gibt es ein paar (fast) nicht unter einen Hut zu bringenden Anforderungen zu erfüllen:</p>
<ul>
<li>Eine iApp muss einfach zu bedienen sein</li>
<li>Sie muss schnell sein (Kein Ruckeln)</li>
<li>Man sollte nur vom Server laden, was gerade gebraucht wird, dass dafür sehr schnell</li>
<li>Die iApp muss jederzeit bedienbar bleiben, egal welche Datenmenge gerade gebraucht wird</li>
<li>u.s.w.</li>
</ul>
<p>Diese Liste liesse sich noch fast beliebig erweitern, wobei oft noch hinzu kommt, dass auch die Budgets nicht mehr so üppig zur Verfügung stehen wie auch schon. Kompliziert wird es dann erst richtig, wenn man sieht, welche technischen Rahmenbedingungen dem gegenüberstehen:</p>
<ul>
<li>Limitiertes Memory</li>
<li>(Fast) klassische C-Programmierung (Keine moderne Programmiersprache trotz einzigatigem Framework)</li>
<li>CPU ist nicht zu vergleichen mit einer Desktop CPU (Bsp. Multithreading)</li>
<li>Kein Garbage Collection</li>
<li>Simulator entspricht in keinster Weise dem Verhalten auf dem echten Device</li>
<li>Wenige Entwickler mit entsprechendem Know-How verfügbar</li>
</ul>
<p>Trotzdem erweckt Apple selber und Steve Jobs in seinen berühmten Sessions, dass alles ganz einfach ist und auch die komplexesten iApps in wenigen Tagen portiert sind. Bei Spielen mag das noch stimmen, aber auch dann nur, wenn bereits grosse Bibliotheken und vorallem dediziertes Know-How zur Verfügung stehen.Bei realen Kundenprojekten ist dies aber so gut wie nie der Fall.</p>
<p>Doch etwas habe ich bis jetzt nicht erwähnt. Trotz all den obrigen Widrigkeiten, unterscheidet sich die iPhone Programmierung von allen Anderen, denn es macht einfach Spass, Software für&#8217;s iPhone zu schreiben. Dass man davon alleine nicht leben kann ist klar, deshalb ist es auch extrem wichtig sich schnell eine Basis (früher hätte man Framework gesagt) zu schaffen, die einem Vieles erleichtert. Wir sind noch einen Schritt weitergegangen und haben sogenannte Factories erstellt. &#8220;Module&#8221; also, die sich für beestimmte Anwendungsbereiche &#8220;Lego&#8221; artig zusammenbauen lassen. Das ist zwar nicht für jede iApp möglich, aber bei all den News Apps, die durch unsere Hände laufen, macht dies durchaus Sinn und erlaubt uns auch schneller komplexere Themen wie Push Notification, InApp Purchase etc. einzubauen. Highlight ist aber sicher unser Basis System für alle News Anwendungen, das ein für&#8217;s iPhone optimiertes Multi-Threading unterstützt und immer dann die CPU und Memory beansprucht, wenn der Benutzer gerade etwas liest oder aus anderen Gründen wenig Ressourcen vom iPhone abverlangt.</p>
<p>Ich werde in einigen weiteren Posts sicher noch mehr auf technische Details und auch noch auf die Tools genauer eingehen, zusammenfassend kann aber schon mal ein Fazit gezogen werden.</p>
<p>Eine einzelne iApp ist aus Business Sicht gesehen, immer im besten Fall eine schwarze Null, ein effektives Business kann daraus nur werden, wenn Synergien zwischen den Projekten geschaffen werden, möglichst viel automatisiert wird und nicht zuletzt ein sehr gutes Team dahinter steht.</p>
<p>Alles Dinge, die bei uns heute Realität sind und so Applikation wie die Tagi iApp Realität werden lassen. Dafür vielen Dank an all unsere Kunden!</p>
<p><em>Weitere Referenzen auf <a title='Original Link: http://www.iagentur.ch'  href="http://www.rogerboesch.com/?1ik5FEkW">www.iagentur.ch.</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2009/09/03/1-jahriges-app-store-jubilaum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SailAway ist nun im AppStore</title>
		<link>http://www.rogerboesch.com/2009/08/25/sailaway-ist-nun-im-appstore/</link>
		<comments>http://www.rogerboesch.com/2009/08/25/sailaway-ist-nun-im-appstore/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 12:31:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Products]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iApps]]></category>
		<category><![CDATA[SailAway]]></category>
		<category><![CDATA[Sailing]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=651</guid>
		<description><![CDATA[Seit heute ist SailAway nun im AppStore verfügbar und gegenüber der Beta Version zusätzlich mit einem neuen umfangreichen Kartenmodul ausgestattet. Zusätzlich sind über 200 neue Download Karten hinzugekommen, weitere 400 (vorallem USA und Karibik) folgen in den nächsten Tagen und stehen dann unmittelbar auf jedem iPhone zum Download bereit. Trotzdem ruhen wir uns nun natürlich [...]]]></description>
			<content:encoded><![CDATA[<p><a title='Original Link: http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=326876989&amp;mt=8'  href="http://www.rogerboesch.com/?ItezIcr0"><img class="alignleft size-full wp-image-656" title="SailAwayAppStore" src="http://www.rogerboesch.com/wp-content/uploads/2009/08/SailAwayAppStore.png" alt="SailAwayAppStore" width="116" height="120" /></a>Seit heute ist SailAway nun im AppStore verfügbar und gegenüber der Beta Version zusätzlich mit einem neuen umfangreichen Kartenmodul ausgestattet. Zusätzlich sind über 200 neue Download Karten hinzugekommen, weitere 400 (vorallem USA und Karibik) folgen in den nächsten Tagen und stehen dann unmittelbar auf jedem iPhone zum Download bereit. Trotzdem ruhen wir uns nun natürlich nicht aus und arbeiten bereits am nächsten Release. Hinzu kommen in den nächsten Versionen vorallem ein noch umfangreicheres Logbuch und die Möglichkeit Reiseberichte zu erstellen und diese auszutauschen. Mehr möchte ich an dieser Stelle noch nicht verraten&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2009/08/25/sailaway-ist-nun-im-appstore/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CoverFlow</title>
		<link>http://www.rogerboesch.com/2009/08/16/coverflow-programmieren/</link>
		<comments>http://www.rogerboesch.com/2009/08/16/coverflow-programmieren/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 16:05:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone/iPad Programming]]></category>
		<category><![CDATA[Cover Flow]]></category>
		<category><![CDATA[OpenGL]]></category>

		<guid isPermaLink="false">http://www.rogerboesch.com/?p=611</guid>
		<description><![CDATA[
Bereits Anfang des Jahres habe ich einen Blog Beitrag zum Thema Cover Flow geschrieben. Ein Thema, zu dem mich seither immer wieder Mails und Anfragen erreicht haben. Insbesondere für Entwickler, die noch nicht so lange mit Objective-C und Cocoa entwickeln ist das Thema zugegebenermassen auch nicht ganz ohne.
Möchte man einen Cover Flow in eine eigene [...]]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/zSsns24bUPo&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/zSsns24bUPo&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><br />
Bereits Anfang des Jahres habe ich einen Blog Beitrag zum Thema Cover Flow geschrieben. Ein Thema, zu dem mich seither immer wieder Mails und Anfragen erreicht haben. Insbesondere für Entwickler, die noch nicht so lange mit Objective-C und Cocoa entwickeln ist das Thema zugegebenermassen auch nicht ganz ohne.<br />
Möchte man einen Cover Flow in eine eigene App einbauen gibt es zunächst drei Möglichkeiten:</p>
<ul>
<li> Man benutzt den Cover Flow View aus den Private Frameworks von Apple (Keine gute Idee, wenn man die App später auch erfolgreich in den AppStore bringen möchte)</li>
<li> Man benutzt Core Animation und Layers</li>
<li> Man verwendet OpenGL</li>
</ul>
<p>Auf die erste Möglichkeit gehe ich aus verständlichen Gründen nicht weiter ein. Die zweite Variante mit Core Animation kam in einem meiner recht frühen Projekte zum Einsatz (Den Beispielcode erläutere ich nacholgend) und hat sich gut bewährt. Variante 3 setze ich aktuell in den Projekten ein, kann als Library gekauft werden und ist zudem im Video zu sehen.</p>
<p>Da das Core Animation Framework auf dem iPhone nicht ganz so mächtig wie unter MacOSX ist, muss man auf Filter verzichten, trotzdem sind schöne Ergebnisse zu erzielen. Doch nun zum Code.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import</span>
<span style="color: #6e371a;">#import </span>
&nbsp;
<span style="color: #a61390;">@protocol</span> RBCoverFlowDelegate
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>numberOfItems;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>coverImageForIndex<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>index;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIImage<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>placeholderImage;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>coverHasChangedToIndex<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>index;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>clickOnCoverWithIndex<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>index;
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@interface</span> RBCoverFlowView <span style="color: #002200;">:</span> UIView <span style="color: #002200;">&#123;</span>
	CGPoint _startTouchPosition;
	<span style="color: #a61390;">float</span> _centerPosition;
	<span style="color: #a61390;">float</span> _sidePosition;
	CATransform3D _leftTransform;
	CATransform3D _rightTransform;
&nbsp;
	CALayer<span style="color: #002200;">*</span> _contentLayer;
&nbsp;
	<span style="color: #a61390;">id</span> _delegate;
	<span style="color: #a61390;">int</span> _itemCount;
&nbsp;
	CGImageRef _placeholderImageRef;
	UIImage<span style="color: #002200;">*</span> _placeholderImage;
	CGImageRef _maskedPlaceholderImageRef;
&nbsp;
	CGSize _imageSize;
	CGFloat _imageScaleX;
	CGFloat _imageScaleY;
&nbsp;
	<span style="color: #a61390;">float</span> _rowScaleFactor;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #11740a; font-style: italic;">// Start the cover flow</span>
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>start<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>delegate;
&nbsp;
<span style="color: #a61390;">@end</span></pre></div></div>

<p>Der Cover Flow besteht zunächst aus einem &#8220;Hauptview&#8221;, der von UIView abgeleitet ist und in dem die Covers dargestellt werden. Dieser ist zudem für das Verarbeiten der Touches und der gesamten Animation zuständig.</p>
<p>Die Covers selber bestehen aus einzelnen Layern, bzw. genau drei Layern pro Cover. Der Layer mit dem Bild selber, ein Layer, der die Spiegelung (Reflection) darstellt und ein Rahmen-Layer, der das ganze Cover umschliesst.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>CALayer <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>addCoverLayer<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>index <span style="color: #002200;">&#123;</span>
	CALayer<span style="color: #002200;">*</span> containerLayer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>CALayer layer<span style="color: #002200;">&#93;</span>;
	containerLayer.name <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%d&quot;</span>, index<span style="color: #002200;">&#93;</span>;
	containerLayer.frame <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span>0.0f, 0.0f, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageWidth<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span>, 1.5f <span style="color: #002200;">*</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageHeight<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
	containerLayer.contentsGravity <span style="color: #002200;">=</span> kCAGravityResize;
&nbsp;
	CALayer<span style="color: #002200;">*</span> holderLayer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>CALayer layer<span style="color: #002200;">&#93;</span>;
	holderLayer.name <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Holder_%d&quot;</span>, index<span style="color: #002200;">&#93;</span>;
	holderLayer.frame <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span>0.0f, 0.0f, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageWidth<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span>, <span style="color: #2400d9;">1.5</span> <span style="color: #002200;">*</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageHeight<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
	holderLayer.contentsGravity <span style="color: #002200;">=</span> kCAGravityResize;
&nbsp;
	CALayer<span style="color: #002200;">*</span> imageLayer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>CALayer layer<span style="color: #002200;">&#93;</span>;
	imageLayer.name <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Image_%d&quot;</span>, index<span style="color: #002200;">&#93;</span>;
	imageLayer.contents <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>_placeholderImageRef;
	imageLayer.frame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self imageRect<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGImageRef<span style="color: #002200;">&#41;</span>imageLayer.contents<span style="color: #002200;">&#93;</span>;
	imageLayer.contentsGravity <span style="color: #002200;">=</span> kCAGravityResizeAspectFill;
	imageLayer.masksToBounds <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;
&nbsp;
	CALayer<span style="color: #002200;">*</span> reflectionLayer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>CALayer layer<span style="color: #002200;">&#93;</span>;
	reflectionLayer.name <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #400080;">NSString</span> stringWithFormat<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Reflection_%d&quot;</span>, index<span style="color: #002200;">&#93;</span>;
	reflectionLayer.contents <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #002200;">&#41;</span>_maskedPlaceholderImageRef;
	CGRect frame <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>self imageRect<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CGImageRef<span style="color: #002200;">&#41;</span>reflectionLayer.contents<span style="color: #002200;">&#93;</span>;
	frame.origin.y <span style="color: #002200;">=</span> imageLayer.frame.size.height <span style="color: #002200;">+</span> <span style="color: #2400d9;">2</span>;
	reflectionLayer.frame <span style="color: #002200;">=</span> frame;
	reflectionLayer.contentsGravity <span style="color: #002200;">=</span> kCAGravityResize;
	reflectionLayer.masksToBounds <span style="color: #002200;">=</span> <span style="color: #a61390;">YES</span>;
	reflectionLayer.transform <span style="color: #002200;">=</span> CATransform3DMakeScale<span style="color: #002200;">&#40;</span>1.0f, <span style="color: #002200;">-</span>1.0f, 1.0f<span style="color: #002200;">&#41;</span>;
	reflectionLayer.opacity <span style="color: #002200;">=</span> <span style="color: #2400d9;">0.6</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>containerLayer setValue<span style="color: #002200;">:</span>imageLayer forKey<span style="color: #002200;">:</span>kImageLayerKey<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>containerLayer setValue<span style="color: #002200;">:</span>reflectionLayer forKey<span style="color: #002200;">:</span>kImageReflectionKey<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>containerLayer setValue<span style="color: #002200;">:</span>holderLayer forKey<span style="color: #002200;">:</span>kImageHolderKey<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #002200;">&#91;</span>holderLayer addSublayer<span style="color: #002200;">:</span>imageLayer<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>holderLayer addSublayer<span style="color: #002200;">:</span>reflectionLayer<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#91;</span>containerLayer addSublayer<span style="color: #002200;">:</span>holderLayer<span style="color: #002200;">&#93;</span>;
&nbsp;
	<span style="color: #a61390;">return</span> containerLayer;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Sind die Layer erstellt worden, müssen die einzelnen Cover nun entsprechend positioniert werden, damit das Aussehen dem Cover Flow der iPod App entspricht. Dies erreicht man, in dem man jeden einzelnen Layer im Raum positioniert, skaliert und leicht dreht.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span>layoutSublayer<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span>CALayer<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>rootLayer number<span style="color: #002200;">:</span><span style="color: #002200;">&#40;</span><span style="color: #a61390;">int</span><span style="color: #002200;">&#41;</span>number <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">int</span> selectedIndex <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>_contentLayer valueForKey<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;selectedIndex&quot;</span><span style="color: #002200;">&#93;</span> integerValue<span style="color: #002200;">&#93;</span>;
&nbsp;
	rootLayer.frame <span style="color: #002200;">=</span> CGRectMake<span style="color: #002200;">&#40;</span>0.0f, 0.0f, <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageWidth<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span>, 1.5f <span style="color: #002200;">*</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self maxAvalibleImageHeight<span style="color: #002200;">&#93;</span> floatValue<span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	CATransform3D layerTransform <span style="color: #002200;">=</span> CATransform3DIdentity;
	layerTransform.m34 <span style="color: #002200;">=</span> 1.0f <span style="color: #002200;">/</span> _sidePosition;
&nbsp;
	CALayer<span style="color: #002200;">*</span> holder <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span>rootLayer valueForKey<span style="color: #002200;">:</span>kImageHolderKey<span style="color: #002200;">&#93;</span>;
&nbsp;
	CGPoint pos <span style="color: #002200;">=</span> CGPointMake<span style="color: #002200;">&#40;</span>CGRectGetMidX<span style="color: #002200;">&#40;</span>_contentLayer.bounds<span style="color: #002200;">&#41;</span>, CGRectGetMidY<span style="color: #002200;">&#40;</span>_contentLayer.bounds<span style="color: #002200;">&#41;</span><span style="color: #002200;">&#41;</span>;
&nbsp;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>number <span style="color: #002200;">&amp;</span>lt; selectedIndex<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		pos.x <span style="color: #002200;">-=</span> <span style="color: #002200;">&#40;</span>selectedIndex <span style="color: #002200;">-</span> number<span style="color: #002200;">&#41;</span> <span style="color: #002200;">*</span> _imageSize.width <span style="color: #002200;">*</span> _rowScaleFactor;
		holder.transform <span style="color: #002200;">=</span> _leftTransform;
		holder.zPosition <span style="color: #002200;">=</span> _sidePosition;
		rootLayer.zPosition <span style="color: #002200;">=</span> _sidePosition <span style="color: #002200;">-</span> 0.1f <span style="color: #002200;">*</span> <span style="color: #002200;">&#40;</span>selectedIndex <span style="color: #002200;">-</span> number<span style="color: #002200;">&#41;</span>;
		rootLayer.sublayerTransform <span style="color: #002200;">=</span> layerTransform;
	<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span>number <span style="color: #002200;">&amp;</span>gt; selectedIndex<span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		pos.x <span style="color: #002200;">+=</span> <span style="color: #002200;">&#40;</span>number <span style="color: #002200;">-</span> selectedIndex<span style="color: #002200;">&#41;</span> <span style="color: #002200;">*</span> _imageSize.width <span style="color: #002200;">*</span> _rowScaleFactor;
		holder.transform <span style="color: #002200;">=</span> _rightTransform;
		holder.zPosition <span style="color: #002200;">=</span> _sidePosition;
		rootLayer.zPosition <span style="color: #002200;">=</span> _sidePosition <span style="color: #002200;">-</span> 0.1f <span style="color: #002200;">*</span> <span style="color: #002200;">&#40;</span>number <span style="color: #002200;">-</span> selectedIndex<span style="color: #002200;">&#41;</span>;
		rootLayer.sublayerTransform <span style="color: #002200;">=</span> layerTransform;
	<span style="color: #002200;">&#125;</span> <span style="color: #a61390;">else</span> <span style="color: #002200;">&#123;</span>
		pos.x <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>self.bounds.size.width <span style="color: #002200;">-</span> _imageSize.width<span style="color: #002200;">&#41;</span> <span style="color: #002200;">/</span> <span style="color: #2400d9;">2</span>;
		holder.transform <span style="color: #002200;">=</span> CATransform3DIdentity;
		holder.zPosition <span style="color: #002200;">=</span> _centerPosition;
		holder.filters <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
		rootLayer.zPosition <span style="color: #002200;">=</span> _centerPosition;
		rootLayer.sublayerTransform <span style="color: #002200;">=</span> CATransform3DIdentity;
	<span style="color: #002200;">&#125;</span>
&nbsp;
	rootLayer.position <span style="color: #002200;">=</span> pos;
<span style="color: #002200;">&#125;</span></pre></div></div>

<p>Die Animation ist in dem Code (Hier sind die kompletten <a href="http://www.rogerboesch.com/tutorials/CoverFlowSource.zip">Source Files</a>) bewusst recht einfach gehalten und unterstützt keine sogenannten Heartbeat Animationen, d.h. Animationen die sogleich beginnen, wenn der Finger aufgesetzt wird. Im käuflichen und auf OpenGL basierten Code ist dies selbstverständlich vorhanden und insbesondere das Laden und Aufbauen der Bilder noch stark optimiert. Aber als Einstieg und fürs bessere Verständnis hoffe ich, dass der Beispielcode hier erstmal weiterhilft. Wer mehr darüber erfahren möchte, dem möchte ich nochmals unsere <a href="http://www.rogerboesch.com/workshops/">Workshops</a> ans Herz legen, in denen wir wesentlich tiefer in die Materie einsteigen können. Also, viel Spass beim Cover Flow programmieren und nicht vergessen, auf mein Blog zu verlinken wenn Ihr die erste iApp mit Cover Flow in den Appstore bringt <img src='http://www.rogerboesch.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><em>Anfangs basierte dieser Code übrigens auf einem Beispiel Code von <a title='Original Link: http://bill.dudney.net/roller/objc/'  href="http://www.rogerboesch.com/?1haoVHxh">Bill Dudney</a>, der damals einen Artikel über die Programmierung eines Cover Flow unter MacOSX veröffenlichte und auch ein sehr gut geschriebenes Buch zum Thema Core Animation geschrieben hat.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rogerboesch.com/2009/08/16/coverflow-programmieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
