Hice un pequeño ejemplo de como hacer zoom de una imagen con ayuda de UIScrollView, se hace pinch con dos dedos para hace zoom in o zoom out, después lo actualizo para hacer zoom con doble tap, y como colocar puntos y que se mantengan en el lugar correcto cuando se haga zoom.
por el momento dejo un pequeño video de como esta funcionando actualmente.
pueden descargar el proyecto de github ImageZoom
Hace tiempo escribi un post de como hacer que UIImageView y UIButton hicieran una animación de rotación, en dicha función requería el tiempo en que iba a durar la vuelta y la dirección. ha estas categorías le he añadido dos funciones que detallare acontinuación.
En un proyecto necesitaba que un boton iniciara a rotar y que siguiera rotando hasta que una NSRequest terminara de hacer la petición, en CABasicAnimation tenemos un opción en la cual le podemos decir cuantas veces queremos que se repita la animación y en esta caso podemos poner la constante INFINITY y de este modo tenemos el elemento rotando infinitamente, ahora solo falta como decirle que deje de hacerlo, y aun que es facil eliminar una animación tenemos un problema y es que tenemos un efecto nada bueno, por que esta girando el elemento, eleminamos la animación y el elemento regresa a su posición original pero lo hace depronto, tenemos un efecto que se ve mal, como se logra ver en el siguiente video.
Yo lo que quería es que cuando le digamos que termine la animación, esta no importando donde se encuentre el elemento, termine el ciclo para que el elemento regrese a su posición original pero no de golpe, si no que siga animado hasta el final, para esto lo que hice hacer lo siguiente, terminar la actual animación, conocer el punto en que el elemento se encuentra y el tiempo restante para que el ciclo se complete e iniciar una nueva animación con estos datos, con esto logramos una animación correcta de que el elemento finalice el ciclo sin regresar al punto original de golpe. como lo pueden ver en el siguiente video.
como se puede ver no importa en que punto de la animación le digamos que pare, esta siempre termina el ciclo y lo hace fluido, no se nota cuando terminamos la animación e iniciamos la siguiente. pueden descargar las categorías de UIImageView y UIButton de mi github.
para usar las funciones lo hacemos de la siguiente forma:
solo unas cuestiones más, al inicio no sabia si hacer una categoría del objeto o una subclase, en varios post acerca de subclases para UIButton dicen que no es lo más recomedable por que se pierden algunas asociaciones y aun que en la documentación de apple no dice esto, se han reportado que algunas funcionalidades se pierden, por lo que la opción era hacerlo por medio de categorías, el problema que tenia usando categorías es que yo necesitaba tener agregar unas variables para la función de parar la rotación, se podia solucionar pasandole estas variables como parametros pero no me gustaba mucho que si ya colocaste esos parametros para iniciar la rotación tambien tuvieras que volver a ponerlos para finalizar la rotación, después de una una busqueda encontre que se puede hacer uso de funciones para asociar referencias (pueden ver la documentación aqui) esto nos permite asociar dos objectos, lo que hice fue cuando iniciamos la rotación haga las asociaciones y cuando terminamos la rotación recupero estos valores, con esto logre que la función para terminar la rotación no se tuviera que pasar parametros.
bueno espero que a alguien más le sirva
Blend (Taken with instagram)
En iOS 5 una de la novedades es que tenemos UIAppearance Protocol Reference el cual nos permite personalizar clases de iOS, uno de las clases que podemos personalizar es el UINavigationBar, en versiones anteriores de iOS lo más común era sobre escribir el metodo “drawRect” , pero desde iOS 5 este metodo ya se llama, por eso Apple implemento UIAppearance Protocol Reference, bueno ahora veremos como podemos poner una imagen para el background de una UINavigationBar, ademas no queremos los clasicos botones de el NavigationBar, pondremos unos personalizados. para que queden como la siguiente imagen

En el delegate de nuestra app en la función “didFinishLaunchingWithOptions” antes del return YES; pondremos este código
Lo que hace este código es poner las imagenes nav44 y nav32 para los modos Portrait y Landscape, en mi caso las imagenes son de 44x44 y 32x32, iOS repetira el patron de la imagen, después pondremos las características para el texto de la barra (color, color de la sombra, atributos de la sombra y la el tipo de fuente ), con esto lograremos el siguiente resultado


Ahora en nuestra app no queremos los clasicos botones de la Navigation Bar

En este ejemplo queremos tener otro tipo de boton para regresar y del lado derecho queremos tener 3 botones. en el metodo “viewDidLoad” de nuestra controlador ponemos el siguiente código
En la primera parte del código creamos un UIButton normal, le añadimos una imagen y la función que sera llamada cuando se presione el botón, despues creamos un “UIBarButtonItem” con el metodo “initWithCustomView” y como parametro el botón que creamos, despues se lo colocamos al “navigationItem” para el lado izquierdo.
En las siguientes lineas creamos 3 botones, con las posiciones en que debe aparecer, creamos un “UIView” y a este le añadimos los botones y finalmente creamos otro “UIBarButtonItem” y le pasamos el “UIView” y se lo colocamos al “navigationItem” del lado derecho, y finalmente ya tenemos nuestra UINavigationBar personalizada, a los botones del lado derecho le falta agregar las funciones que se llamaran cuando sean presionados.
Bueno en días pasados trabajaba en un app de iOS y se me ocurrió que seria interesante animar el boton de recargar, después de una breve búsqueda encontre este post Rotate an Image or Button with Animation – Part 2 con lo que logre esta animación
La cuestión es que tenemos que agregar la función a nuestros archivos y me di a la tarea de agregar el metodo a los elementos de esta forma solo es necesario agregar el .h a los headers, tambien es necesario agregar el framework “quartzcore.framework” a tu proyecto y llamar a la función de la siguiente forma
el primer parametro es el tiempo que va a tardar en dar el ciclo completo en segundos, el segundo parametro es la dirección de movimiento.
Pueden bajar los archivos de este repositorio de github kit-iOS
Si vemos con detenimiento nuestro dispositivo con iOS observaremos que tenemos app con un efecto de brillo.

En nuestro proyecto podemos controlar si queremos que nuestra app tenga este efecto. por default nuestra app tiene este efecto. si nosotros no queremos que tenga este efecto vamos al archivo info.plist de nuestro proyecto y buscamos o agregamos la siguiente key “Icon already includes gloss effects” del tipo Boolean y el valor YES.
Con glossy effect

Sin glossy effect

Death Cab for Cutie - I Will Possess Your Heart (Album Version video).
Que buena version