Programa completo

main
Juan David Lopez Regalado 1 month ago
parent 537415d136
commit 7409db1c68

@ -733,3 +733,176 @@ El test que se realizó es acerca del estado de animo y ansiedad, el cuál luce
Para la parte de actividades, se requiere crear de nuevo un Swift File, con el nombre de ActiveTaskManager Para la parte de actividades, se requiere crear de nuevo un Swift File, con el nombre de ActiveTaskManager
La estructura para la creacion de las tareas activas es la misma a los formularios, sin embargo, como mencionamos anteriormente los desarrolladores crearon distintos módulos en el formato ingles, asi que para personas que hablan español, es necesario poner indicaciones antes de la actividad. En esta ocasión se pondran # actividades que abarcan las distintas áreas precargadas de ResearchKit.
EL fommato de archivo para actividades es el siguiente:
```
import Foundation
import ResearchKit
import ResearchKitUI
import ResearchKitActiveTask
import ResearchKitActiveTask_Private
class ActiveTaskManager {
static let shared = ActiveTaskManager()
func createActiveTasks() -> ORKOrderedTask {
return ORKOrderedTask(identifier: "activeTasks", steps: [])
}
}
```
en la función se irán colocando las actividades y seguido de step el orden en que se quiere mostrar.
Las actividades están variadas, en algunas de las áreas que permite, ResearchKit, como por ejemplo, *Motor Activities, Cognition, Speech, Hearing, Hand Dexterity, Vision* los ejemplos se pueden observar en el siguiente código.
```
import Foundation
import ResearchKit
import ResearchKitUI
import ResearchKitActiveTask
import ResearchKitActiveTask_Private
class ActiveTaskManager {
static let shared = ActiveTaskManager()
func createActiveTasks() -> ORKOrderedTask {
let bienvenido = ORKInstructionStep(identifier: "bienvenido")
bienvenido.title = "Bienvenido"
bienvenido.iconImage = UIImage(systemName: "hand.wave")
bienvenido.detailText = "Bienvenido a la sección de tareas activas. Aquí encontrarás diversas actividades que podrás realizar para obtener información sobre algunos aspectos de tu salud."
//Motor Activities
let tappingStep = ORKTappingIntervalStep(identifier: "tapping")
tappingStep.title = "Prueba de tapping"
tappingStep.detailText = "Toca repetidamente en las áreas designadas lo más rápido posible durante 10 segundos."
tappingStep.stepDuration = 10 // Duración en segundos
//Cognition
// Cognition - Trail Making (Solo números)
let trailMakingStep = ORKTrailmakingStep(identifier: "trail")
trailMakingStep.title = "Prueba de Trail Making"
trailMakingStep.detailText = "En este ejercicio, tendrás que conectar los círculos numerados en orden, lo más rápido posible."
let hanoitext = ORKInstructionStep(identifier: "towerOfHanoiInstructions")
hanoitext.title = "Torre de Hanoi"
hanoitext.iconImage = UIImage(systemName: "triangle")
hanoitext.detailText = "Transfiere los discos de la barra inicial a la barra final, siguiendo estas reglas:\n\n1. Solo puedes mover un disco a la vez.\n\n2. No puedes colocar un disco grande encima de uno más pequeño."
let towerOfHanoiStep = ORKTowerOfHanoiStep(identifier: "towerOfHanoiStep")
towerOfHanoiStep.numberOfDisks = 3
towerOfHanoiStep.isOptional = false
let flowerPatternInstructionStep = ORKInstructionStep(identifier: "flowerPatternInstructions")
flowerPatternInstructionStep.title = "Patrón de las Flores"
flowerPatternInstructionStep.iconImage = UIImage(systemName: "flower.fill")
flowerPatternInstructionStep.detailText = """
En esta tarea, verás un patrón formado por flores en una cuadrícula. Tu objetivo será recordar el orden en que aparecen y reproducirlo correctamente.
1. Observa el patrón de flores que aparece en la pantalla.
2. Memoriza el orden y la posición de cada flor.
3. Una vez que el patrón desaparezca, toca en las celdas de la cuadrícula para reproducir el orden que viste.
4. Trata de ser lo más preciso posible.
"""
let memoryStep = ORKSpatialSpanMemoryStep(identifier: "memory")
memoryStep.initialSpan = 2
memoryStep.minimumSpan = 2
memoryStep.maximumSpan = 3
memoryStep.playSpeed = 1
memoryStep.maximumTests = 3
memoryStep.maximumConsecutiveFailures = 10 // Asegúrate de que sea un número válido
// Audio Capture - Speech Recording Step
let speechRecognitionStep = ORKSpeechInNoiseStep(identifier: "speechRecognition")
speechRecognitionStep.title = "Prueba de Reconocimiento de Voz"
speechRecognitionStep.detailText = "Escucha el siguiente audio, después escribe lo que escuchaste."
let speechText = ORKQuestionStep(
identifier: "textoAudio",
title: "Escribe lo que escuchaste en el audio",
answer: {
let formatoTexto = ORKTextAnswerFormat(maximumLength: 500)
formatoTexto.multipleLines = true // Permite que el cuadro sea más grande
return formatoTexto
}()
)
speechText.isOptional = false
//Hearing
let toneStep = ORKToneAudiometryStep(identifier: "toneAudiometry")
toneStep.toneDuration = 10
toneStep.title = "Prueba de Audiometría de Tono"
toneStep.detailText = "En este ejercicio escucharás tonos a diferentes frecuencias y volúmenes. Por favor, indica cuándo puedas escuchar el tono y por cuál oido lo escuhas. El objetivo es evaluar tu capacidad auditiva."
//Hand Dexterity
let handStep = ORKHolePegTestPlaceStep(identifier: "hole")
handStep.title = "Prueba de Destreza Manual"
handStep.detailText = "En este ejercicio, debes insertar los pegs (barras) en los agujeros lo más rápido posible. Trata de ser preciso y rápido, y asegúrate de no dejar caer ninguna pieza."
handStep.numberOfPegs = 9
handStep.stepDuration = 30
let visionInstructionStep = ORKInstructionStep(identifier: "amslerGridInstructions")
visionInstructionStep.title = "Rejilla de Amsler"
visionInstructionStep.iconImage = UIImage(systemName: "eye.fill")
visionInstructionStep.detailText = """
En esta prueba, observa la rejilla de Amsler en la pantalla y responde a las preguntas a continuación.
1. Asegúrate de estar en un lugar cómodo y con buena iluminación.
2. Si usas gafas, póntelas antes de comenzar.
3. Mira la rejilla con ambos ojos, pero si es necesario, cierra un ojo a la vez.
4. Indica si ves alguna distorsión, línea torcida o áreas vacías.
5. cuando indiques sobre que areas hay distorsión, da swipe sobre la pantalla negra haceia la derecha.
"""
// Vision - Amsler Grid
let visionStep = ORKAmslerGridStep(identifier: "vision")
visionStep.stepDuration = 30
visionStep.title = "Prueba de la Rejilla de Amsler"
visionStep.detailText = "Este test se usa para detectar problemas visuales relacionados con la macula. Mira el centro de la rejilla y marca cualquier distorsión o área oscura que puedas ver en la cuadrícula."
let completionStep = ORKCompletionStep(identifier: "taskCompletion")
completionStep.title = "¡Tareas Completadas!"
completionStep.iconImage = UIImage(systemName: "checkmark.circle.fill")
completionStep.detailText = """
Has completado todas las tareas del estudio. ¡Gracias por tu participación!
Recuerda que tu contribución es muy valiosa para esta investigación.
"""
return ORKOrderedTask(identifier: "activeTasks", steps: [bienvenido, tappingStep, trailMakingStep, hanoitext, towerOfHanoiStep, flowerPatternInstructionStep, memoryStep, speechRecognitionStep, speechText, toneStep, handStep, visionInstructionStep, visionStep, completionStep])
}
}
```
Unicamente quedaría correr el programa y observar las distintas etapas desarrolladas, en caso de querer agregar o quitar es necesario cambiar el formato, además de agregar condicionales, o algunas cararcteristicas más a nuestras actividades.
Algunas imagenes de como se vería corriendo el simulador son las siguientes:
![](imagenes/simu1.png)
![](imagenes/simu1.png)
![](imagenes/simu1.png)
![](imagenes/simu1.png)
![](imagenes/simu1.png)
![](imagenes/simu1.png)
![](imagenes/simu1.png)
Así es como termina la introducción base a ResearchKit y las herramientas más importantes, sin embargo, esto está a tu creatividad y necesidad, puedes hacer test super grandes, formularios específicos, agregar imagenes a las preguntas, una infinidad de usos, es además que es multi variado, ya que este puede funcionar con frameworks como HealthKit y CareKit, y no solo podemos quedar hasta ahí, si no que todas las respuestas puedes ubirse a una base de datos, generar un CSV, JASON y más que nos ayudaran al procesamiento de los datos.

@ -7,32 +7,32 @@
objects = { objects = {
/* Begin PBXBuildFile section */ /* Begin PBXBuildFile section */
F59EA2C72CEEC25C00E6EF4C /* ResearchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2BE2CEEC24A00E6EF4C /* ResearchKit.framework */; }; 8EE55B902CEFDC0F00389B25 /* ResearchKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B892CEFDC0200389B25 /* ResearchKit.framework */; };
F59EA2C82CEEC25C00E6EF4C /* ResearchKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2BE2CEEC24A00E6EF4C /* ResearchKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 8EE55B912CEFDC0F00389B25 /* ResearchKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B892CEFDC0200389B25 /* ResearchKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F59EA2C92CEEC25C00E6EF4C /* ResearchKitActiveTask.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2C42CEEC24A00E6EF4C /* ResearchKitActiveTask.framework */; }; 8EE55B922CEFDC0F00389B25 /* ResearchKitActiveTask.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B8F2CEFDC0200389B25 /* ResearchKitActiveTask.framework */; };
F59EA2CA2CEEC25C00E6EF4C /* ResearchKitActiveTask.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2C42CEEC24A00E6EF4C /* ResearchKitActiveTask.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 8EE55B932CEFDC0F00389B25 /* ResearchKitActiveTask.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B8F2CEFDC0200389B25 /* ResearchKitActiveTask.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
F59EA2CB2CEEC25C00E6EF4C /* ResearchKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2C22CEEC24A00E6EF4C /* ResearchKitUI.framework */; }; 8EE55B942CEFDC0F00389B25 /* ResearchKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B8D2CEFDC0200389B25 /* ResearchKitUI.framework */; };
F59EA2CC2CEEC25C00E6EF4C /* ResearchKitUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F59EA2C22CEEC24A00E6EF4C /* ResearchKitUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 8EE55B952CEFDC0F00389B25 /* ResearchKitUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8EE55B8D2CEFDC0200389B25 /* ResearchKitUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */ /* Begin PBXContainerItemProxy section */
F59EA2BD2CEEC24A00E6EF4C /* PBXContainerItemProxy */ = { 8EE55B882CEFDC0200389B25 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */; containerPortal = 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */;
proxyType = 2; proxyType = 2;
remoteGlobalIDString = B183A5951A8535D100C76870; remoteGlobalIDString = B183A5951A8535D100C76870;
remoteInfo = ResearchKit; remoteInfo = ResearchKit;
}; };
F59EA2C12CEEC24A00E6EF4C /* PBXContainerItemProxy */ = { 8EE55B8C2CEFDC0200389B25 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */; containerPortal = 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */;
proxyType = 2; proxyType = 2;
remoteGlobalIDString = CA1C7A5A288B0C68004DAB3A; remoteGlobalIDString = CA1C7A5A288B0C68004DAB3A;
remoteInfo = ResearchKitUI; remoteInfo = ResearchKitUI;
}; };
F59EA2C32CEEC24A00E6EF4C /* PBXContainerItemProxy */ = { 8EE55B8E2CEFDC0200389B25 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy; isa = PBXContainerItemProxy;
containerPortal = F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */; containerPortal = 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */;
proxyType = 2; proxyType = 2;
remoteGlobalIDString = CAD08967289DD747007B2A98; remoteGlobalIDString = CAD08967289DD747007B2A98;
remoteInfo = ResearchKitActiveTask; remoteInfo = ResearchKitActiveTask;
@ -46,9 +46,9 @@
dstPath = ""; dstPath = "";
dstSubfolderSpec = 10; dstSubfolderSpec = 10;
files = ( files = (
F59EA2CC2CEEC25C00E6EF4C /* ResearchKitUI.framework in Embed Frameworks */, 8EE55B952CEFDC0F00389B25 /* ResearchKitUI.framework in Embed Frameworks */,
F59EA2C82CEEC25C00E6EF4C /* ResearchKit.framework in Embed Frameworks */, 8EE55B912CEFDC0F00389B25 /* ResearchKit.framework in Embed Frameworks */,
F59EA2CA2CEEC25C00E6EF4C /* ResearchKitActiveTask.framework in Embed Frameworks */, 8EE55B932CEFDC0F00389B25 /* ResearchKitActiveTask.framework in Embed Frameworks */,
); );
name = "Embed Frameworks"; name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -56,7 +56,7 @@
/* End PBXCopyFilesBuildPhase section */ /* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */ /* Begin PBXFileReference section */
F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ResearchKit.xcodeproj; path = "/Users/juandavidlopezregalado/Downloads/ResearchKit-main-3/ResearchKit.xcodeproj"; sourceTree = "<absolute>"; }; 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ResearchKit.xcodeproj; path = "/Users/JD2207/Downloads/ResearchKit-main/ResearchKit.xcodeproj"; sourceTree = "<absolute>"; };
F5DB42F02CDD93D100121599 /* RK-Journals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RK-Journals.app"; sourceTree = BUILT_PRODUCTS_DIR; }; F5DB42F02CDD93D100121599 /* RK-Journals.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "RK-Journals.app"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */ /* End PBXFileReference section */
@ -86,9 +86,9 @@
isa = PBXFrameworksBuildPhase; isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
F59EA2CB2CEEC25C00E6EF4C /* ResearchKitUI.framework in Frameworks */, 8EE55B942CEFDC0F00389B25 /* ResearchKitUI.framework in Frameworks */,
F59EA2C72CEEC25C00E6EF4C /* ResearchKit.framework in Frameworks */, 8EE55B902CEFDC0F00389B25 /* ResearchKit.framework in Frameworks */,
F59EA2C92CEEC25C00E6EF4C /* ResearchKitActiveTask.framework in Frameworks */, 8EE55B922CEFDC0F00389B25 /* ResearchKitActiveTask.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -102,12 +102,12 @@
name = Frameworks; name = Frameworks;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
F59EA2B62CEEC24A00E6EF4C /* Products */ = { 8EE55B812CEFDC0200389B25 /* Products */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F59EA2BE2CEEC24A00E6EF4C /* ResearchKit.framework */, 8EE55B892CEFDC0200389B25 /* ResearchKit.framework */,
F59EA2C22CEEC24A00E6EF4C /* ResearchKitUI.framework */, 8EE55B8D2CEFDC0200389B25 /* ResearchKitUI.framework */,
F59EA2C42CEEC24A00E6EF4C /* ResearchKitActiveTask.framework */, 8EE55B8F2CEFDC0200389B25 /* ResearchKitActiveTask.framework */,
); );
name = Products; name = Products;
sourceTree = "<group>"; sourceTree = "<group>";
@ -115,7 +115,7 @@
F5DB42E72CDD93D100121599 = { F5DB42E72CDD93D100121599 = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */, 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */,
F5DB42F22CDD93D100121599 /* RK-Journals */, F5DB42F22CDD93D100121599 /* RK-Journals */,
8E66ED762CE2605300A8F5D1 /* Frameworks */, 8E66ED762CE2605300A8F5D1 /* Frameworks */,
F5DB42F12CDD93D100121599 /* Products */, F5DB42F12CDD93D100121599 /* Products */,
@ -185,8 +185,8 @@
projectDirPath = ""; projectDirPath = "";
projectReferences = ( projectReferences = (
{ {
ProductGroup = F59EA2B62CEEC24A00E6EF4C /* Products */; ProductGroup = 8EE55B812CEFDC0200389B25 /* Products */;
ProjectRef = F59EA2B32CEEC24A00E6EF4C /* ResearchKit.xcodeproj */; ProjectRef = 8EE55B7E2CEFDC0200389B25 /* ResearchKit.xcodeproj */;
}, },
); );
projectRoot = ""; projectRoot = "";
@ -197,25 +197,25 @@
/* End PBXProject section */ /* End PBXProject section */
/* Begin PBXReferenceProxy section */ /* Begin PBXReferenceProxy section */
F59EA2BE2CEEC24A00E6EF4C /* ResearchKit.framework */ = { 8EE55B892CEFDC0200389B25 /* ResearchKit.framework */ = {
isa = PBXReferenceProxy; isa = PBXReferenceProxy;
fileType = wrapper.framework; fileType = wrapper.framework;
path = ResearchKit.framework; path = ResearchKit.framework;
remoteRef = F59EA2BD2CEEC24A00E6EF4C /* PBXContainerItemProxy */; remoteRef = 8EE55B882CEFDC0200389B25 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR; sourceTree = BUILT_PRODUCTS_DIR;
}; };
F59EA2C22CEEC24A00E6EF4C /* ResearchKitUI.framework */ = { 8EE55B8D2CEFDC0200389B25 /* ResearchKitUI.framework */ = {
isa = PBXReferenceProxy; isa = PBXReferenceProxy;
fileType = wrapper.framework; fileType = wrapper.framework;
path = ResearchKitUI.framework; path = ResearchKitUI.framework;
remoteRef = F59EA2C12CEEC24A00E6EF4C /* PBXContainerItemProxy */; remoteRef = 8EE55B8C2CEFDC0200389B25 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR; sourceTree = BUILT_PRODUCTS_DIR;
}; };
F59EA2C42CEEC24A00E6EF4C /* ResearchKitActiveTask.framework */ = { 8EE55B8F2CEFDC0200389B25 /* ResearchKitActiveTask.framework */ = {
isa = PBXReferenceProxy; isa = PBXReferenceProxy;
fileType = wrapper.framework; fileType = wrapper.framework;
path = ResearchKitActiveTask.framework; path = ResearchKitActiveTask.framework;
remoteRef = F59EA2C32CEEC24A00E6EF4C /* PBXContainerItemProxy */; remoteRef = 8EE55B8E2CEFDC0200389B25 /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR; sourceTree = BUILT_PRODUCTS_DIR;
}; };
/* End PBXReferenceProxy section */ /* End PBXReferenceProxy section */

@ -7,7 +7,7 @@
<key>RK-Journals.xcscheme_^#shared#^_</key> <key>RK-Journals.xcscheme_^#shared#^_</key>
<dict> <dict>
<key>orderHint</key> <key>orderHint</key>
<integer>5</integer> <integer>0</integer>
</dict> </dict>
</dict> </dict>
</dict> </dict>

@ -17,33 +17,117 @@ class ActiveTaskManager {
func createActiveTasks() -> ORKOrderedTask { func createActiveTasks() -> ORKOrderedTask {
let bienvenido = ORKInstructionStep(identifier: "bienvenido")
bienvenido.title = "Bienvenido"
bienvenido.iconImage = UIImage(systemName: "hand.wave")
bienvenido.detailText = "Bienvenido a la sección de tareas activas. Aquí encontrarás diversas actividades que podrás realizar para obtener información sobre algunos aspectos de tu salud."
//Motor Activities
let tappingStep = ORKTappingIntervalStep(identifier: "tapping")
tappingStep.title = "Prueba de tapping"
tappingStep.detailText = "Toca repetidamente en las áreas designadas lo más rápido posible durante 10 segundos."
tappingStep.stepDuration = 10 // Duración en segundos
//Cognition
// Cognition - Trail Making (Solo números)
let trailMakingStep = ORKTrailmakingStep(identifier: "trail")
trailMakingStep.title = "Prueba de Trail Making"
trailMakingStep.detailText = "En este ejercicio, tendrás que conectar los círculos numerados en orden, lo más rápido posible."
let hanoitext = ORKInstructionStep(identifier: "towerOfHanoiInstructions") let hanoitext = ORKInstructionStep(identifier: "towerOfHanoiInstructions")
hanoitext.title = "Torre de Hanoi" hanoitext.title = "Torre de Hanoi"
hanoitext.iconImage = UIImage(systemName: "triangle") hanoitext.iconImage = UIImage(systemName: "triangle")
hanoitext.detailText = "Transfiere los discos de la barra inicial a la barra final, siguiendo estas reglas:\n\n1. Solo puedes mover un disco a la vez.\n\n2. No puedes colocar un disco grande encima de uno más pequeño." hanoitext.detailText = "Transfiere los discos de la barra inicial a la barra final, siguiendo estas reglas:\n\n1. Solo puedes mover un disco a la vez.\n\n2. No puedes colocar un disco grande encima de uno más pequeño."
let towerOfHanoiStep = ORKTowerOfHanoiStep(identifier: "towerOfHanoiStep") let towerOfHanoiStep = ORKTowerOfHanoiStep(identifier: "towerOfHanoiStep")
towerOfHanoiStep.numberOfDisks = 3 towerOfHanoiStep.numberOfDisks = 3
towerOfHanoiStep.isOptional = false
let trailMakingStep = ORKTrailmakingStep(identifier: "trail")
let flowerPatternInstructionStep = ORKInstructionStep(identifier: "flowerPatternInstructions")
flowerPatternInstructionStep.title = "Patrón de las Flores"
flowerPatternInstructionStep.iconImage = UIImage(systemName: "flower.fill")
flowerPatternInstructionStep.detailText = """
En esta tarea, verás un patrón formado por flores en una cuadrícula. Tu objetivo será recordar el orden en que aparecen y reproducirlo correctamente.
1. Observa el patrón de flores que aparece en la pantalla.
2. Memoriza el orden y la posición de cada flor.
3. Una vez que el patrón desaparezca, toca en las celdas de la cuadrícula para reproducir el orden que viste.
4. Trata de ser lo más preciso posible.
"""
let memoryStep = ORKSpatialSpanMemoryStep(identifier: "memory") let memoryStep = ORKSpatialSpanMemoryStep(identifier: "memory")
memoryStep.title = "Memoria Visual"
memoryStep.text = "Recuerda el patrón que aparece en la pantalla."
memoryStep.initialSpan = 2 memoryStep.initialSpan = 2
memoryStep.minimumSpan = 2 memoryStep.minimumSpan = 2
memoryStep.maximumSpan = 5 memoryStep.maximumSpan = 3
memoryStep.playSpeed = 1 memoryStep.playSpeed = 1
memoryStep.maximumTests = 5 memoryStep.maximumTests = 3
memoryStep.maximumConsecutiveFailures = 1 memoryStep.maximumConsecutiveFailures = 10 // Asegúrate de que sea un número válido
let tappingStep = ORKTappingIntervalStep(identifier: "tapping") // Audio Capture - Speech Recording Step
tappingStep.title = "Prueba de tapping" let speechRecognitionStep = ORKSpeechInNoiseStep(identifier: "speechRecognition")
tappingStep.text = "Toca repetidamente en las áreas designadas lo más rápido posible durante 10 segundos." speechRecognitionStep.title = "Prueba de Reconocimiento de Voz"
tappingStep.stepDuration = 10 // Duración en segundos speechRecognitionStep.detailText = "Escucha el siguiente audio, después escribe lo que escuchaste."
let speechText = ORKQuestionStep(
identifier: "textoAudio",
title: "Escribe lo que escuchaste en el audio",
answer: {
let formatoTexto = ORKTextAnswerFormat(maximumLength: 500)
formatoTexto.multipleLines = true // Permite que el cuadro sea más grande
return formatoTexto
}()
)
speechText.isOptional = false
//Hearing
let toneStep = ORKToneAudiometryStep(identifier: "toneAudiometry")
toneStep.toneDuration = 10
toneStep.title = "Prueba de Audiometría de Tono"
toneStep.detailText = "En este ejercicio escucharás tonos a diferentes frecuencias y volúmenes. Por favor, indica cuándo puedas escuchar el tono y por cuál oido lo escuhas. El objetivo es evaluar tu capacidad auditiva."
//Hand Dexterity
let handStep = ORKHolePegTestPlaceStep(identifier: "hole")
handStep.title = "Prueba de Destreza Manual"
handStep.detailText = "En este ejercicio, debes insertar los pegs (barras) en los agujeros lo más rápido posible. Trata de ser preciso y rápido, y asegúrate de no dejar caer ninguna pieza."
handStep.numberOfPegs = 9
handStep.stepDuration = 30
let visionInstructionStep = ORKInstructionStep(identifier: "amslerGridInstructions")
visionInstructionStep.title = "Rejilla de Amsler"
visionInstructionStep.iconImage = UIImage(systemName: "eye.fill")
visionInstructionStep.detailText = """
En esta prueba, observa la rejilla de Amsler en la pantalla y responde a las preguntas a continuación.
1. Asegúrate de estar en un lugar cómodo y con buena iluminación.
2. Si usas gafas, póntelas antes de comenzar.
3. Mira la rejilla con ambos ojos, pero si es necesario, cierra un ojo a la vez.
4. Indica si ves alguna distorsión, línea torcida o áreas vacías.
5. cuando indiques sobre que areas hay distorsión, da swipe sobre la pantalla negra haceia la derecha.
"""
// Vision - Amsler Grid
let visionStep = ORKAmslerGridStep(identifier: "vision")
visionStep.stepDuration = 30
visionStep.title = "Prueba de la Rejilla de Amsler"
visionStep.detailText = "Este test se usa para detectar problemas visuales relacionados con la macula. Mira el centro de la rejilla y marca cualquier distorsión o área oscura que puedas ver en la cuadrícula."
let completionStep = ORKCompletionStep(identifier: "taskCompletion")
completionStep.title = "¡Tareas Completadas!"
completionStep.iconImage = UIImage(systemName: "checkmark.circle.fill")
completionStep.detailText = """
Has completado todas las tareas del estudio. ¡Gracias por tu participación!
Recuerda que tu contribución es muy valiosa para esta investigación.
"""
return ORKOrderedTask(identifier: "activeTasks", steps: [hanoitext, towerOfHanoiStep]) return ORKOrderedTask(identifier: "activeTasks", steps: [bienvenido, tappingStep, trailMakingStep, hanoitext, towerOfHanoiStep, flowerPatternInstructionStep, memoryStep, speechRecognitionStep, speechText, toneStep, handStep, visionInstructionStep, visionStep, completionStep])
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Loading…
Cancel
Save