Desarrollo de una aplicación para iOS (iPhone/iPad): Asistente de Estadísticas de Baloncesto TITULACION: Ingeniería Técnica en Informática de Gestión Autor: Juan Blanco Sans Director: Carlos Molina Clemente 2 RESUMEN Este proyecto es una aplicación llamada Asistente de Estadísticas de Baloncesto para sistemas operativos móviles iOS (iPhone/iPad) pensada para aficionados, jugadores o entrenadores de baloncesto que quieran tener un control de las estadísticas del equipo al que pertenecen y no tengan los medios necesarios para ello. Está pensada principalmente para equipos amateurs o profesionales de categorías inferiores aunque puede usarse también para tener las estadísticas de tus equipos favoritos que juegan en ligas nacionales o internacionales. La aplicación se puede dividir en 3 partes que se relacionan entre ellas: Equipos, Jugadores y Partidos. En la parte de los Equipos es dónde gestionamos los datos de los equipos. Podemos crear equipos nuevos y consultar los datos de cada uno de los equipos creados, se hace una media aritmética de los datos con todos los partidos jugados por el equipo. En la parte de los Jugadores es dónde gestionamos los datos de los jugadores de cada equipo. Podemos crear nuevos jugadores para cada equipo, añadirles fotografías desde la cámara o la galería y consultar los datos de cada uno de los jugadores creados, se hace una media aritmética de los datos con todos los partidos jugados por cada jugador. En la parte de los Partidos es dónde gestionamos los datos de los partidos disputados o por disputar de los equipos creados. Podemos crear nuevos partidos dónde juegue cómo mínimo 1 equipo creado anteriormente y elegiremos el equipo al que hacer el seguimiento. Mientras visualizamos el partido en persona o por TV iremos modificando los diferentes datos de cada jugador durante el partido. También añadiremos una imagen con la localización de los tiros acertados y fallados de cada jugador durante el partido. Todos estos datos se podrán consultar al final del partido o en cualquier momento y se podrán compartir en las redes sociales. Se irán añadiendo los datos en las bases de datos para poder consultarlas en cualquier momento. 3 RESUM Aquest projecte és una aplicació anomenada Assistent d'Estadístiques de Bàsquet per a sistemes operatius mòbils iOS (iPhone/iPad) pensada per a aficionats, jugadors o entrenadors de bàsquet que vulguin tenir un control de les estadístiques de l'equip al que pertanyen i no tinguin els mitjans necessaris. Està pensada principalment per equips amateurs o professionals de categories inferiors encara que pot utilitzar-se també per tenir les estadístiques dels teus equips favorits que juguen en lligues nacionals o internacionals. L'aplicació es pot dividir en 3 parts que es relacionen entre elles: Equips, Jugadors i Partits. En la part dels Equips és on gestionem les dades dels equips. Podem crear equips nous i consultar les dades de cadascun dels equips creats, es fa una mitjana aritmètica de les dades amb tots els partits jugats per l'equip. En la part dels Jugadors és on gestionem les dades dels jugadors de cada equip. Podem crear nous jugadors per a cada equip, afegir fotografies des de la càmera o la galeria i consultar les dades de cadascun dels jugadors creats, es fa una mitjana aritmètica de les dades amb tots els partits jugats per cada jugador. En la part dels Partits és on gestionem les dades dels partits disputats o per disputar dels equips creats. Podem crear nous partits on jugui com a mínim 1 equip creat anteriorment i triarem l‘equip a qui farem el seguiment. Mentre visualitzem el partit en persona o per TV anirem modificant les diferents dades de cada jugador durant el partit. També afegirem una imatge amb la localització dels tirs encertats i fallats de cada jugador durant el partit. Totes aquestes dades es podran consultar al final del partit o en qualsevol moment i es podran compartir a les xarxes socials. S'aniran afegint les dades en les bases de dades per poder consultar-les en qualsevol moment. 4 SUMMARY This project is an application called Assistant Basketball Stats for iOS mobile operating systems (iPhone / iPad) meant for amateur basketball players and coaches who want to keep track of team statistics they belong and do not have the necessary means to it. It is intended primarily for amateur and professional teams at lower levels but may also be used to get the statistics of your favorite leagues playing in national or international. The application can be divided into 3 parts relate to one another : Teams , Players and Games. In the part of the Teams is where data manage teams . We can create new teams and query data from each of the teams created , it is an arithmetic mean of the data with all the games played by the team. In the part of the Players is where to manage data of players on each team. We can create new players for each team, add pictures from your camera or gallery and query data from each of the players created , it is an arithmetic mean of the data with all games played by each player. In the part of the Games is where data manage the games or play teams created. We can create new games where at least one team play how you created earlier and choose the team you follow up. While visualize the game in person or on TV we will modify the different data for each player during the match. Also add an image to the location of successful and failed shots of each player during the match. All these data will be available after the match or at any time and can be shared on social networks. We will add the data in the database for future reference at any time. 5 6 ÍNDICE RESUMEN ………………………………………………………………………..... 3 RESUM …………………………………………………………………………...... 4 SUMMARY ………………………………………………………………………… 5 ÍNDICE ……………………………………………………………………………... 7 1. INTRODUCCIÓN ………………………………………………………………. 11 1.1 Historia de los smartphones ………………………………………………………… 11 1.2 Sistemas operativos móviles ………………………………………………………... 12 1.2.1 iOS ………………………………………………………………………….. 13 1.2.2 Android ……………………………………………………………………... 14 1.2.3 Windows Phone …………………………………………………………… 15 1.2.4 BlackBerry OS ……………………………………………………………... 15 1.3 Uso de los diferentes SO móviles ………………………………………………….. 16 2. OBJETIVOS ……………………………………………………………………. 17 2.1 Objetivos principales …………………………………………………………………. 18 2.2 Objetivos secundarios ……………………………………………………………….. 18 3. ESPECIFICACIONES …………………………………………………………. 19 3.1 Descripción ……………………………………………………………………………. 19 3.2 Requisitos ……………………………………………………………………………... 19 4. DISEÑO ………………………………………………………………………… 23 4.1 Diseño de pantallas ………………………………………………………………….. 23 4.1.1 Principal …………………………………………………………………….. 24 4.1.2 Menú Equipos ……………………………………………………………… 24 4.1.3 Nuevo Equipo ……………………………………………………………… 24 4.1.4 Detalles Equipo ……………………………………………………………. 25 7 4.1.5 Menú Jugadores …………………………………………………………… 25 4.1.6 Nuevo Jugador …………………………………………………………….. 26 4.1.7 Detalles Jugador …………………………………………………………... 27 4.1.8 Editar Jugador ……………………………………………………………… 27 4.1.9 Partidos Jugados ………………………………………………………….. 28 4.1.10 Menú Partidos ……………………………………………………………. 28 4.1.11 Nuevo Partido …………………………………………………………….. 29 4.1.12 Jugar Partido (equipo local) ……………………………………………... 29 4.1.13 Jugar Partido (equipo visitante) …………………………………………. 30 4.1.14 Jugar Partido (2 equipos) ………………………………………………... 31 4.1.15 Tiro Canasta ………………………………………………………………. 31 4.1.16 Detalles Partido (equipo local o visitante) ……………………………… 31 4.1.17 Detalles Partido (los 2 equipos) ………………………………………… 32 4.2 Decisiones de diseño ………………………………………………………………… 33 5. DESARROLLO ………………………………………………………………… 35 5.1 Empezando …………………………………………………………………………… 35 5.1.1 Xcode ………………………………………………………………………. 36 5.1.2 Simulador iOS ……………………………………………………………... 37 5.2 Estructura ……………………………………………………………………………... 37 5.2.1 Equipos ……………………………………………………………………… 37 5.2.2 Jugadores ………………………………………………………………….. 38 5.2.3 Partidos …………………………………………………………………….. 39 5.3 Modelo Visto Controlador …………………………………………………………… 41 5.4 Base de datos ………………………………………………………………………... 42 5.4.1 Equipos …………………………………………………………………….. 43 5.4.2 Jugadores ………………………………………………………………….. 43 5.4.3 Partidos …………………………………………………………………….. 44 5.4.4 JugadorPartido …………………………………………………………….. 45 5.5 Descripción del funcionamiento de cada pantalla ………………………………… 47 5.5.1 ViewController (Pantalla principal) ………………………………………. 47 8 5.5.2 MenuEquiposViewController ……………………………………………… 48 5.5.3 NuevoEquipoViewController ……………………………………………… 49 5.5.4 DetallesEquipoViewController ……………………………………………. 50 5.5.5 MenuJugadoresViewController …………………………………………… 51 5.5.6 NuevoJugadorViewController …………………………………………….. 52 5.5.7 DetallesJugadorViewController …………………………………………… 53 5.5.8 EditarJugadorViewController ……………………………………………… 54 5.5.9 PartidosJugadosViewController ………………………………………...... 55 5.5.10 MenuPartidosViewController ……………………………………………. 56 5.5.11 NuevoPartidoViewController …………………………………………….. 57 5.5.12 JugarPartidoViewController ……………………………………………… 59 5.5.13 JugarPartido2ViewController ……………………………………………. 61 5.5.14 JugarPartido3ViewController ……………………………………………. 62 5.5.15 TiroCanastaViewController ……………………………………………… 62 5.5.16 DetallesPartidoViewController ………………………………………….. 63 5.5.17 DetallesPartido2ViewController ………………………………………… 66 5.5.18 DetallesTiroCanastaViewController ……………………………………. 66 5.6 Otros aspectos del desarrollo ……………………………………………………….. 67 5.6.1 Entrada de datos de texto ………………………………………………… 67 5.6.2 Tratamiento de imágenes ………………………………………………… 67 5.6.3 Orientación de las vistas …………………………………………………. 68 5.6.4 Gestión de la base de datos …………………………………………….. 68 5.6.4.1 Insertar datos …………………………………………………... 69 5.6.4.2 Consultar datos …………………………………………………. 69 5.6.4.3 Actualizar datos …………………………………………………. 69 5.6.4.4 Eliminar datos …………………………………………………… 70 6. EVALUACIÓN …………………………………………………………………. 71 6.1 Evaluación Equipos ………………………………………………………………….. 71 6.2 Evaluación Jugadores ……………………………………………………………….. 72 6.3 Evaluación Partidos ………………………………………………………………….. 74 9 6.4 Ejemplo de un partido real …………………………………………………………… 77 7. PLANIFICACIÓN TEMPORAL ………………………………………………. 81 8. CONCLUSIONES ……………………………………………………………… 83 8.1 Mejoras y opciones extra ……………………………………………………………. 84 9. RESCURSOS UTILIZADOS …………………………………………………. 87 9.1 Hardware utilizado ……………………………………………………………………. 87 9.2 Software utilizado …………………………………………………………………….. 87 9.3 Páginas webs y tutoriales ……………………………………………………………. 87 10 1. INTRODUCCIÓN En este apartado explicaremos un poco la historia de los smartphones, de los sistemas operativos para móviles y del uso que se le da actualmente al “teléfono inteligente“. 1.1 Historia de los Smartphones Comenzaremos por definir que es un teléfono inteligente, conocido como smartphone, es un teléfono móvil construido sobre una plataforma informática móvil, con una mayor capacidad de almacenar datos y realizar actividades semejantes a una mini computadora y conectividad que un teléfono convencional. El término “inteligente“ hace referencia a la capacidad de usarse como un ordenador de bolsillo, llegando incluso a reemplazar a un ordenador personal en algunos casos. Generalmente los teléfonos con pantallas táctiles son los llamados “teléfonos inteligentes“. Casi todos los teléfonos inteligentes permiten al usuario instalar programas adicionales (llamados comúnmente aplicaciones) que cubren necesidades ajenas a un teléfono usándolo cómo un mini ordenador portátil. El primer smartphone apareció gracia a IBM, que en 1992 diseño a Simon. Su comercialización fue entre agosto de 1994 y febrero de 1995, por BellSouth. Tenía un precio de 889 dólares. El sistema operativo usado por el Simon era ROM-DOS, que tenía compatibilidad con MS-DOS y con la arquitectura x86, tenía un procesador con un ciclo de reloj de 16 Mhz con registros de 16 bit, capacidad de 1 Mb de RAM y 1 Mb de almacenamiento además de con un módem telefónico integrado. Estos primeros teléfonos inteligentes, además de ser teléfonos, tenían: reloj, agenda, juegos, correo electrónico, etc. Y no tenían teclado ni botones, sólo pantalla táctil. Luego llegaron otros, como el Nokia 9000 en 1996, o el Ericsson R380 y el Nokia 9210 en 2000. Pero sin lugar a dudas, el pistoletazo de salida del teléfono inteligente fue el anuncio de Microsoft en 2002 de la creación de un 11 sistema operativo exclusivo para móviles, el “Microsoft Windows Powered Smartphone“, o simplemente Windows Mobile. Ese año RIM presentó su primera Blackberry con características de teléfono, Handspring lanzó su gama Treo con sistema operativo Palm, Microsoft creó su Pocket Pc Phone Edition y la tecnología móvil de datos como el GPRS empezó a generalizarse. Apple cambió la industria del Smartphone con la introducción del iPhone el 2007. Vendió 1,2 millones de unidades en el primer trimestre completo que estuvo disponible, a pesar de que los precios empezaban en 399 dólares. Los teléfonos Android llegaron al mercado en octubre de 2008, y rápidamente se convirtió en el sistema operativo dominante móvil. Había más dispositivos Android vendidos que de Apple y Symbian combinados en 2010. Aunque Androis y iPhone son rivales, no existe en realidad un “teléfono Android“, sino más bien una multitud de modelos a través de varias empresas que hacen teléfonos basados en Android. En su existencia de cuatro años, el Apple Store ya cuenta con 700.000 aplicaciones móviles con descargas que suman más de 25 mil millones. Google Play alberga más de 600.000 aplicaciones y va a 1,5 mil millones de descargas de aplicaciones cada mes. 1.2 Sistemas operativos móviles Un sistema operativo es el software básico de una computadora que provee una interfaz entre el resto de programas del ordenador, los dispositivos hardware y el usuario. Las funciones básicas del sistema operativo son administrar los recursos de la máquina, coordinar el hardware y organizar archivos y directorios en dispositivos de almacenamiento. Un sistema operativo móvil es un sistema operativo que controla un dispositivo móvil al igual que los PCs utilizan Windows o Linux entre otros. Sin embargo, 12 los sistemas operativos móviles son mucho más simples y están más orientados a la conectividad inalámbrica, los formatos multimedia y las diferentes maneras de introducir información en ellos. Existen 4 sistemas operativos más comúnmente utilizados: 1.2.1 iOS iOS es el sistema operativo desarrollado por Apple. Su código fuente es cerrado y propietario, y solamente se puede instalar en hardware fabricado por Apple. Esto hace que la integración entre hardware y software sea máxima. De la misma manera, la fragmentación en esta plataforma es mínima, debido a la reducida variedad de dispositivos y la política de actualizaciones de sistema operativo. App Store es la tienda virtual de aplicaciones desde la que se pueden adquirir aplicaciones para iOS, y hasta hace poco era la tienda virtual con mayor número de aplicaciones en comparación con las otras plataformas móviles, recientemente superada por la de Android. Apple aplica estrictas revisiones a las aplicaciones que desarrollan terceros antes de ponerlas en la App Store, lo que aporta más garantías al buen funcionamiento de las aplicaciones que se pueden adquirir en esta plataforma. 13 1.2.2 Android Android es el sistema operativo inicialmente desarrollado por Android Inc., Actualmente propiedad de Google. Google Está basado en Linux y su código fuente es abierto y libre, y por tanto puede ser modificado y distribuido por otras empresas y desarrolladores. Google Play es la plataforma de distribución de aplicaciones oficial, que desarrolla y mantiene Google, Google pero no es la única vía para obtener aplicaciones para Android. Hay muchas marcas de teléfonos que fabrican una enorme variedad de dispositivos que utilizan el sistema operativo Android. Precisamente, uno de lo problemas de la plataforma Android es la elevada fragmentación que hay, el hecho de existir tanta ta variedad de dispositivos utilizando la misma plataforma hace que sea más difícil desarrollar aplicaciones que funcionen correctamente para todos. 14 1.2.3 Windows Phone Windows Phone es el sistema operativo desarrollado por Microsoft. Su código fuente es cerrado y propietario .Es el sucesor de Windows Mobile, aunque no mantiene la compatibilidad con el sistema antiguo y por tanto hay que volver a desarrollar las aplicaciones que ya existían. Recientemente ha lanzado al mercado la versión Windows Phone 8, que aporta cambios significativos en las versiones anteriores, como por ejemplo la multitarea para aplicaciones de terceros. Windows Phone es el que menos peso tiene actualmente, pero está previsto que sea el que experimente un crecimiento más grande durante los próximos años. De momento es una incógnita hasta qué punto llegará la fragmentación en este sistema, dependiendo entre otros de qué exigencias de hardware impongan. 1.2.4 BlackBerry OS El sistema permite multitarea y tiene soporte para diferentes métodos de entrada adoptados por RIM para su uso en computadoras de mano, particularmente la trackwheel, trackball, touchpad y pantallas táctiles. 15 El SO BlackBerry esta claramente orientado a su uso profesional como gestor de correo electrónico y agenda. BlackBerry 7.1 es la última versión estable hasta el momento, esta nueva versión es muy parecida a la versión 7.0, pero con un renovación de los iconos y de la resolución de la pantalla del Smartphone, también tiene la función de trabajar cómo un Router inalámbrico para distribuir Wi-Fi por el entorno del Smartphone. 1.3 Uso de los diferentes sistemas operativos La cuota de mercado , a nivel mundial, de sistemas operativos móviles en el primer trimestre de 2013 era el siguiente: 1. Android – 75 % 2. iOS – 17,3 % 3. Windows Phone 3,2 % 4. BlackBerry OS 2,9 % Ahora os mostramos una gráfica del uso de los diferentes SO móviles en el mundo, dónde se ve el claro dominio de Android, seguido de iOS: 16 2. OBJETIVOS El objetivo principal de este proyecto es desarrollar una aplicación para iPhone que pueda gestionar las estadísticas de un equipo de baloncesto tanto amateur como profesional y poder compararlas con las estadísticas de otros equipos para tener un conocimiento mas profundo sobre nuestro equipo y los demás. También gestiona las estadísticas individuales de cada jugador del equipo que queramos tanto en general como en partidos determinados. He sido jugador y entrenador de baloncesto muchos años (aún sigo en activo como jugador) y esta herramienta la veo muy útil para poder sacar el máximo rendimiento a cada partido y a cada jugador en el momento adecuado además de informarte de los puntos fuertes y débiles tanto de tu equipo/jugadores como de los equipos/jugadores rivales. Esta aplicación está orientada principalmente para equipos amateurs o equipos profesionales de categorías inferiores ya que para gestionar equipos profesionales de categorías superiores haría falta un examen más exhaustivo y profundo de cada equipo y jugador. El motivo por el que elegí hacer este tipo de proyecto es que al practicar este deporte durante mucho tiempo y no tener nunca un apoyo logístico parecido me pareció muy buena idea aprovechar para crear algo que me ayudara tanto a mí cómo a otros equipos y así poder experimentar mejor este deporte que tanto aprecio. Solo se necesita aportar la siguiente información para la creación de cada jugador: nombre, apellido (o apodo), número de dorsal, edad e imagen (estas 2 últimas son opcionales). Al hacer la creación del jugador ya se enlaza al jugador con el equipo correspondiente. El hacer está aplicación para iPhone/iPad tiene la ventaja de no necesitar un hardware que suponga un coste extra ya que es un dispositivo muy extendido por todo el mundo y el cual tiene otras funciones principales además de las aplicaciones que le hacen tener un mercado muy amplio y general. 17 Toda la información que gestionamos con esta aplicación podría ser tratada manualmente en papel (ya se hacía anteriormente) pero es un gasto de tiempo y de persona muy grande para muchos equipos amateurs y profesionales. Esta aplicación solucionaría este problema ya que toda la información estaría dentro de un dispositivo y no en un montón de papeles además de tener la media aritmética de cada equipo/jugador al instante. Se pueden ver los objetivos más detalladamente a continuación: 2.1 OBJETIVOS PRINCIPALES - Desarrollar una aplicación en iOS - Herramienta útil para entrenadores y jugadores de equipos amateurs y profesionales - Crear, modificar, consultar y eliminar estadísticas de equipos y jugadores en tiempo real - Hacer las medias aritméticas de los datos recogidos de cada equipo y jugador para mostrarlos individualmente - Ayudar a equipos y jugadores a conocer los puntos fuertes y débiles tanto de su equipo como los de sus rivales - Guardar los datos de todos los partidos jugados hasta la fecha para poder verlos en cualquier momento. - Guardar los datos de la actuación de los jugadores de cada partido jugado hasta la fecha para poder verlos en cualquier momento - 2.2 Compartir en las redes sociales las estadísticas de los partidos OBJETIVOS SECUNDARIOS - Aplicación sencilla e intuitiva - Utilizar bases de datos (Sqlite) en iOS - Cargar los datos en bases de datos para tener un control permanente de cada equipo y jugador - Evitar que utilice mucha memoria - Insertar los datos de fácil e intuitivamente durante el partido 18 3. ESPECIFICACIONES 3.1 Descripción: El objetivo de esta aplicación es facilitar a los jugadores, técnicos o aficionados al baloncesto a crear las estadísticas de sus equipos preferidos ya sean profesionales o amateurs y así poder compararlas y analizarlas en cualquier momento. La aplicación ha de ser capaz de crear una base de datos con las estadísticas de cada equipo y sus jugadores, a partir de la información introducida en tiempo real de los partidos disputados. 3.2 Requisitos: La aplicación tendrá un menú principal donde se podrán crear los equipos y sus respectivos jugadores, comenzar un partido o visualizar estadísticas antiguas. - Crea equipos de baloncesto (nombre del equipo) - Crea jugadores de baloncesto (nombre, apellido (o apodo), número, equipo, edad, fotografía) - Se podrán editar los datos personales de cualquier jugador, cómo por ejemplo cambiar el nombre, el apellido, el número, la edad o la fotografía. - Inserta jugadores de baloncesto a sus respectivos equipos - Usa la cámara del iPhone/iPad para hacer una fotografía al jugador y así poder añadirla a su base de datos o elegirla de la galería - Crea partidos de baloncesto entre 2 equipos (equipo local, equipo visitante, fecha, lugar, numero de cuartos, tipo de seguimiento) 19 - Visualiza las estadísticas de cada equipo y jugador que ya hayan sido añadidas en la base de datos, se podrá ver la media aritmética de cada dato con respecto los partidos jugados - Interfaz intuitiva y sencilla para editar los datos de cada jugador durante el partido. Solo se necesitará tener elegido el jugador que queremos editar (elegido de entre todos los jugadores del equipo y marcado en rojo para diferenciarlo) y presionar el botón del dato que queremos introducir - Estos datos se irán añadiendo a la base de datos en tiempo real para poder visualizarlos tanto al momento como en días posteriores - Datos del jugador durante el partido: o Puntos o Tiros de 2 acertados/total o Tiros de 3 acertados/total o Tiros libres acertados/total o Faltas personales o Asistencias o Rebotes o Robos de balón o Pérdidas de balón o Tapones o Valoración (este dato lo crea la aplicación a partir de una operación matemática) - Los datos del equipo son los mismos que los de los jugadores (menos la valoración) y se añade los partidos ganados y perdidos - Para calcular la valoración se suman los puntos, tiros acertados, asistencias, rebote, robos de balón, tapones y a todo esto se le restan los tiros fallados, las faltas realizadas y las pérdidas de balón. - Se puede elegir cual de los 2 equipos seguiremos para hacer las estadísticas, o los 2 a la vez. Si se elige solo un equipo, tendremos la 20 opción de subir la anotación en 1, 2 o 3 puntos del otro equipo únicamente (también se podrán contar las faltas y tiempos muertos) - Cuando se anote una canasta (acertada o fallada) del equipo que seguimos aparecerá una nueva pantalla con la imagen de una cancha (media cancha) donde presionaremos el lugar del fallo o acierto de la canasta. No aparecerá cuando sean tiros libres - Si ha acertado la canasta se marcará con un punto verde, si ha fallado la canasta se marcará con un punto rojo - En cualquier momento del encuentro se podrá ver las estadísticas de cada equipo en el partido. Al final del encuentro también aparecerán las estadísticas de cada equipo en el encuentro - Se finalizará el tiempo presionando un botón llamado ‘Fin de tiempo‘, se cambiará el numero del tiempo actual y se reiniciaran los datos de faltas y tiempos muertos. Si al presionar el botón es el último tiempo se dará por finalizado el encuentro o se seguirá con tiempo extra si el partido ha acabado en empate. Si se da el partido por finalizado nos mostrará las estadísticas finales de ese partido y de los jugadores del equipo que hemos seguido. - Las estadísticas que se muestran sobre el partido son la puntuación de cada tiempo, el lugar el partido y la fecha del partido. Las estadísticas de los jugadores del partido se muestran en una tabla y cada celda está encabezada por el número y el apellido del jugador para diferenciarlo del resto. Cada equipo tiene su tabla de jugadores y está marcada con el equipo al que pertenece. - Al final del encuentro o en momentos posteriores se podrá publicar en las redes sociales las estadísticas de cada equipo en el partido, dicha publicación tendrá un formato diferente si se hecho el seguimiento de un equipo o de los dos. 21 22 4. DISEÑO Esta aplicación se podría estructurar en 3 partes entrelazadas: Jugadores, Equipos y Partidos. Donde los equipos están formados por jugadores y los partidos están formados por equipos. Todas las pantallas del proyecto están conectadas de tal manera que se puede ir desde la primera hacia la última mediante las demás y viceversa. Se usan los botones de la barra de navegación y los elementos de las listas para poder moverse entre las diferentes vistas. Para guardar los datos de forma permanente se ha creado una base de datos con 4 tablas: - Equipos, contiene el nombre y las estadísticas generales de cada equipo - Jugadores, contiene los datos personales y las estadísticas generales de cada jugador durante todos los partidos - JugadorPartido, contiene el nombre, apellido (o apodo), el número, el nombre del rival y las estadísticas generales de cada jugador durante un único partido junto con la imagen de sus tiros acertados/fallados. - Partidos, contiene los nombre de los dos equipos, la fecha, el lugar, el número de tiempos, el tipo de seguimiento y las puntuaciones totales y parciales de cada tiempo. 4.1 Diseño de pantallas En este apartado iremos comentando el diseño de cada una de las pantallas de la aplicación con sus funciones y características, las imágenes que se utilizan se han diseñado en Adobe Fireworks con la idea del diseño que tenia al principio: 23 4.1.1 Principal Pantalla principal , la primera al arrancar la aplicación, dónde elegiremos si queremos acceder al menú Equipos o al menú Partidos. Partidos. El fondo lo elegimos de una fotografía buscada con el buscador de imágenes de Google. 4.1.2 Menú Equipos En esta pantalla tenemos una lista de los diferentes equipos creados, creados cada uno representado con su nombre, también hay un botón en la barra de navegación para volver a la pantalla principal (Menú),, otro botón en la barra de navegación para crear un nuevo equipo (Nuevo) y un botón para actualizar la lista de equipos (Actualizar). Si no hay ningún equipo creado la lista aparece vacía, al presionar encima del nombre de un equipo de la lista accedemos a sus detalles. 4.1.3 Nuevo Equipo En esta pantalla podemos introducir el nombre del nuevo equipo, hay un botón en la barra de navegación para ejecutar la acción de guardar (Guardar) y otro para volver al menú de equipos (Equipos). Al presionar Guardar nos informa si se ha aceptado la ejecución de guardar, no se acepta si existe un equipo con el mismo nombre o sin texto. 24 4.1.4 Detalles Equipo En esta pantalla vemos las estadísticas del equipo, se hace la media aritmética con los partidos totales jugados (suma de partidos ganados y perdidos). perdidos) Tenemos un botón tón para acceder a la lista de jugadores del equipo (Jugadores), otro botón para acceder a la lista de los partidos jugados por este equipo (Partidos Jugados), otro botón en la barra de navegación para volver al menú de equipos (Equipos) y otro botón en la parte inferior para eliminar el equipo de la base de datos. 4.1.5 Menú Jugadores En esta pantalla tenemos la lista de jugadores que forman parte del de equipo, cada jugador esta representado con su número, su nombre, su apellido (o apodo) y su fotografía, si no tiene fotografía se muestra una por defecto. 25 Tenemos un botón en la barra de navegación para crear un nuevo jugador para el equipo (Nuevo),, otro botón en la barra de navegación para volver a los detalles del equipo (Atrás) y otro botón para actualizar la lista de jugadores (Actualizar). Al presionar encima de un jugador de la lista accedemos a sus detalles. Cuando ya haya 12 jugadores no podremos podremos crear mas hasta que no se haya borrado alguno. 4.1.6 Nuevo Jugador En esta pantalla podemos introducir el nombre, apellido (o apodo), número, edad y fotografía del nuevo jugador que vamos a insertar en el equipo. Tenemos un botón en la barra de navegación para volver al menú de jugadores (Atrás),, otro botón en la barra de navegación para ejecutar la acción de guardar (Guardar) y otro botón para insertar la fotografía la cual nos dejará elegir entre hacerla en ese momento con la cámara o elegirla de la galería de imágenes (Insertar imagen). Será obligatorio introducir un nombre, un número y un apellido (o apodo). Al presionar Guardar nos informa si se ha aceptado la ejecución de guardar, No se ejecutará si ya existe un jugador con el mismo apellido (o apodo) o el mismo número en el mismo equipo. 26 4.1.7 Detalles Jugador En esta pantalla podemos ver las estadísticas del jugador, se hace la media aritmética con los partidos jugados. En la sección de tiros se muestran las estadísticas de los tiros acertados respecto del total (aciertos / fallos) y el tanto por ciento de acierto (%). Si el jugador no ha disputado ningún encuentro todos los datos son ‘0‘. También se muestran los datos personales personales del jugador junto con la fotografía, si no tuviera fotografía se mostraría una imagen por defecto. Tenemos un botón en la barra de navegación para editar los datos personales del jugador (Editar), otro botón en la barra de navegación para volver al a menú de jugadores (Jugadores) y otro botón en la parte inferior para eliminar el jugador de la base de datos. 4.1.8 Editar Jugador En esta pantalla podemos editar los datos personales del jugador, las casillas de texto ya están rellenadas con los datos actuales ales para que no haya errores en la modificación. Tenemos un botón en la barra de navegación para volver a los detalles del jugador (Atrás),, otro botón en la barra de navegación para ejecutar la acción de editar (Guardar) y otro botón para editar la fotografía fo del jugador dónde podremos elegir si hacer la fotografía en ese momento con la cámara o elegirla de la galería de imágenes (Editar imagen). imagen) Al presionar Guardar nos informa si se ha aceptado la ejecución de guardar, no se ejecutará 27 si ya existe un jugador con el mismo apellido (o apodo) o con el mismo número dentro del equipo. 4.1.9 Partidos Jugados En esta a pantalla podemos ver la lista de partidos jugados por el equipo. Cada fila de la lista está representada con el nombre del equipo local, el nombre del equipo visitante y sus respectivas puntuaciones finales en el partido. Si no ha jugado ningún partido la lista aparecerá vacía. Tenemos un botón en la barra de navegación para volver volv a los detalles del equipo (Volver). (Volver) Al presionar encima de algún partido se nos mostrarán los detalles de ese partido. 4.1.10 Menú Partidos En esta pantalla tenemos una lista con todos los partidos jugados por todos los equipos creados. Cada fila de la lista está representada con el nombre del equipo local, el nombre del equipo visitante y sus respectivas puntuaciones finales en el partido. Si no ha jugado ningún partido la lista aparecerá vacía. Tenemos un botón en la barra de navegación para volver al menú principal (Menú) y otro botón en la barra de navegación para crear un nuevo partido (Nuevo). Al presionar en algún partido de la lista se nos mostrarán los detalles de ese partido. 28 4.1.11 Nuevo Partido En esta pantalla podemos introducir introducir o elegir el equipo local y equipo rival, introducir la fecha del encuentro, el lugar y el número de tiempos, también se puede elegir a que equipo se quiere hacer el seguimiento (equipo local, equipo visitante o los dos equipos). equipos) Tenemos un botón en la barra de navegación para volver al menú de partidos (Partidos), otro botón en la barra arra de navegación para empezar el partido (Empezar), y otros 3 botones (azules) que al presionarlos nos aparece una pestaña con los equipos creados (solo hará falta elegirlo y automáticamente se insertará en la celda respectiva) o con las opciones de hacer el seguimiento al equipo local, al equipo visitante o a los 2 equipos. 4.1.12 Jugar Partido (equipo local) En esta pantalla es dónde insertamos los datos a la base de datos para crear las estadísticas del partido, del equipo local y de los jugadores locales si 29 anteriormente hemos elegido hacer el seguimiento del equipo local. Tenemos 2 partes separadas por una larga línea vertical que separa las funciones de cada equipo encabezadas con su nombre. Los 12 botones superiores se rellenan con el número de cada jugador del equipo, en este ejemplo sólo había creados 5 jugadores así que sólo hay 5 botones con números y los demás en blanco. Al presionar el botón de un jugador se cambia el color de la letra a rojo para que se tenga constancia de que jugador se está editando. Los botones inferiores pertenecen a los datos deportivos que queremos introducir para cada jugador, al presionarlos se incrementa en 1 los datos del botón pulsado para el jugador marcado con el número en rojo. Al presionar los botones T2 Si, T2 No, T3 Si y T3 No se nos abre otra ventana para marcar el punto de acierto o fallo. El botón TM ejecuta un tiempo muerto para el equipo local. Los botones de la parte de la derecha pertenecientes al equipo visitante sólo incrementan la puntuación de su equipo en 1, 2 o 3 puntos o añaden faltas y tiempos muertos para el equipo visitante. Tenemos un botón para acceder a los detalles del partido con los datos introducidos hasta ese momento (Estadísticas) y otro botón para finalizar el tiempo de cada parte (Fin del tiempo) y cambiar al siguiente tiempo con los datos de faltas y tiempos muertos reiniciados a ‘0‘, si en ese momento es el último tiempo y el resultado es empate se amplia el partido a tiempo extra 1, sino se actualizan las bases de datos y se accede a los detalles del partido. En todo momento se muestra el nombre, la puntuación, las faltas y tiempos muertos de cada equipo y el número del tiempo en que estamos. 4.1.13 Jugar Partido (equipo visitante) En esta pantalla se muestra lo mismo que en la interior pero con los datos de los jugadores del equipo visitante ya que únicamente se hace el seguimiento 30 del equipo visitante, lass funciones de cada botón son las mismas pero para el equipo visitante. 4.1.14 Jugar Partido (2 equipos) En esta pantalla se muestra lo mismo que en las dos anteriores pero con los datos tanto del equipo local cómo del visitante ya que se hace el seguimiento seguimi de los dos equipos a la vez. Las funciones de cada botón son la mismas pero para el jugador marcado en rojo de cada equipo respectivamente. 4.1.15 Tiro Canasta En esta pantalla podemos editar la posición de los tiros acertados o fallados de cada jugador, accedemos a esta pantalla al pulsar el botón T2 Si, T2 No, T3 Si o T3 No. Al pulsar encima de un lugar de la imagen nos aparece un punto verde según si el tiro ha sido acertado o fallado. Tenemos un botón en la barra de navegación para ejecutar la acción de guardar (Guardar) y otro botón en la barra de navegación para volver a la pantalla de jugar partido. Al volver a acceder a esta pantalla se mantendrán los puntos verdes/rojos realizados anteriormente. 4.1.16 Detalles Partido (equipo local o equipo visitante) En esta pantalla se muestran los detalles del partido y de los jugadores del equipo al que se hace el seguimiento. También se muestran los parciales de 31 cada tiempo y el resultado final del encuentro. Tenemos un botón en la barra de navegación para compartir esta pantalla con las redes sociales (Compartir), otro botón en la barra de navegación para volver a la pantalla de jugar partido o al menú principal (volver)/(menú) y otro botón para eliminar el partido de la base de datos (también se eliminan las estadísticas de cada jugador para ese partido). Al presionar encima de cada jugador se accede a la imagen de sus tiros acertados/fallados, la misma que aparece en la pantalla anteriormente comentada pero rellena de marcas de tiros acertados/fallados y solamente con un botón en la barra de navegación para volver a los detalles del partido (volver). 4.1.17 Detalles partido (los 2 equipos) En esta pantalla se muestra lo mismo que en la anterior pero con los datos de las jugadores de los dos equipos ya que se hace el seguimiento de los dos equipos a la vez. Las funciones son las mismas pero para los jugadores de los dos equipo. 32 4.2 Decisiones de diseño - Se ha separado el menú principal en 2 partes (Equipos y Partidos) para poder acceder más rápidamente a la acción que se desea, para crear un partido no es necesario entrar dentro de los detalles de cada equipo. - Las estadísticas de cada jugador y equipo están en la misma pantalla que sus datos personales para no tener que navegar mucho a la hora de verlos todos. - La base de datos esta implementada con 4 tablas (Equipos, Jugadores, JugadorPartido y Partidos) para guardar de forma permanente los datos más fácil y rápidamente además de diferenciar bien cada apartado de la aplicación. - Se puede añadir una fotografía a los datos del jugador para hacer más personal y divertidas sus respectivas estadísticas. - Se puede elegir hacer el seguimiento del equipo local, el visitante o los dos a la vez ya que puede ser interesante ver las estadísticas de algunos equipos cuando juegan contra el tuyo para ver sus fortalezas y debilidades tanto individual como colectivamente - El hecho de poder compartir las estadísticas en las redes sociales sirve para poder mostrar a tus compañeros y amistades el desarrollo del equipo en el que estás y que todo el mundo pueda ver tus esfuerzos. - En el momento de insertar el apellido se puede elegir poner el apodo ya que no todos los jugadores son conocidos por el apellido y les gusta tener un apodo característico que además llevan en el dorsal (por ejemplo el famoso ex-jugador español conocido con el apodo Epi). - El hecho de poder elegir el número de tiempos se debe a que hay ligas amateurs dónde en vez de jugar 4 tiempos (lo normal) se juegan sólo 2 o 3 pero con tiempos más largos. 33 - Elegí poder marcar el sitio dónde se acierta o falla el tiro para tener un control más exhaustivo de tus puntos fuertes y débiles así cómo conocer el de tus rivales. 34 5. DESARROLLO En esta parte explicaremos todos los detalles sobre el desarrollo del proyecto, desde el principio cuando tuve la idea de realizar un proyecto así hasta el final. 5.1 Empezando En este apartado comentaré las diferentes pasos que he realizado para poder empezar a desarrollar la aplicación. Primero de todo, fui a hablar con el tutor del proyecto para realizar un proyecto que él había propuesto sobre un juego clásico para iOS. Hablando llegamos a la conclusión que lo mejor sería realizar una aplicación para iOS pero de una idea propia para poder realizar el proyecto con más entusiasmo. El principal inconveniente al principio era que necesitaba un Mac para poder realizar la aplicación y no tenía ninguno, se me ofreció la posibilidad de realizar el proyecto en un ordenador de la universidad pero preferí buscar uno de segunda mano y poder realizar el proyecto en casa y sin horarios definidos para así poder compaginarme otras tareas sin problemas. Entonces comencé a pensar en una aplicación sobre estadísticas de baloncesto que usó el equipo durante una parte del año 2012, que nos gustó mucho a todos pero que se dejó de usar al caducar la aplicación. Pensé que estaría muy bien poder hacer una aplicación parecida pero adaptada a las necesidades de equipos amateurs para poder llevar un control sin grandes costes. Le propuse mi idea al tutor y él acepto, en ese momento empecé a definir las especificaciones que tendría la aplicación y el diseño que tendría cada pantalla. En ese momento el tutor me dio el consentimiento de empezar a implementar la aplicación siempre y cuando antes me familiarizará con el lenguaje Objective-C. 35 5.1.1 XCode El Xcode es el entorno dónde implementamos la aplicación, és muy parecido a otros entornos cómo Eclipse el cual se usa más en la carrera y eso ayuda a entenderlo mas rápidamente. Esta compuesto por 4 partes: 1) Barra superior dónde se encuentra el menú principal, desde dónde se ejecuta la aplicación y se visualizan las notificaciones. 2) Ventana izquierda dónde se encuentran todos los archivos del proyecto que estamos realizando en ese momento, estos archivos se muestran en formato de árbol y pueden estar distribuidos por carpetas. 3) Ventana central dónde se introduce y se muestra el código, las notificaciones de errores o avisos y el diseño de la aplicación en el MainStoryboard. 4) Ventana derecha dónde se encuentran las diferentes opciones y características de cada objeto que hay en el MainStoryboard y en el 36 proyecto en general. En la parte inferior es dónde se pueden añadir los diferentes objetos arrastrándolos al MainStoryboard 5.1.2 Simulador iOS Este simulador se utiliza para testear y realizar las pruebas pertinentes en la ejecución de la aplicación. Tiene un formato muy intuitivo igual al del iPhone/iPad (según que dispositivo elijamos) dónde podemos interactuar con él cómo si se tratara del dispositivo físico original con la certeza de que si hay un fallo no se va a comprometer la integridad del aparato. 5.2 Estructura Esta aplicación está dividida en 3 partes (equipos, jugadores y partidos) que se van enlazando unas con otras ya que un equipo esta formado por jugadores y un partido esta formado por equipos. 5.2.1 Equipos Esta parte está formada por equipos que podemos crear nosotros para luego poder realizar sus respectivas estadísticas. Podemos crear, modificar, consultar 37 y eliminar los equipos que queramos. Dentro del equipo tenemos que crear los diferentes jugadores que forman parte de él. Los datos de cada equipo están formados por: - Nombre - Partidos ganados - Partidos perdidos - Puntos a favor - Puntos en contra - Tiros de 2 acertados / totales - Tiros de 3 acertados / totales - Tiros libres acertados / totales - Faltas realizadas - Faltas recibidas - Asistencias - Rebotes - Robos de balón - Pérdidas de balón - Tapones Con el total de los tiros acertados y realizados se calcula el tanto por ciento de acierto en los tiros. 5.2.2 Jugadores Esta parte está formada por los diferentes jugadores pertenecientes a cada equipo creado con anterioridad. Podemos crear, modificar, consultar y eliminar los jugadores que queramos, con un límite de 12 jugadores por equipo. Se pueden diferenciar dos partes dentro del apartado de jugadores, los datos personales y los datos deportivos. Nosotros podemos editar los datos personales en cualquier momento pero los datos deportivos sólo se pueden editar en los partidos. 38 Los datos de cada jugador son: - Nombre - Apellido (o apodo) - Número - Edad - Fotografía - Partidos jugados - Puntos - Tiros de 2 acertados / totales - Tiros de 3 acertados / totales - Tiros libres acertados / totales - Faltas realizadas - Asistencias - Rebotes - Robos de balón - Pérdidas de balón - Tapones - Valoración Con el total de los tiros acertados y realizados se calcula el tanto por ciento de acierto en los tiros. La valoración se calcula de la siguiente forma: Valoración = Puntos + Tiros de 2 acertados + Tiros de 3 acertados + Tiros libres acertados + Asistencias + Rebotes + Robos de balón + Tapones – Tiros de 2 fallados – Tiros de 3 fallados – Tiros libres fallados – Faltas realizadas – Pérdidas de balón. 5.2.3 Partidos Esta parte está formada por los partidos donde haremos el seguimiento del equipo local, el visitante o de los dos a la vez. Podemos crear, consultar y eliminar partidos ya jugados. A la hora de realizar un nuevo partido se tiene que elegir si haremos el seguimiento del equipo local, del equipo visitante o de los dos a la vez. 39 Los datos de cada partido son: - Equipo local - Equipo visitante - Puntuación local - Puntuación visitante - Fecha del partido - Lugar del partido - Número de tiempos - Puntos equipo local 1Q - Puntos equipo local 2Q - Puntos equipo local 3Q - Puntos equipo local 4Q - Puntos equipo local TE1 - Puntos equipo local TE2 - Puntos equipo visitante 1Q - Puntos equipo visitante 2Q - Puntos equipo visitante 3Q - Puntos equipo visitante 4Q - Puntos equipo visitante TE1 - Puntos equipo visitante TE2 - Tipo de seguimiento 40 5.3 Modelo Vista Controlador Para poder trabajar con este lenguaje se utiliza el patrón Modelo Vista Controlador, todos los proyectos en iOS siguen este patrón. El modelo-vista-controlador controlador es un patrón arquitectónico. Se emplea para estructurar las interfaces de los programas de una manera en la que separamos tareas diferentes en diferentes capas. Por un lado tenemos la presentación (Vista),, por otro la lógica de aplicación (Controlador) y por otro la información del dominio (Modelo). Modelo:: Es la representación de la información en el sistema. Trabaja junto a la vista para mostrar la información al usuario usuario y es accedido por el controlador para añadir, eliminar, consultar o actualizar datos. Vista:: Es la presenta al modelo en un formato adecuado para que el usuario pueda interactuar con él, casi siempre es la interfaz de usuario. Controlador: Es el elemento más abstracto. Recibe, trata y responde los eventos enviados por el usuario o por la propia aplicación. Interactúa Interactú tanto con el modelo como con la vista. 41 Para entender mejor el uso del modelo MVC vamos a ver un ejemplo de su flujo de control: 1. El usuario activa un evento en la vista (botón, enlace, etc.) 2. El controlador recibe el evento y lo gestiona. 3. El controlador consulta o modifica el modelo. 4. El controlador manda la respuesta a la interfaz y esta reacciona en función de esta (cambia de pantalla, abre un enlace, etc.) 5. La vista espera una nueva acción del usuario. 5.4 Base de datos Para almacenar nuestros datos de forma permanente utilizaremos una base de datos. El tipo de base de datos que hemos utilizado se llama SQLite. SQLite es un sistema de gestión de bases de datos relacional. A diferencia de los sistemas de gestión de bases de datos cliente-servidor, el motor de SQLite no es un proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca SQLite se enlaza con el programa pasando a ser parte integral del mismo. El programa utiliza la funcionalidad de SQLite a través de llamadas simples a subrutinas y funciones. 42 La base de datos estará definida por 4 tablas: 5.4.1 Equipos Esta tabla contiene la información de cada equipo, el nombre del equipo es la clave primaria de la tabla. Cómo se puede ver en la imagen todos los atributos son en formato Integer menos el nombre que es Text, el valor por defecto de todos los atributos con formato Integer es ‘0‘ y el del atributo Nombre es null. 5.4.2 Jugadores 43 Esta tabla contiene la información general de cada jugador, el nombre completo del jugador es la clave primaria (el nombre completo se forma juntando el nombre con el apellido o apodo, sin espacios). Los atributos Nombre, Apellidos, Equipo y Nombre_completo son en formato Text, el atributo Foto es en formato Blob (formato para poder gestionar imágenes) y los demás atributos en formato Integer. Todos los atributos personales tienen el valor por defecto null, los demás tienen el valor por defecto ‘0‘. 5.4.3 Partidos Esta tabla contiene la información de cada partido, el atributo EquiposFecha es la clave primaria (es la concatenación del nombre de los 2 equipos y la fecha, todo sin espacios). Los atributos EquipoLocal, EquipoVisitante, Fecha, Lugar, Seguimiento y EquiposFecha son en formato Text, todos los demás son en formato Integer. Todos los atributos con formato Text tiene el valor por defecto null, los demás con formato Integer tienen el valor por defecto ‘0‘. 44 5.4.4 JugadorPartido Esta tabla contiene la información del jugador que ha jugado un determinado partido. Es imprescindible que este jugador haya sido creado en la tabla jugadores anteriormente. El atributo NombreApellidoEquipoFecha es la clave primaria (es la concatenación de los atributos Nombre, Apellido, VsEquipo, y fecha, todo sin espacios). Los atributos Nombre, Apellido, NombreApellidoEquipoFecha, Numero, Fecha y VsEquipo tienen el formato Text, el atributo ImagenCanasta tiene el formato Blob (formato para poder gestionar imágenes) y los demás atributos tienen el formato Integer. Todos los atributos Integer tienen el valor por defecto ‘0‘, los demás tienen el valor por defecto null. 45 46 5.5 Descripción del funcionamiento de cada pantalla En este apartado haremos una descripción detallada de la implementación de cada pantalla. 5.5.1 ViewController (Pantalla Principal) Esta es la pantalla inicial de la aplicación, se ha elegido una imagen relacionada con el baloncesto cómo fondo de pantalla (la imagen esta descargada de internet y editada para elegir el trozo deseado). Hay 2 botones con la etiqueta Equipos y Partidos y una etiqueta con el título de la aplicación. Al presionar en el botón Equipos nos crea un evento que nos lleva a MenuEquiposViewController, al presionar el botón Partidos nos crea un evento que nos lleva a MenuPartidosViewController. Se han utilizado los objetos UIButton (botones) y UILabel (etiquetas). 47 5.5.2 MenuEquiposViewController En esta pantalla tenemos una tabla con la lista de todos los equipos creados, cada celda de la tabla esta editada para que aparezca el nombre del equipo al que pertenece. Antes de esto se ejecuta el método que cargarEquipos que descarga todos los datos de los equipos de la base de datos a un NSMutableArray llamado “equipos“ (un array que puede modificar su tamaño al añadir objetos), los datos de cada equipo se han introducido en un NSObject llamado “Equipo“ para poder trabajar con él. El botón actualizar vuelve a cargar la lista de equipos con el método cargarEquipos. El botón Menu nos devuelve a la pantalla principal (ViewController) y el botón Nuevo nos lleva a NuevoEquipoViewController. Al presionar encima de un elemento de la lista accedemos a la vista DetallesEquipoViewController con los datos del equipo elegido. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITableView (tabla) y NSObject (objeto Equipo). 48 5.5.3 NuevoEquipoViewController En esta pantalla será dónde introduciremos el nuevo equipo a la base de datos. Tenemos un UITextField dónde escribiremos el nombre del equipo que queremos introducir. Al presionar encima nos aparece el teclado en la parte inferior de la vista. Una vez introducido, si presionamos el botón Guardar se ejecutará el método “guardarEquipo“ donde creará un equipo en la base de datos con el nombre introducido. Si el nombre ya existe o no se ha escrito ninguno, aparecerá un UIAlertView (mensaje de alerta) alertando del error y no se ejecutará la acción. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITextField (campo de texto) y UIAlertView (mensaje de alerta). 49 5.5.4 DetallesEquipoViewController Esta pantalla nos muestra los datos estadísticos del equipo que hemos elegido en la lista de MenuEquiposViewController. En la barra de navegación se escribe el nombre del equipo cogiéndolo del objeto Equipo que se ha pasado de la lista anterior. De ese mismo objeto es de donde recogemos la información que se muestra en pantalla. No se muestra directamente ya que antes se hace la media aritmética con el total de los partidos jugados. Todos los datos se muestran mediante UILabels que se editan para que aparezca el dato correspondiente. El botón Menu nos devuelve a MenuEquiposViewController, el botón Jugadores nos lleva a MenuJugadoresViewController, el botón Partidos Jugados nos lleva a PartidosJugadosViewController y el botón Eliminar Equipo elimina el equipo de la base de datos, principalmente de la tabla Equipos. Antes de eliminarlo nos pide confirmación mediante un UIAlertView. Toda estas etiquetas y botones están dentro de un UIScrollView para poder mover la pantalla en vertical y poder acceder al botón Eliminar Equipo. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UIScrollView (barra de visualización) y UIAlertView (mensaje de alerta). 50 5.5.5 MenuJugadoresViewController En esta pantalla tenemos una tabla con la lista de todos los jugadores creados en cada equipo, cada celda de la tabla esta editada para que aparezca el nombre del jugador en la parte superior de la celda, el apellido en la parte inferior, el número en la izquierda y la fotografía en la derecha. Si el jugador no tiene fotografía se muestra una imagen por defecto. Antes de esto se ejecuta el método “cargarJugadores“ el cual descarga todos los jugadores (pasando un filtro para elegir solo los del equipo) de la base de datos y los introduce en el NSMutableArray “jugadores“, los datos de cada jugador se han introducido en un NSObject llamado “Jugador“ para poder trabajar con él. El botón Atrás nos devuelve a DetallesEquipoViewController, el botón Nuevo nos lleva a NuevoJugadorViewController , el botón Actualizar vuelve a realizar el método “cargarJugadores“. Al presionar encima de un elemento de la lista accedemos a la vista DetallesJugadorViewController con los datos del jugador elegido. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITableView (tabla) y NSObject (objeto Jugador). 51 5.5.6 NuevoJugadorViewController En esta pantalla será dónde introduciremos un nuevo jugador en la base de datos. Tenemos 4 UITextField dónde podremos escribir el Nombre, el apellido (o apodo), el número y la edad. Al presionar encima nos sale el teclado en la parte inferior de la vista, si el teclado tapa el campo de texto dónde queremos escribir podemos mover la vista verticalmente para posicionarla a nuestro gusto. El botón Insertar imagen lanza un UIActinSheet que nos da para elegir que dispositivo queremos utilizar para insertar la imagen, podemos elegir entre la cámara o la galería de imágenes. Al elegir una de las dos opciones se ejecuta un UIImagePickerController para poder iniciar la cámara o la galería. Una vez introducidos todos los datos, si presionamos el botón Guardar se ejecutará el método “guardarJugador“ donde creará un jugador en la base de datos con los datos introducidos, antes de eso se transforma la imagen a NSData para poder almacenarla. Si no se ha introducido ninguna imagen no se guarda ninguna imagen por defecto. 52 Si el apellido ya existe o no se ha escrito ninguno, aparecerá un UIAlertView (mensaje de alerta) alertando del error y no se ejecutará la acción. Si algún miembro del mismo equipo tiene el mismo número o no se ha escrito ninguno, aparecerá un UIAlertView (mensaje de alerta) alertando del error y no se ejecutará la acción. El botón Atrás nos devuelve a MenuJugadoresViewController. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UIImageView(Imágenes),UIActionSheet(pestaña) y UIImagePickerController (tomar imagenes). 5.5.7 DetallesJugadorViewController Esta pantalla nos muestra los datos estadísticos del jugador que hemos elegido en la lista de MenuJugadoresViewController. En la barra de navegación se escribe el nombre del equipo cogiéndolo del objeto Jugador que se ha pasado de la lista anterior. De ese mismo objeto es de donde recogemos la información que se muestra en pantalla. No se muestra directamente ya que antes se hace la media aritmética con el total de los partidos jugados. Todos los datos se muestran mediante UILabels que se editan para que aparezca el dato correspondiente. 53 El botón Jugadores nos devuelve a MenuJugadoresViewController, el botón Editar nos lleva a EditarJugadorViewController y el botón Eliminar Jugador elimina el equipo de la base de datos, principalmente de la tabla Jugadores. Antes de eliminarlo nos pide confirmación mediante un UIAlertView. Toda estas etiquetas y botones están dentro de un UIScrollView para poder mover la pantalla en vertical y poder acceder al botón Eliminar Equipo. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UIScrollView (barra de visualización), NSObject (objeto Jugador) y UIAlertView (mensaje de alerta). 5.5.8 EditarJugadorViewController Esta pantalla será dónde editaremos un jugador ya creado de la base de datos. Tenemos 4 UITextField dónde podremos editar el Nombre, el apellido (o apodo), el número y la edad. Ya aparecen los datos del jugador creado para que se tenga certeza de la edición, los datos los cargamos del objeto Jugador que hemos utilizado en DetallesJugadorViewController. Al presionar encima nos sale el teclado en la parte inferior de la vista, si el teclado tapa el campo de texto dónde queremos escribir podemos mover la vista verticalmente para posicionarla a nuestro gusto. 54 Lo demás es igual que en NuevoJugadorViewController sólo cambia el botón Guardar por Editar y el botón Atrás te lleva a DetallesJugadorViewController. 5.5.9 PartidosJugadosViewController En esta pantalla tenemos una tabla con la lista de todos los partidos jugados por un equipo en particular, cada celda de la tabla está editada para que aparezca el nombre del equipo local, el nombre del equipo visitante y las puntuaciones de cada uno. Antes de esto se ejecuta el método “cargarPartidos“ el cual descarga todos los partidos (pasando un filtro para elegir solo los del equipo) de la base de datos y los introduce en el NSMutableArray “partidos“, los datos de cada partido se han introducido en un NSObject llamado “Partido“ para poder trabajar con él. El botón Volver nos devuelve a DetallesEquipoViewController o DetallesEquipo2ViewController, al presionar encima de un elemento de la lista accedemos a la vista DetallesPartidoViewController con los datos del partido elegido. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITableView (tabla) y NSObject (objeto Partido). 55 5.5.10 MenuPartidosViewController En esta pantalla tenemos una tabla con la lista de todos los partidos jugados por cualquier equipo, cada celda de la tabla está editada para que aparezca el nombre del equipo local, el nombre del equipo visitante y las puntuaciones de cada uno. Antes de esto se ejecuta el método “cargarPartidos“ el cual descarga todos los partidos de la base de datos y los introduce en el NSMutableArray “partidos“, los datos de cada partido se han introducido en un NSObject llamado “Partido“ para poder trabajar con él. El botón Menu nos devuelve DetallesEquipo2ViewController, a el ViewController botón Nuevo (Menu nos Principal) o lleva a NuevoPartidoViewController, al presionar encima de un elemento de la lista accedemos a la vista DetallesPartidoViewController con los datos del partido elegido. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITableView (tabla) y NSObject (objeto Partido). 56 5.5.11 NuevoPartidoViewController En esta pantalla será dónde introduciremos un nuevo partido a la base de datos. Tenemos 6 UITextField dónde podremos escribir el nombre del equipo local, el nombre del equipo visitante, la fecha del partido, el número de tiempos que tendrá el partido, el lugar del partido y a que equipo haremos el seguimiento. Al presionar encima nos sale el teclado en la parte inferior de la vista, si el teclado tapa el campo de texto dónde queremos escribir podemos mover la vista verticalmente para posicionarla a nuestro gusto. El botón del al lado de los UITextField de Equipo local y Equipo visitante lanza un UIPickerVIew que nos da para elegir que equipo queremos añadir de los ya creados. Encima del UIPickerView aparece una UIToolbar donde habrá los botones Done y Cancel para confirmar el equipo elegido. Antes de esto se han cargado el nombre todos los equipos y se han introducido en un NSMutableArray en formato NSString y así poder manipularlos. 57 El botón del al lado del UITextField de “Hacer el seguimiento“ de lanza un UIPickerVIew que nos da para elegir que tipo de seguimiento queremos realizar, hay las opciones “Equipo local“, “Equipo visitante“ y “Los dos equipos“. Encima del UIPickerView aparece una UIToolbar donde habrá los botones Done y Cancel para confirmar el tipo de seguimiento elegido. El botón Partidos nos devuelve a MenuPartidosViewController y el botón Empezar nos lleva a JugarPartidoViewController (si hemos elegido hacer el seguimiento de los dos equipos) o a JugarPartido2ViewController (si hemos elegido hacer el seguimiento del equipo local) o a JugarPartido3ViewController (si hemos elegido hacer el seguimiento del equipo visitante). Si al presionar el botón Empezar no hemos escrito o elegido ningún equipo local o equipo local, o no hemos escrito la fecha o el lugar, nos aparece un UIAlertView notificándonos del error. Si no hemos escrito ‘1‘, ‘2‘, ‘3‘ o ‘4‘ en Num. de tiempos también o no hemos elegido que tipo de seguimiento hacer también se nos notifica mediante UIAlertView. Si hemos elegido hacer el seguimiento de algún equipo que no tenemos creado nos notifica del error mediante UIAlertView. En ese momento se ejecutará el método “guardarPartido“ y lo introduciremos dentro de la base de datos, también se creará un objeto Partido para poder pasarla a otras vistas. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas), UITextField (campos de texto), UIPickerView (pestaña para elegir), UIToolBar (barra encima de la pestaña) y NSObject (objeto Jugador). 58 5.5.12 JugarPartidoViewController Esta pantalla será la que utilicemos cuando hayamos elegido hacer el seguimiento de los dos equipos. En la barra de navegación aparece los nombres de los dos equipos que se enfrentan y tanto en la parte superior derecha como izquierda también aparecen el nombre de los dos equipos, estos nombres los cogemos del objeto Partido que hemos pasado de NuevoPartidoViewController. La línea blanca vertical central separa los datos y opciones de cada equipo, las línias verticales de al lado del nombre de los equipos separa la puntuación de cada equipo con el número de tiempo en el que estamos en este momento. Los 12 botones que hay en cada lado corresponden al número máximo de jugadores que puede haber para cada equipo, el número de los jugadores de cada equipo se carga en cada una de las casillas. Antes de todo esto se cargan los datos de los equipos en los objetos Equipo y se introducen en el NSMutableArray equipos. También se cargan los datos de los jugadores de cada equipo en los objetos Jugador y se introducen en el NSMutableArray jugadoresLocal y jugadoresVisit respectivamente. Entonces se crean los objetos JugadorPartido con los datos de cada jugador que esta jugando el partido y se introducen en la lista jugadoresPartidoLocal y jugadoresPartidoVisit respectivamente. 59 Todos los números de los jugadores de cada equipo están coloreados en azul menos uno que está coloreado en rojo, ése jugador al que representa el número coloreado será el protagonista del equipo en ese momento. Si presionamos a otro jugador del mismo equipo, éste pasa a tener el color rojo y el otro se vuelve azul, es una forma de indicar visualmente que jugador estamos manipulando. Para ir introduciendo los diferentes datos que vayamos viendo durante el partido sólo tendremos que elegir el jugador al que queramos editar y presionar sobre la acción que ha realizado (menos TM = Tiempo Muerto). En el momento de presionar una de estas acciones del juego, se modificará el contenido de los objetos Equipo (del equipo correspondiente), Jugadores (del jugador elegido), JugadorPartido (del jugador elegido) y Partido, además de actualizar el resultado, las faltas o los tiempos muertos. El botón Estadísticas nos lleva a DetallesPartidoViewController pero antes actualiza la base de datos con los datos modificados en los objetos Equipo, JugadorPartido y Partido. El botón Fin del Tiempo nos finaliza el número de tiempo en el que estamos, reinicia el la etiqueta de número de faltas y de tiempos muertos y nos incrementa el número del tiempo, si al presionar el botón coincide con el número de tiempos que queríamos que tuviera el partido y las puntuaciones de los dos equipos son diferentes se actualiza la base de datos con los datos modificados en los objetos Equipo, Jugador, JugadorPartido y Partido, si las puntuaciones son iguales reinicia las faltas y tiempos muertos y cambia el número de tiempos por TE1 (Tiempo Extra 1). Si al finalizar este tiempo sigue el marcador igual se pasa a TE2 (Tiempo Extra2). Al presionar los botones T2Si, T2No, T3Si o T3No nos lleva a TiroCanastaViewController. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas) y NSObject (objeto Equipo, Jugador, JugadorPartido y Partido). 60 5.5.13 JugarPartido2ViewController Esta pantalla será la que utilicemos cuando hayamos elegido hacer el seguimiento del equipo local. Tendrá la misma estructura y funciones que la vista anterior pero solamente para el equipo local. El equipo visitante tiene 3 botones para subir su puntuación en 1, 2 o 3 puntos, un botón para incrementa el número de faltas y otro para incrementar el número de tiempo. Todos estos datos se verán reflejados en las etiquetas pertinentes. No se cargará ningún dato del equipo visitante ni de sus jugadores, no será imprescindible que el equipo visitante esté creado. A la hora de cargar o actualizar datos de la base de datos sólo se modificaran los del equipo local y sus jugadores. En este caso el botón Estadísticas y el botón Fin del tiempo (al final del encuentro) nos llevará a DetallesPartido2ViewController. 61 5.5.14 JugarPartido3ViewController Esta pantalla será la que utilicemos cuando hayamos elegido hacer el seguimiento del equipo visitante. Tiene la misma estructura y funciones que la vista anterior pero esta vez de modifican los datos del equipo visitante y de sus jugadores. 5.5.15 TiroCanastaViewController Esta pantalla será la que nos muestre la posición de los tiros acertados y fallados de cada jugador del equipo al que hagamos el seguimiento durante ese partido. 62 Primero de todo se carga en la UIImageVIew el atributo imagenCanasta que tiene el jugador que ha realizado el tiro, según si ha acertado o si ha fallado sólo nos dejará pintar la posición del tiro de color verde (acierto) o rojo (fallo). El botón Volver nos devuelve a JugarPartidoViewController o JugarPartido2ViewController o a JugarPartido3ViewController según el tipo de seguimiento que hagamos. El botón guardar ejecuta el método “guardarImagen“ y guarda la actual imagen editada en la base de datos para que así aparezca modificada cuando vuelva a realizar la acción de tiro y se vuelva a cargar la imagen. Para guardar la imagen en la base de datos primero se transforma en NSData, cuando se carga la transformamos en UIImage para poder visualizarla 5.5.16 DetallesPartidoViewController Esta pantalla será la que utilicemos cuando hayamos elegido hacer el seguimiento de los dos equipos. 63 Los datos que hay en la parte superior (nombres equipos, puntuaciones parciales y totales, etc) se obtienen del objeto Partido que hemos recibido de la vista anterior. En la parte inferior hay 2 UITableView, una para cada equipo. Estos datos muestran las estadísticas de cada jugador que ha disputado el partido, separados en sus respectivos equipos. Se ha editado la celda de las 2 listas para que puedan mostrar todos los datos en una misma línea y así hacerlo más entendible. En cada celda se nos muestra (por este orden), el número del jugador, el apellido, los puntos, los tiros de 2 acertados, los tiros de 2 realizados (acertados / total), los tiros de 3 acertados, los tiros de 3 realizados (acertados / total), los tiros libres acertados, los tiros libres realizados (acertados / total), faltas realizadas, asistencias, rebotes, tapones, robos de balón, perdidas de balón y valoración. Antes de eso se cargan todos los datos de la tabla JugadorPartido de la base de datos y se hace un filtro para elegir a los jugadores que han jugado el partido. Esto se hace mediante el método “cargarJugadorPartido“, guarda los datos de cada jugador en objetos JugadorPartido y los introduce en un NSMutableArray llamado jugadorLocalPartido o jugadorVisitPartido (según el equipo del jugador), entonces editamos todas las etiquetas de las celdas con los datos del objeto JugadorPartido correspondiente. El botón Volver nos devuelve al JugarPartidoViewController correspondiente o nos lleva directamente al menú principal (según si el partido ha finalizado o no), el botón Eliminar elimina el partido y a los jugadores de la base de datos, concretamente de las tablas Partido y JugadorPartido respectivamente, si se ha accedido mediante el botón Estadísticas no se puede ejecutar la acción de eliminar ya que aun no finalizado el partido (botón deshabilitado). El botón Compartir lanza un UIActivityViewController (pestaña en la parte inferior que nos lleva a las diferentes redes sociales que tenemos) dónde podemos elegir en que red social queremos compartir los resultados del partido, antes de ejecutarse se hace un foto de la pantalla automáticamente y la guarda en un UIImage para poder enviarlo. 64 Al presionar encima de una red social, nos pide el usuario y contraseña si no están automáticos, y nos muestra el texto que encabezará a la imagen en la publicación (se puede editar en ese momento). El texto tiene el siguiente formato: Estadísticas del partido entre %@ y %@ jugado en %@ a fecha de %@, se substituyen los %@ por el nombre del equipo local, el del equipo visitante, el lugar y la fecha respetivamente. Al presionar encima de un jugador de la tabla nos lleva a DetallesTiroCanastaViewController. Se han utilizado los objetos UIButton (botones), UILabel (etiquetas) y NSObject (objeto JugadorPartido y Partido), UITableView (tablas de jugadores), UIActivityViewController (pestaña redes sociales) y UIAlertView (mensajes de alerta). 65 5.5.17 DetallesPartido2ViewController Esta pantalla será la que utilicemos cuando hayamos elegido hacer el seguimiento de el equipo local o el visitante. Tiene las mismas opciones y características que DetallesPartidoViewController pero solamente muestra los datos del equipo al que se hacía el seguimiento, tanto si es el local como el visitante. 5.5.18 DetallesTiroCanastaViewController Esta pantalla se muestra cuando accedemos a los tiros de cada jugador desde DetallesPartidoViewController o DetallesPartido2ViewController. Tiene las mismas funciones que TiroCanastaViewController pero no se puede editar la 66 imagen (se ha quitado la parte del código que lo hacía) y el botón Volver te devuelve al DetallesPartidoViewController correspondiente. 5.6 Otros aspectos del desarrollo En esta parte comentare aspectos del desarrollo que ocurren en ciertos momentos como la entrada de datos de texto, el tratamiento de imágenes, la orientación de las vistas y la gestión de la base de datos. 5.6.1 Entrada de datos de texto En muchos momentos el usuario necesita introducir datos mediante el teclado, se usa el teclado que viene por defecto en el sistema iOS, siempre que se presiona encima de un UITextField aparece un teclado en la parte inferior de la pantalla. En el momento del desarrollo se puede elegir que tipo de teclado queremos que aparezca para cada uno de los UITextField, siendo el teclado QWERTY el que viene por defecto. El principal problema que trae el teclado es que no desaparece automáticamente una vez hemos finalizado la escritura, se necesita editar el UITextField para que desaparezca cuando presionemos el botón Intro. Esto se consigue delegando el UITextField a nuestra actual vista (1) y ejecutando el método textFieldShouldReturn (2): 1) textFieldNombre.delegate = self; 2) - (BOOL)textFieldShouldReturn:(UITextField *)textField { [textFieldNombre resignFirstResponder]; return YES; } 5.6.2 Tratamiento de imágenes Introducir imágenes cómo fondo de pantalla no supone ningún problema ya que en el mismo entorno existe la opción de elegir la imagen que se desee (siempre que esté copiada dentro del proyecto). 67 La dificultad surge cuando queremos introducir imágenes en bases de datos y luego recuperarlas. No existe un enlace directo para guardarlas en una base de datos SQLite, primero se tiene que editar la columna de la tabla a formato BLOB, luego se ha de convertir la imagen en un NSData y entonces se puede introducir la imagen en la base de datos: NSData *imgData = UIImagePNGRepresentation(ImageViewJugador.image); Otra de las dificultades que he encontrado con las imágenes ha sido en el momento de poder dibujar encima de ellas y que se guardara el resultado. Para ello he utilizado el método touchesBegan y el objeto UITouch (entre otros) que sirven para realizar poder dibujar trazos encima de un fondo, los he editado de tal manera que solo actúe cuando se presiona la pantalla por primero vez y no cuando se arrastre el dedo para así poder crear puntos y no línias. 5.6.3 Orientación de las vistas Al principio elegí que la orientación de las pantallas fuera vertical (portrait) y lateral derecha (landscape right) pero cuando necesitaba la pantalla en una única orientación se me descolocaba todo. Entonces elegí quela orientación fuese únicamente vertical (portrait) y cuando la pantalla tuviese que estar orientada lateralmente forzarla para que no se pudiera ver de otra forma. Eso lo conseguí mediante un código que mueve toda la pantalla en la orientación lateral derecha sin que la interfaz se vuelva a colocar verticalmente: CGAffineTransform transform = CGAffineTransformMakeRotation (3.14159265/2); self.view.transform = transform; CGRect contentRect = CGRectMake(0,0, 480, 320); self.view.bounds = contentRect; 5.6.4 Gestión de la base de datos En este apartado explicaré cómo se realizan las inserciones, consultas, actualizaciones y eliminaciones en una base de datos SQLite. 68 5.6.4.1 Insertar datos Se tiene que introducir el siguiente objeto a la base de datos: NSString *sql = [NSString stringWithFormat:@"insert into Equipos (\"Nombre\") VALUES (\"%@\")", self.textFieldNombre.text]; Esta parte crea un registro y se introduce en la columna Nombre de la tabla Equipos el texto que hay en el campo de texto textFieldNombre 5.6.4.2 Consultar datos Se tiene que introducir el siguiente objeto a la base de datos: NSString *sentenciaSQL = [NSString stringWithFormat:@"select * from Equipos"]; Esta parte selecciona todos los datos de la tabla Equipos. Luego se ha de guardar cada dato en un objeto de su mismo formato: NSString *nombre = [NSString stringWithUTF8String:(char *) sqlite3_column_text(sentencia, 0)]; El número 0 significa el número de la columna al que pertenece ese dato. 5.6.4.3 Actualizar datos Se tiene que introducir el siguiente objeto a la base de datos: const char *sql = "update Jugadores Set Nombre = ? Where Nombre_completo = ?"; Esta parte actualiza el registro de la columna Nombre con la llave primera Nombre_completo. Luego se ha de introducir que dato es cada uno: sqlite3_bind_text(sentencia,1,[self.NombreTextField.text UTF8String],- 1,SQLITE_TRANSIENT); sqlite3_bind_text(sentencia,2,[auxNombreCompleto UTF8String],- 1,SQLITE_TRANSIENT); Los números 1 y 2 significan el orden de los interrogantes. 69 5.6.4.4 Eliminar datos Se tiene que introducir el siguiente objeto a la base de datos: const char *sql = "delete From Jugadores Where Nombre_completo = ?"; Esta parte elimina de la tabla Jugadores todos los registros que contengan la llave primaria Nombre_completo que introducimos de esta manera: sqlite3_bind_text(sentencia,1,[auxJugador.NombreCompleto UTF8String],- 1,SQLITE_TRANSIENT); 70 6. EVALUACIÓN En esta parte explicaré las pruebas y el funcionamiento realizados para comprobar que la aplicación funciona correctamente. Ese apartado es muy importante ya que sirve para averiguar que partes funcionan y cuales no y así poder hacer las modificaciones pertinentes. En todo momento que he implementado algo nuevo o modificado he hecho una pequeña evaluación de la aplicación para saber si los cambios realizados funcionaban correctamente. Las primeras pruebas las realicé con equipos y jugadores ficticios que disputaban partidos entre ellos. Utilicé tanto mi nombre cómo el de amigos y familiares para editar los jugadores aunque también elegí usar el nombre de equipos mundialmente conocidos (FC Barcelona y Real Madrid) para hacerlo más vistoso. 6.1 Evaluación Equipos • Al iniciar la aplicación pulsamos el botón Equipos para acceder a su menú. • En el menú de equipos nos aparece una lista con los equipos creados, al no haber creado ninguno nos aparece la lista vacía. • Si presionamos al botón Nuevo nos lleva a la ventana de crear nuevo equipo. • Introducimos el nombre del nuevo equipo, presionamos el botón guardar y nos informa que se han creado con éxito. • Volvemos al menú de equipos mediante el botón Equipos y presionamos al botón Actualizar para ver los últimos equipos creados. 71 • Presionamos encima de el equipo que hemos creado recientemente, nos lleva a otra ventana con sus datos y estadísticas. • Al no haber disputado ningún partido las estadísticas están a ‘0‘. Aparece el nombre del equipo actual en la parte superior. Si hubiésemos disputado algún partido anteriormente nos aparecerían la media aritmética de sus datos deportivos anteriores. • Si presionamos al botón Eliminar Equipo, nos avisa si queremos eliminarlo, al confirmarlo nos elimina el equipo y todos sus jugadores, lo hacemos y al actualizar vemos que el equipo ya no existe (volvemos a crearlo para seguir adelante). • Si presionamos en el botón Jugadores nos lleva al menú de los jugadores creados para ese equipo. Si presionamos el botón Partidos jugados nos lleva al menú de los partidos jugados por ese equipo. 6.2 Evaluación Jugadores • En el menú de jugadores nos encontramos la lista con todos los jugadores creados para ese equipo, al no haber creado ninguno la lista aparece vacía. En cada celda de la lista aparecen el número, el nombre, el apellido y la fotografía. Si no se ha insertado fotografía aparece una imagen por defecto igual para todos. • Si presionamos al botón Nuevo nos lleva a la ventana para crear un nuevo jugador. 72 • En esta ventana introducimos el nombre, el apellido (o apodo), el número y la edad. Si no introducimos el nombre, el apellido o el número nos avisa. Si el apellido o el número ya existen también nos avisa. Si presionamos el botón Insertar imagen nos aparece una pestaña dónde podemos elegir si usar la cámara o la galería de imágenes. • Si usamos la cámara y realizamos una fotografía o si la elegimos de la galería vemos que ésta se muestra en la ventana. • Al presionar el botón guardar nos avisa que se ha creado con éxito, podemos seguir creando los demás jugadores. • Volvemos al menú de jugadores (presionando el botón Atrás) y presionamos el botón Actualizar para mostrar los nuevos jugadores creados. Si presionamos encima de un jugador nos lleva una ventana con sus datos personales y estadísticas. • Al no haber disputado ningún partido nos muestra sus estadísticas a ‘0‘. Nos aparecen sus datos personales en la parte superior. Si hubiera disputado algún encuentro nos aparecerían la media aritmética de sus datos deportivos durante los partidos anteriores. • Si presionamos el botón Eliminar jugador, nos avisa si queremos eliminarlo, al confirmarlo nos elimina el jugador de la base de datos, lo hacemos y al actualizar vemos que el jugador ya no existe. 73 • Si presionamos el botón editar nos lleva a la ventana para editar los datos personales del jugador. Esta ventana es igual que la de crear el jugador pero con los datos del jugador ya introducidos, cuando hayamos hecho los cambios pertinentes presionamos el botón Guardar y nos avisa que el jugador ha sido editado, siempre y cuando no se hayan borrado el nombre, apellido o número, o el apellido o número modificados ya existan. • Volvemos al menú jugadores y presionamos el botón Actualizar para mostrar los nuevos datos editados. 6.3 Evaluación partidos • Si presionamos el botón Partidos en el menú principal nos lleva a la ventana con la lista de todos los partidos disputados. • Al no haber disputado ningún partido la lista se muestra vacía. Si hubieran partidos disputados, en cada celda aparecen el nombre del equipo local, el nombre del equipo visitante y sus respectivas puntuaciones. • Si presionamos en el botón Nuevo nos lleva a la ventana para crear un nuevo partido. • En esta ventana podemos elegir el equipo local y visitante escribiendo el nombre del equipo en el campo de texto o presionando el botón de al lado del campo de texto nos aparece un PickerView con los nombres de cada equipo creado. Elegimos los nombres de España y Croacia cómo local y visitante. 74 • Escribimos la fecha del partido, el lugar dónde se realiza el partido y el número de tiempos. En la parte de hace el seguimiento podemos también escribirlo o elegirlo mediante el PickerView que aparece si presionamos el botón de al lado de su campo de texto. En esta ocasión elegiremos hacer el seguimiento de los dos equipos. • Si presionamos el botón Empezar nos lleva a la ventana dónde introduciremos los datos a cada jugador de cada equipo, siempre y cuando se hayan rellenado los campos de texto de equipo local, visitante, numero de tiempos, fecha y tipo de seguimiento. También nos avisa de error si se quiere hacer el seguimiento de un equipo no creado. • En esta pantalla nos encontramos con el número de los jugadores y los datos que podemos editar. Presionamos encima de un jugador para que cambie a color rojo y así saber que jugador estamos editando, les vamos insertando los datos mientras estamos visualizando el encuentro. Si hacemos el seguimiento de sólo un equipo nos muestra la misma información pero sólo para un equipo, el otro equipo sólo puede aumentar la puntuación e 1, 2 o 3 puntos o las faltas y tiempo muertos. • Si presionamos el botón T2 Si, T2 No, T3 Si o T3 No nos lleva a la pantalla de tiros dónde podemos marcar la posición del tiro acertado o fallado. Si el tiro es acertado el punto aparece en verde, si no aparece en rojo. Al presionar el botón guardar nos devuelve a la pantalla anterior. Si volvemos a puntuar nos aparecen los puntos marcados anteriormente durante el partido. • Si presionamos el botón Estadísticas vemos nos lleva a la pantalla dónde se muestran los datos del partido y de cada jugador durante este partido. El botón Eliminar está deshabilitado en este momento ya que 75 aún no ha finalizado el partido, si presionamos Volver nos devuelve a la pantalla anterior. • Si cuando acaba el tiempo presionamos el botón Fin del tiempo nos reinicia las etiquetas de faltas y tiempos muertos y cambia la etiqueta de número de tiempo con el siguiente tiempo. Si en el momento de presionar el botón es el último tiempo y las puntuaciones no son iguales nos lleva a la pantalla dónde se muestran los datos de partido y de cada jugador durante este partido. Si las puntuaciones eran iguales nos cambia la etiqueta de número de tiempo a TE1 (tiempo extra 1), si vuelve a suceder pasa a TE2. • Al finalizar el partido o presionar el botón estadísticas nos muestra la pantalla con el parcial de puntuaciones de cada equipo por tiempo, el resultado final, el lugar, la fecha y una lista para equipo los datos de cada jugador durante el partido. • Si presionamos encima de un jugador nos lleva a una pantalla con la imagen de todos sus tiros acertados o fallados durante el encuentro. • Si presionamos encima del botón Compartir nos aparece una pestaña con la opción de elegir una red social que tengamos y publicar la imagen de la pantalla actual mostrando los datos encabezada con un texto que informe sobre el nombre de los dos equipos, el lugar y la fecha del partido. • Si presionamos el botón Eliminar, nos pide confirmación para eliminarlo, al eliminarlo ya no aparece en la lista del menú partidos ni de partidos jugados. 76 • Al volver al menú principal podemos volver a acceder a estos detalles presionando encima del partido que se encuentra en la lista del menú de partidos o dentro del menú de partidos jugados por un mismo equipo. 6.4 Ejemplo de un partido real Aunque esta aplicación está diseñada sobretodo para equipos amateurs o profesionales de categorías inferiores he decidido hacer un ejemplo de evaluación con un partido disputado entre la selección española y la croata que actualmente están disputando el torneo europeo de baloncesto profesional, con esto quiero hacer entender que si funciona para equipos profesionales de élite también funcionará para equipos amateurs dónde el ritmo de juego es más lento y hay menos calidad técnica. Quiero mostrar los datos del partido creado con la aplicación y los datos del partido publicados en la web oficial del Eurobasket. 77 Datos de la web: 78 Datos de la aplicación: 79 Es difícil que coincidan todos los datos ya que hay datos que algunas personas cuentan y otras no cómo por ejemplo, tiros fuera de tiempo, tiros por acción continuada, robos de balón involuntarios, asistencias involuntarias, palmeos que se cuentan cómo rebotes o que no se aprecia quien los ha realizado, etc. Con esto quiero demostrar que también puede funcionar en partidos profesionales pero es difícil coincidir con las estadísticas oficiales ya que al fin y al cabo quien introduce los datos son personas y normalmente atienden a diferentes criterios, esto ocurre con las estadística de diferentes webs y organismos deportivos, no suelen coincidir todos los números exactamente. Al hacer estadísticas en equipos amateurs y profesionales de categorías inferiores las estadísticas que realizaría la aplicación serian únicas así que se podrían considerar cómo las oficiales y no habría discrepancias ya que no habría otras. 80 7. PLANIFICACION TEMPORAL 81 82 8. CONCLUSIONES En este apartado comentaremos las conclusiones que se pueden extraer del desarrollo de esta aplicación. En los primeros instantes que empecé a pensar el tipo de proyecto que quería realizar no lo ligué a nada relacionado con el deporte, casi siempre lo ligaba hacia algún tipo de ocio cómo los videojuegos o el cine. Es más adelante, después de mi primera charla con el tutor del proyecto, cuando se me ocurrió la idea de realizar una aplicación orientada al mundo del baloncesto. Desde bien pequeño empecé a jugar al baloncesto y poco a poco se fue convirtiendo en un deporte que me apasiona. Pero antes de cualquier idea sobre el tema de la aplicación había otra idea que ya no se iba a mover, era la de realizar una aplicación en iPhone. Siempre me ha entusiasmado la cantidad de aplicaciones que existen y las excelentes ideas que tienen unas pocas o muchas personas de satisfacer una necesidad que no existía hasta ese momento. Empecé a tener iPhone hace 2 años y desde entonces e disfrutado con todas y cada una de las aplicaciones que he utilizado. Cuando empecé con el proyecto y comencé a mirar webs sobre el lenguaje de programación me sorprendió la cantidad de tutoriales, foros, videos y ejemplos que existen a tu disposición para aprender y sobretodo para solucionar problemas que te pueden surgir en cualquier momento del desarrollo. En los inicios del desarrollo ves que la interfaz gráfica es muy fácil de realizar a tu gusto ya que dispones de un montón de herramientas que son muy fáciles de utilizar con el entorno de programación, reconozco que es el entorno que más me ha gustado en comparación con otros ya que fácilmente puedes crear interfaces muy buenas. Me ha gustado mucho trabajar con Xcode, sobretodo cuando van apareciendo los resultados que deseas después de trabajar durante horas y de ir solucionando todos los errores que te aparecen las primeras veces. He acabado “odiando“ muchas veces Xcode cuando ocurrían errores y no te 83 describía en que línea o parte de código se encontraba el fallo, pero poco a poco vas aprendiendo como son los errores y dónde ir mirando para saber la posición exacta del error. Me hubiera gustado que los foros en español sobre el lenguaje iOS fueran más completos y estuvieran más actualizados ya que la mayor parte de la información la he encontrado en inglés, aunque uno de mis foros mas visitados estaba en español. En definitiva, el lenguaje iOS me ha fascinado sobretodo por tener un entorno de desarrollo muy completo y fácil de usar para gente con pocos conocimientos del lenguaje pero también me ha “defraudado“ un poco el hecho que para resolver errores tengas muy pocas herramientas por parte del entorno y tengas que perder mucho tiempo buscando información sobre cómo solucionarlo. 8.1 Mejoras y opciones extra Me hubiera gustado incluir algunas mejoras y opciones extras pero el trabajo y situaciones personales me lo han impedido, aquí escribo algunas que me hubiera gustado realizar: - Poder diferenciar entre jugadores titulares y suplentes para tener menos botones en la pantalla y no cargarla demasiado. - Poder calcular el % de acierto de tiro en zonas del campo. - Diferenciar entre rebotes de ataque o defensa y entre faltas realizadas o recibidas. - Poder crear estadísticas de jugadores por cada tiempo de partido. - Calcular el % de acierto del tiro durante el partido 84 - Poder crear más de 12 jugadores, máximo 15, y poder elegir los 12 jugadores que van convocados a cada partido. - Mostrar los mejores del partido en cada uno de los diferentes aspectos del juego (valoración, puntuación, rebotes, etc.) - Mejorar la base de datos para mostrar más datos del juego - Poder obtener estadísticas de equipos o jugadores creados en otros dispositivos y añadirlos en nuestra base de datos. 85 86 9. RECURSOS UTILIZADOS 9.1 Hardware utilizado - Macbook blanco 13“ para desarrollar la aplicación - Iphone 4 para testear la aplicación 9.2 Software utilizado - Xcode 4.6.1 - Mac OS X 10.7.5 Lion - Adobe Fireworks CS6 - Microsoft Word 2011 Mac - Mozilla Firefox - Simulador iPhone (dentro de Xcode) - Adobe Reader XI 9.3 Páginas webs y tutoriales - www.manzanamagica.com - www.stackoverflow.com - www.youtube.com - https://developer.apple.com/ - www.ndscodecenter.com - http://es.wikipedia.org/ - www.apprendemos.com - http://www.imaginaformacion.com/ - http://www.iphonesdkarticles.com/ - http://nosoloweb.es/ - https://github.com/ - http://www.iphone4spain.com/ - www.google.es 87