PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 24 → propriété ..zoom sous iOS
propriété ..zoom sous iOS
Débuté par Claude, 25 juil. 2018 09:10 - 2 réponses
Posté le 25 juillet 2018 - 09:10
Bonjour à toutes et à tous,
Je rencontre un problème dans une application mobile pour Android et iOS développée avec Windev Mobile 23 (53k).
Dans une fenêtre j'ai un champ carte (Google maps) que je traite avec les fonctions WL. Je dois selon plusieurs paliers de pourcentage de zoom de la carte, afficher des couches de marqueurs supplémentaires.
Pour ce faire, dans un thread j'appelle une procédure qui me retourne la propriété ..zoom de la carte et qui déclenche selon cette valeur la création de ma couche de marqueurs (ou la suppression).
ThreadMode(threadAuto)
ThreadExecute("ThreadActuCarte", threadNormal, ThreadAfficherMarqueursSurZoom)


Procedure ThreadAfficherMarqueursSurZoom()

bThreadCarteEnVie est un booléen = Vrai
TANTQUE bThreadCarteEnVie

ExécuteThreadPrincipal(getCarteZoom)

// AFFICHE ou EFFACE LES POIS DES STATIONNEMENTS selon facteur de ZOOM
SI gnZoomEnCours >= _POI_ZOOM_AFFICHAGE_STATIONNEMENTS ALORS
AfficherMarqueurs_Stationnements()
SINON
SI gnNBMarqueur_Stationnements > 0 ALORS
SI gnMarqueur_Sélectionné_Type = _POI_STATIONNEMENTS ET ExécuteThreadPrincipal(ThreadGetEtatAgrandieCarte) = Faux ALORS
ExécuteThreadPrincipal(Déselectionne_Marqueur)
ExécuteThreadPrincipal(AgrandirRéduireCarte)
FIN
ExécuteThreadPrincipal(EffacerGroupeMarqueurs,_POI_STATIONNEMENTS)
ThreadPause(1s)
FIN
FIN

//##############################################################################
//# Boucle d'attente et de gestion de l'arrêt du Thread
//##############################################################################
ChronoDébut(2)
TANTQUE bThreadCarteEnVie _ET_ ( ChronoValeur(2) < 3000 )
ThreadPause(50cs)
// Test de la condition de fin du thread
SI gbActualisation_Auto_Carte_Activé = Faux ALORS
bThreadCarteEnVie = Faux
Trace("--[ ThreadActuCarte ] Arrêt du thread de la CARTE --")
FIN
FIN
ChronoFin(2)
//-----------------------------------------

FIN


Procedure getCarteZoom()

gnZoomEnCours = CARTE..Zoom
PositionCarteXY1 = CarteInfoXY(CARTE, 0, 0)
PositionCarteXY2 = CarteInfoXY(CARTE, CARTE..Largeur, CARTE..Hauteur)


En WL j'ai trouvé que ce moyen pour intercepter le changement de zoom.
Si quelqu'un connait une autre solution je suis preneur.

Sous le simulateur Windev, l'ensemble fonctionne bien pour Android et iOS. Sur les smartphones Android c'est également OK, mais avec les iPhones la propriété ..zoom de la carte renvoi toujours -1 et donc l'affichage de mes marqueurs n'est pas effectué.
Quelqu'un a-t-il déjà rencontré ce problème ou a-t-il une piste ?

Petite précision, pour Android je maîtrise l'ensemble, création et déploiement de l'APK sur le PlayStore ; Par contre pour iOS, je fournis la génération WinDev et mon client s'occupe de la compilation sous XCode et du déploiement sur l'Appel Store. Il est donc compliqué de faire une multitude de tests sur iPhone pour identifier le problème.

Merci d'avance

Bien cordialement,
Claude
Membre enregistré
92 messages
Posté le 26 juillet 2018 - 10:57
Salut
Question bête : pourquoi utiliser un thread pour appeler getCarteZoom() ?
En général, je ne les utilise que sous Universal. Sous Android et iOS j'ai du mal à les gérer.
...d'autant qu'ici, sauf erreur de ma part, il s'agit de threads dans un thread !!!

Au passage, est-ce que threadPause fonctionne vraiment ici sous iOS et Android ?
Sous Universal je l'utilise pour temporiser mes procédures mais sous iOS ça n'a aucun effet et sous Android, ça plante.
Il me faut alors utiliser multitache(-1) dans une boucle ChronoDébut/ChronoFin comme ici.
Posté le 11 août 2018 - 17:02
Salut Dav.
>> pourquoi utiliser un thread pour appeler getCarteZoom() ?
Le but globale est de récupérer continuellement la valeur du zoom pour pouvoir afficher ou cacher une couche de certains POIs uniquement à partir d'une certaine valeur de zoom. J'appelle getCarteZoom() dans un Thread pour effectuer en permanence cette lecture et déclencher les autres actions. Le problème c'est qu'en utilisant uniquement les fonctions WL. de gestion du champs carte, je n'arrive pas à intercepter le changement de zoom par un événement. Certainement possible en utilisant du JavaScript, mais là on rentre dans un autre monde.

il s'agit de threads dans un thread !!!

Oui et Non, le Thread principal (ExécuteThreadPrincipal) est le thread principal l'application en cours.
Le thread secondaire "ThreadActuCarte" est un processus lancé en parallèle de l'application en cours et dans mon cas uniquement exécuté dans le périmètre de la fenêtre carte.

>> Au passage, est-ce que threadPause fonctionne vraiment ici sous iOS et Android
Oui ça fonctionne. Je n'ai pour le moment rencontré aucun problème ni plantage sous Android ou iOS.

Claude