Documentación

Anuncio
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
Descargar