<?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>Pablo Formoso &#187; iPhone</title>
	<atom:link href="http://blog.pabloformoso.com/tag/iphone/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.pabloformoso.com</link>
	<description>Ruby, Rails, iOS y otros desbarajustes mentales.</description>
	<lastBuildDate>Thu, 15 Sep 2011 22:39:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Salto a XCode 4</title>
		<link>http://blog.pabloformoso.com/2011/03/salto-a-xcode-4/</link>
		<comments>http://blog.pabloformoso.com/2011/03/salto-a-xcode-4/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 21:30:29 +0000</pubDate>
		<dc:creator>Pablo Formoso Estrada</dc:creator>
				<category><![CDATA[Personales]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[xcode]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=218</guid>
		<description><![CDATA[Para todos aquellos que os metáis con XCode4 y usabais el 3 os recomiendo, y mucho, leer la guía de transición. XCode 4 Transition Guide Yo no lo hice, y después de echarle un ojo ya tengo ubicadas todas las cosas y los nuevos shortcuts. Tambien podéis echarle un ojo a esta serie de 6 Screencasts [...]]]></description>
			<content:encoded><![CDATA[<p>Para todos aquellos que os metáis con XCode4 y usabais el 3 os recomiendo, y mucho, leer la guía de transición.</p>
<p><a title="XCode4 Transition Guide" href="http://adcdownload.apple.com/Developer_Tools/xcode_4_and_ios_sdk_4.3__final/xcode4transitionguide.pdf" target="_blank">XCode 4 Transition Guide</a></p>
<p>Yo no lo hice, y después de echarle un ojo ya tengo ubicadas todas las cosas y los nuevos shortcuts. Tambien podéis echarle un ojo a esta serie de 6 Screencasts gratuitos ;) siempre es mejor que leer.</p>
<p><a title="XCode4 Screencasts" href="http://t.co/R9qedZ0" target="_blank">XCode4 Screencasts</a></p>
<p>Los Screencast los vi en mi TL sacados de @clarkware.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2011/03/salto-a-xcode-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploying iOS beta app en forma AdHoc</title>
		<link>http://blog.pabloformoso.com/2011/02/deploying-ios-beta-app-en-forma-adhoc/</link>
		<comments>http://blog.pabloformoso.com/2011/02/deploying-ios-beta-app-en-forma-adhoc/#comments</comments>
		<pubDate>Fri, 18 Feb 2011 20:10:01 +0000</pubDate>
		<dc:creator>Pablo Formoso Estrada</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=204</guid>
		<description><![CDATA[Desde que empezamos el desarrollo de aplicaciones en iOS hace algo más de año y medio, siempre que teníamos que enviar una beta de alguna aplicación se convertía en una tortura por varios motivos: el cliente cambio de iPhone/iPad y hay que renovar el MobileProvision y que se repita el proceso de iTunes posibles conflictos [...]]]></description>
			<content:encoded><![CDATA[<p>Desde que empezamos el desarrollo de aplicaciones en iOS hace algo más de año y medio, siempre que teníamos que enviar una beta de alguna aplicación se convertía en una tortura por varios motivos:</p>
<ul>
<li>el cliente cambio de iPhone/iPad y hay que renovar el MobileProvision y que se repita el proceso de iTunes</li>
<li>posibles conflictos con versiones antiguas de anteriores betas</li>
<li>Windows 7&#8230;. Tiene el buen hacer de bloquear los .app y dejarlos inútiles</li>
<li>algunas apps se hacen demasiado pesadas para pasarlas por mail</li>
</ul>
<p>Por eso buscamos en Sostwhisper como agilizar este proceso. Sabíamos que existe el modelo de distribución AdHoc usando el certificado de Distribución, fue entonces cuando buscando dimos con esta entrada [] que habla del iOS BetaBuilder, la creación de .ipas en el XCode con el Organizer y la distribución e instalación directa a través de la web.</p>
<p>Vamos a ver paso a paso como hacerlo:</p>
<h4>1. Creación del certificado de distribución AdHoc</h4>
<ol>
<li>Entramos en el Developers Portal de iOS</li>
<li>Vamos al Provisioning Portal &gt; Provisioning</li>
<li>Seleccionamos la pestaña Distribution</li>
<li>&#8220;New profile&#8221; con la opción de método de distribución en AdHoc, ponemos el nombre del fichero de provisión etc&#8230;</li>
<li>Nos descargamos el fichero de provisión AdHoc</li>
</ol>
<h4><a href="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.07.13.jpg"><img class="aligncenter size-medium wp-image-205" title="AdHoc Configuration" src="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.07.13-300x117.jpg" alt="iOS AdHoc Configuration" width="300" height="117" /></a></h4>
<h4>2. Preparamos el XCode</h4>
<p>Ahora es momento de ponerse un poco con el XCode y configurarlo para tener nuestro fichero *.ipa de la aplicación lo más rápido posible. Lo primero que debemos hacer es ir a las propiedades del proyecto y duplicamos la configuración de Release y le ponemos el nombre AdHoc.</p>
<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.16.46.jpg"><img class="aligncenter size-medium wp-image-207" title="XCode AdHoc Profile" src="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.16.46-211x300.jpg" alt="XCode AdHoc Profile" width="211" height="300" /></a></p>
<p>Ahora es el momento de agregar el fichero de provisión al Organizer (crtl+cmd+O). Al ser de provisión llega con arrastrarlo a la parte de &#8220;Provisioning Profiles&#8221;.</p>
<p>Ahora volvemos a la configuración del proyecto y en la pestaña de Build seleccionamos para &#8220;Code Signing Identity&#8221; el nuevo perfil que acabamos de agregar.</p>
<h4>3. Limpiar todo y crear</h4>
<p>Con todo esto listo vamos a limpiar todo lo compilado para no tener problemas y que se genere todo de 0. Para ello &#8220;Build &gt; Clean All Targets&#8221;. Aceptamos y pasamos a la creación. Vamos a &#8220;Build &gt; Build and Archive&#8221;. La primera vez os saldrá un venta similar a esta, en sucesivas releases que vayáis sacando habrá que llegar desde el Origanizer.</p>
<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.25.40.jpg"><img class="aligncenter size-medium wp-image-208" title="Organizer for AdHoc " src="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.25.40-300x75.jpg" alt="Organizer for AdHoc " width="300" height="75" /></a>En esta ventana pulsamos &#8220;Share&#8221; y después guardamos en disco el *.ipa</p>
<h4>4. El momento de la estrella iOS Beta Builder</h4>
<p>Nos descargamos el <a title="iOS Beta Builder" href="http://www.hanchorllc.com/category/ios-betabuilder/" target="_blank">BetaBuilder</a> (iBB, jeje que cuco). El programilla tiene esta pinta:</p>
<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.30.57.jpg"><img class="aligncenter size-full wp-image-209" title="IOS Beta Builder" src="http://blog.pabloformoso.com/wp-content/uploads/2011/02/Captura-de-pantalla-2011-02-18-a-las-21.30.57.jpg" alt="IOS Beta Builder" width="294" height="501" /></a>Como podéis ver la interfaz es bastante explicativa :P Poner el .ipa nombre de la App y la dirección donde se va a alojar todo. El programa nos generará un index.html con los ficheros necesarios para meter en dicha carpeta del server. Es recomendable repasar el index.html y el manifiesto que crea para comprobar que los enlaces están correctos y todo estará listo.</p>
<p>Un servicio con el que pega muy bien es con DropBox y la carpeta Public, así podéis incluso automatizarlo bastante.</p>
<h4>5. Nueva versión</h4>
<p>Cuando queramos sacar una nueva versión se resume a lo siguiente:</p>
<ol>
<li>En el XCode seleccionamos el perfil AdHoc</li>
<li>Hacemos un Clean All Targets</li>
<li>Build &gt; Build and Archive</li>
<li>Vamos al Organizer y en la parte izquierda abajo del todo tendremos ya nuestra app</li>
<li>Presionamos sobre Share con la última versión del listado seleccionada</li>
<li>Guardamos en disco sustituyendo la anterior</li>
</ol>
<p>Sencillo no&#8230; la verdad es que a nosotros en <a title="Softwhisper SL" href="http://www.softwhisper.es" target="_blank">SoftWhisper</a> nos a venido de perlas este sistema para trabajar con los clientes :) Claro está que no nos quedaremos aquí, estamos buscando la posibilidad con el Automator o con algún script usando Thor o similares para automatizar todo mucho más. Al final se resume a crear un html y un manifiesto. El proceso complicado es el de sacar el *.ipa del XCode de forma automática.</p>
<p>Espero que os sea de ayuda ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2011/02/deploying-ios-beta-app-en-forma-adhoc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primer día con el iPad</title>
		<link>http://blog.pabloformoso.com/2010/05/primer-dia-con-el-ipad/</link>
		<comments>http://blog.pabloformoso.com/2010/05/primer-dia-con-el-ipad/#comments</comments>
		<pubDate>Wed, 05 May 2010 08:38:36 +0000</pubDate>
		<dc:creator>Pablo Formoso Estrada</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[Personales]]></category>
		<category><![CDATA[AppStore]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=139</guid>
		<description><![CDATA[La semana pasada un cliente me encargo un desarrollo para el iPad, por lo que ya tenía la excusa perfecta para no esperar a que saliese en España :P. Como me imaginaba es un dispositivo del que no solo tendré uno, por lo que me compre el iPad Wifi de 16G, que gracias a MyWi [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-140" style="margin-left: 10px; margin-right: 10px;" title="iPadBox" src="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0448-225x300.jpg" alt="IPad en la caja" width="225" height="300" />La semana pasada un cliente me encargo un desarrollo para el iPad, por lo que ya tenía la excusa perfecta para no esperar a que saliese en España :P. Como me imaginaba es un dispositivo del que no solo tendré uno, por lo que me compre el iPad Wifi de 16G, que gracias a MyWi se puede usar un poco de 3G de vez en cuando. Lo compre a través de DontRetail y en 72 horas por FedEx estaba en mi casa.</p>
<p>La caja trae lo mínimo, las pegatinas, cable usb como el del iPod, adaptador de corriente y unas instrucciones ridículas, no le hace falta mucho más. Si que es cierto que alguna gente echa de menos el trapito para limpiar la pantalla. Por mi experiencia con el iPhone una servilleta de papel lo deja igual de perfecto, es una pantalla muy sencilla de limpiar y que no retiene nada de suciedad, así que me da igual el trozo de tela.</p>
<p><strong>Primeras impresiones</strong></p>
<p>La primera vez que lo cogí con las manos lo note mucho menos pesado de la impresión que daba la caja, cosa que me gusto mucho para empezar. Acto seguido botón de ON y &#8230;. un ratito de iTunes para registrarlo y sincronizarlo. El iPad nuevo arranca directamente en modo DFU (no se si es DFU pero la pantalla es la misma) y eso es algo que me mosquea un poco. Me puse en el caso de que voy a Madrid y por un casual no llevo el portátil ni nada, para poder disfrutar del iPad tendría que mendigar un poco para que algún amigote de la tierra me dejase enchufarme a con su iTunes para activar el cacharro. Fallo.</p>
<p><strong>Registro y iTunesUSA</strong></p>
<p>Pero bueno tras unos pocos pasos (digo pocos por que leí que alguna gente se tiró 19, yo en 5 lo tenía resuelto) empezó el segundo gran problema, de momento, si estás fuera de USA o no tienes una cuenta de iTunes USA; no puedes acceder a la AppStore y el iPad viene sin el iBook instalado (WTF!! su app estrella y no viene con ella de serie&#8230;)</p>
<p>Tras unos cuantos rodeos, buscar direcciones validas en google maps y un par de pijadas más conseguí crear la cuenta de iTunes USA y llegamos a lo bueno :)</p>
<p><img class="aligncenter size-medium wp-image-142" title="iPad " src="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0451-300x225.jpg" alt="iPad" width="300" height="225" /></p>
<p><strong>Primeros usos</strong></p>
<p>Ya con la cuenta de iTunesUSA y todo listo llegaba el momento de empezar a hacer sufrir al iPad. Mientras hacia todo el tema de las cuentas ya me empezaba a sorprender la velocidad del pequeñin, navegando, en las aplicaciones, el correo, las fotos, etc&#8230; vamos que parece que las baterías llevan RedBull.</p>
<p>Lo único que pensé que haría mejor es el smooth de las aplicaciones del iPhone en x2, pero bueno poco a poco se irán sustituyendo todas.</p>
<p>Comentar como dato que hice una pequeña prueba para ver cuanto tarda el Safari del iPhone3G en abrir la web de marca.com y otra en el iPad y la diferencia de velocidad es mucha. Lo mismo ocurre con la aplicación de correo.</p>
<p><strong>Aplicaciones</strong></p>
<p>Iba tocando el momento de empezar la descarga descontrolada de aplicaciones gratuitas de la AppStore. The Weather Channel, ABC Player, USA Today, MixxMuse, GodFinger, Twitterific, GrooveMaker, Adobe Ideas, Epicurious etc, etc etc&#8230;</p>
<p>Menos los juegos cada cual tiene una interfaz más sobresaliente, me sorprendió mucho Epicurious (recetario de cocina) y Twitterific necesita una vuelta de hoja pero gratis de momento es lo que hay.</p>
<p>La de Adobe Ideas merece la pena probarla, es un sketcher muy muy chulo y sencillo.</p>
<p>Una de mis preferidas en el iPhone es GrooveMaker, en este caso cambia mucho la historia, mirar:</p>
<p style="text-align: center;"><a href="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0002.jpg"><img class="size-medium wp-image-143 aligncenter" title="GrooveMaker Free" src="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0002-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>8 pistas con sus controles de volumen, mute, solo, pan, pitch, los patrones, en definitiva, todo a golpe de dedo :) cojonudo. La versión completa va a ser una de mis primeras adquisiciones :)</p>
<p><strong>El iPad como eReader</strong></p>
<p>Uno de los principales atractivos que veía en el iPad era el tema de los libros electrónicos. Ayer pase de forma muy sencilla por el iTunes los primeros libros que tenía de Pragmatic Bookshelf y aproveche un rato en cama para ver que tal se hacía la lectura. Tengo que decir que solo había usado antes un eReader de Sony, no se cual exactamente, pero el iPad gana por todas partes, no se si es un tema más gráfico o de verdad es mejor pero la experiencia fue muy buena.</p>
<p>Hay alguna gente que dice que pesa mucho para tenerlo mucho rato sostenido y leer, pero normalmente en cama puede colocarte en una postura cómoda que te permita pasar el rato sin problema. Ahora mismo estoy buscando una buena app para los pdfs y llenarlo hasta los topes.</p>
<p>Decir que un atril de libros que tenía me encaja perfectamente como dock y mi escritorio está tal que así en estos momentos.</p>
<p style="text-align: center;"><a style="text-decoration: none;" href="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0449.jpg"><img class="size-medium wp-image-141 aligncenter" title="Escritorio" src="http://blog.pabloformoso.com/wp-content/uploads/2010/05/IMG_0449-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p><strong>Mi valoración general</strong></p>
<p>No me quedo corto si digo que es el futuro, no me refiero solo al iPad, si no a los dispositivos de este calibre. Aun que mi forma de verlo es la misma que la del iPhone, habrá mucho iPad Killers pero ninguno lo va a hacer mucho daño.</p>
<p>La sencillez para hacer las cosas, la velocidad con que las hace son los puntos más fuerte del iPad, además de la cantidad de aplicaciones de mucha calidad que irán apareciendo poco a poco :P alguna desarrollada por mi seguro que también se cuela ;) </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2010/05/primer-dia-con-el-ipad/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Personalizar el componente UISwitch en el iPhone</title>
		<link>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/</link>
		<comments>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 19:33:27 +0000</pubDate>
		<dc:creator>Pablo Formoso Estrada</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[guide]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=122</guid>
		<description><![CDATA[En uno de los proyectos en los que estoy trabajando ahora me tocó meterle mano a el componente UISwitch de la SDK del iPhone. Según la documentación oficial de Apple este componente no es customizable, pero nada más lejos de la realidad. Por suerte en uno de los libros que tengo de desarrollo para el [...]]]></description>
			<content:encoded><![CDATA[<p>En uno de los proyectos en los que estoy trabajando ahora me tocó meterle mano a el componente UISwitch de la SDK del iPhone. Según la documentación oficial de Apple este componente no es customizable, pero nada más lejos de la realidad. Por suerte en uno de los libros que tengo de desarrollo para el iPhone (el Developers Cookbook de Erica Sadun) viene una primera aproximación de como crear la clase UICustomSwitch con los métodos necesarios para modificar las dos etiquetas.</p>
<p>En una primera lectura en libro pone tanto las partes de implementación como las de definición de clase en el main.h, cosa que no me gusta mucho. Además esto nos obliga a picar todo el código y nos capa la posibilidad de usar la clase dentro de otras vistas.</p>
<p>Así que dejaré mi aportación y estructuración del UICustomSwitch para poder usarlo en el InterfaceBuilder también.</p>
<p>Como todo me gusta tener el código siempre bien ordenado, así que siempre tengo mi grupo de Categories donde meter los objetos que extienden a otros:</p>
<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2010/04/Captura-de-pantalla-2010-04-13-a-las-20.48.18.jpg"><img class="aligncenter size-full wp-image-126" title="Captura de pantalla 2010-04-13 a las 20.48.18" src="http://blog.pabloformoso.com/wp-content/uploads/2010/04/Captura-de-pantalla-2010-04-13-a-las-20.48.18.jpg" alt="XCode Groups" width="189" height="102" /></a>Para que quede un poco más claro el código la estructura interna de objetos de un UISwitch es la siguiente:</p>
<ul>
<li>UISwitch
<ul>
<li>UISwitchSlider
<ul>
<li>UIImageView</li>
<li>UIImageView</li>
<li>UIView
<ul>
<li>UILabel</li>
<li>UILabel</li>
</ul>
</li>
<li>UIImageView</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Claramente tenemos que atacar en nuestro UICustomSwitch a los UILabels, pero con mucho cuidado. Por alguna extraña razón el SDK se comporta de forma diferente dependiendo del idioma en el que tengas configurado el teléfono. Mientras tenía este post con los borradores, cargue la aplicación por primera vez en el teléfono donde para mi sorpresa fallaba al arrancar. Vamos a ver el código y después explico la jugada.</p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p122code3'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1223"><td class="code" id="p122code3"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import </span>
&nbsp;
<span style="color: #a61390;">@interface</span> UICustomSwitch <span style="color: #002200;">:</span> UISwitch
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setLeftLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setRightLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>


<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p122code4'); return false;">View Code</a> OBJC</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p1224"><td class="code" id="p122code4"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;UICustomSwitch.h&quot;</span>
&nbsp;
<span style="color: #a61390;">@interface</span> _UISwitchSlider <span style="color: #002200;">:</span> UIView
<span style="color: #a61390;">@end</span>
&nbsp;
<span style="color: #a61390;">@implementation</span> UICustomSwitch
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>_UISwitchSlider <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> slider <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self subviews<span style="color: #002200;">&#93;</span> lastObject<span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UIView <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> textHolder <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self slider<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">2</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UILabel <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> leftLabel <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self textHolder<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">0</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span>UILabel <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> rightLabel <span style="color: #002200;">&#123;</span>
	<span style="color: #a61390;">return</span> <span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self textHolder<span style="color: #002200;">&#93;</span> subviews<span style="color: #002200;">&#93;</span> objectAtIndex<span style="color: #002200;">:</span><span style="color: #2400d9;">1</span><span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setLeftLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText <span style="color: #002200;">&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> <span style="color: #002200;">*</span>currentUsersLocale <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> currentLocale<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>currentUsersLocale localeIdentifier<span style="color: #002200;">&#93;</span> isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;en_US&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self leftLabel<span style="color: #002200;">&#93;</span> setText<span style="color: #002200;">:</span>labelText<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">&#125;</span>
&nbsp;
<span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> setRightLabelText<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/"><span style="color: #400080;">NSString</span></a> <span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> labelText <span style="color: #002200;">&#123;</span>
	<a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> <span style="color: #002200;">*</span>currentUsersLocale <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span><a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSLocale_Class/"><span style="color: #400080;">NSLocale</span></a> currentLocale<span style="color: #002200;">&#93;</span>;
	<span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span><span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>currentUsersLocale localeIdentifier<span style="color: #002200;">&#93;</span> isEqualToString<span style="color: #002200;">:</span><span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;en_US&quot;</span><span style="color: #002200;">&#93;</span><span style="color: #002200;">&#41;</span> <span style="color: #002200;">&#123;</span>
		<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#91;</span>self rightLabel<span style="color: #002200;">&#93;</span> setText<span style="color: #002200;">:</span>labelText<span style="color: #002200;">&#93;</span>;
	<span style="color: #002200;">&#125;</span>
<span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Como podéis ver en el código nos sacamos la clase _UISwitchSlider (que no viene documentada en la SDK para entrar en las tripas del Switch. El problema que os comentaba antes es que las subvistas que nos devuelve el slider, al cambiar de idioma (que no sea en_US), devuelve un UIImageView de los primeros. Por lo que habría que afinar un poco esta clase para que reciba texto e imagen y use una u otra dependiendo de la situación.</p>
<p>Agregando estas clases al proyecto podréis usar el componente también en el IB sin ningún problema. Espero os sirva de ayuda.</p>
<pre style="text-align: right;">Fuentes: "The iPhone Developer's Cookbook de Erica Sadun"</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2010/04/personalizar-el-componente-uiswitch-en-el-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tap vs Click: Interfaces de usuario táctiles</title>
		<link>http://blog.pabloformoso.com/2010/03/tap-vs-click-interfaces-de-usuario-tactiles/</link>
		<comments>http://blog.pabloformoso.com/2010/03/tap-vs-click-interfaces-de-usuario-tactiles/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 16:26:34 +0000</pubDate>
		<dc:creator>Pablo Formoso Estrada</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[click]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[tap]]></category>

		<guid isPermaLink="false">http://blog.pabloformoso.com/?p=106</guid>
		<description><![CDATA[Después de varios experimentos con el iPhone de haber terminado la primera aplicación para un cliente (Vandal.net) me he dado cuenta de algunos aspectos en el diseño de las interfaces de usuarios en dispositivos táctiles (no solo iPhone para que no me tachen de fanboy xDD). A lo largo de estos dos últimos meses me [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.pabloformoso.com/wp-content/uploads/2010/03/normal_lg-km900-arena-ui-details-2.jpg"><img class="alignleft size-medium wp-image-108" style="margin-left: 10px; margin-right: 10px;" title="tap vs click" src="http://blog.pabloformoso.com/wp-content/uploads/2010/03/normal_lg-km900-arena-ui-details-2-247x300.jpg" alt="ui táctiles" width="247" height="300" /></a>Después de varios experimentos con el iPhone de haber terminado la primera aplicación para un cliente (Vandal.net) me he dado cuenta de algunos aspectos en el diseño de las interfaces de usuarios en dispositivos táctiles (no solo iPhone para que no me tachen de fanboy xDD). A lo largo de estos dos últimos meses me he fijo mucho en el tema del desarrollo de la interfaz de usuario, no en que tenga un gradiente perfecto o que sea &#8220;súper cool&#8221;; más desde el punto de vista de número de tap para llegar a tal sitio o hacer tal cosa, que espera que haga el usuario al poner la el dedo encima de cualquier parte de la pantalla y aspectos similares. Mi primera intención era reducir al mínimo el número de <strong>taps </strong>a en la navegación por la aplicación, pero ahora veremos como el <strong>precio de un tap es más barato que el de un click </strong>y podemos invertir nuestros esfuerzos en otras cosas.</p>
<p>Una de las primeras cosas que aprendí fue el <strong><em>el precio de un tap</em><span style="font-weight: normal;">, que aun que parezca absurdo cabe reflexionar un poco sobre el proceso de aprendizaje de un usuario en una interfaz táctil frente a tener un ratón en la mano.</span></strong></p>
<p><strong><span style="font-weight: normal;">El proceso de manejo del ratón se base en tres acciones que pasan por la mente del usuario (hablamos de usuarios normales, no enfermos que medimos nuestro clicks con aplicaciones chorras :P), identificación, posicionamiento y acción. La identificación es el proceso de reconocimiento de donde queremos cliquear, el posicionamiento es el tiempo en el que localizamos nuestro puntero del ratón en la pantalla y la acción mide el tiempo de desplazamiento del ratón hasta el punto identificado para hacer el click. Si cabe este proceso se torna un poco más largo en el tiempo si el usuario no tiene mucha experiencia con el uso del ratón (que si el un click, el doble click, se pasa por la aceleración el punto, no llega e tengo que darle dos toques, hay más variables de la que los usuarios habituales pensamos).</span></strong></p>
<p>Sin embargo con la interfaces táctiles podemos resumir el proceso en dos partes, identificación y posicionamiento y acción de forma conjunta. Esto es lógico ya que el usuario identifica el botón en la pantalla y lleva su dedo exactamente a la posición que la interfaz le incita a tocar. Fruto de esto el tiempo desde la identificación hasta el desencadenamiento del evento es mucho más corto que con el ratón.</p>
<p>Vistas las dos formas a la hora de navegar está claro que usando el tiempo como unidad de tiempo <strong>un tap es mucho más barato que un click</strong> lo que hace que esa búsqueda por reducir el número de tabs sea al final un poco absurda y podamos primar más la claridad en la interfaz y mostrar diferentes vistas en la que la información que se escriba o se lea sea mucho más clara para el usuario ya que llegará a esta en menos tiempo con una UI táctil. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pabloformoso.com/2010/03/tap-vs-click-interfaces-de-usuario-tactiles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

