web-dev-qa-db-fra.com

Existe-t-il un ActivityIndicator dans WatchKit pour Apple Watch?

Existe-t-il un ActivityIndicator (ou quelque chose comme ça) dans WatchKit pour Apple Watch? Comment donnez-vous tous à l'utilisateur des commentaires sur une activité de fond plus durable?

29
stk

Modifier : Cette réponse a été initialement publiée avant le introduction de Apple Regarder les modèles avec connectivité cellulaire et wifi, et peut donc ne plus s'appliquer aux modèles plus récents de l'appareil (compte tenu des améliorations significatives des performances).


Ce fil sur les Apple a une réponse faisant autorité d'un ingénieur Apple expliquant pourquoi vous ne devriez pas effectuer d'opérations réseau avec Apple Watch.

Il y a deux grandes raisons de ne pas effectuer d'opérations de mise en réseau à partir de votre application/extension de surveillance:

  1. Les utilisateurs n'interagissent avec leurs montres que pendant une brève période. Voir les directives d'interface humaine sur celui-ci.

    Si vous mesurez les interactions avec votre application iOS en quelques minutes, vous pouvez vous attendre à ce que les interactions avec votre application WatchKit soient mesurées en quelques secondes. Les interactions doivent donc être brèves et les interfaces doivent être simples.

  2. Le système peut se bloquer si la requête réseau ne se termine pas.

    Notre recommandation est qu'en général, vous ne devez pas effectuer d'opérations de mise en réseau complexes à l'intérieur d'une extension WatchKit ...

    [Apple recommande aux développeurs] de disposer d'un processus unique chargé de mettre à jour les informations de votre base de données (probablement votre application iOS), puis vos extensions auraient (essentiellement) un accès en lecture seule à cette base de données [en cache] ... .


Cela étant dit. Si vous avez vraiment besoin d'un UIActivityIndicator, rdar: // 19363748 (je ne pense pas que celui-ci ait été ouvert au radar), les développeurs ont déjà déposé des demandes de support officiel.

Vous pouvez créer une série d'images dans le style d'indicateur d'activité de votre choix, puis les animer à l'aide du startAnimatingWithImagesInRange:duration:repeatCount: API. Voir l'application Lister d'Apple pour un exemple d'animation wkinterfaceimage .

Alternativement, regardez ici pour un tutoriel d'animation WatchKit et graphiques "spinner" inclus .

15
Samuel Spencer

Juste pour ajouter aux options, j'ai créé un projet JBWatchActivityIndicator sur GitHub qui vous permet de générer vos propres séquences d'images: https://github.com/mikeswanson/JBWatchActivityIndicator

Il comprend également des animations d'indicateur d'activité de type Apple si vous ne souhaitez pas créer le vôtre.

18
Mike Swanson

J'ai construit un indicateur d'activité simple pour la Apple Watch, disponible ici https://github.com/tijoinc/WatchActivityIndicator

5
Tim Johnsen

Il n'y a pas de méthode pour afficher ActivityIndicator dans WatchKit Framework. Cependant, vous pouvez préparer une image circulaire et créer facilement vous-même une animation infinie. Préparez des images et nommez-les comme ceci frame-0, frame-1, frame-2...frame-n

puis dans votre code:

    [self.yourInterfaceImage setImageNamed:@"firstFrame-"]; //setting first frame
    [self.yourInterfaceImage startAnimatingWithImagesInRange:[self.model imageRange]
                                               duration:0.4
                                            repeatCount:0];
    // [self.model imageRange] will return NSRange from 0 to n
    // repeatCount == 0 means infinity. Of course you can set some limit, like 100.

J'espère que cela t'aides.

4
lvp

À mon avis, essayer de créer votre propre Spinner utilise des ressources excessives. Si Apple pensait que c'était une bonne idée, ils l'auraient suggérée.

J'aurais plutôt juste une image que vous ajustez l'Alpha. Utilisez un booléen pour voir si vous devez ajouter ou soustraire Alpha.

if (add)
    {
        count=count+5;
        if (count==100)
        {
            add=false;
        }
    }
    else
    {
        count=count-5;
        if (count==0)
        {
            add=true;
        }
    }

    float thealpha=((float)count/100);
    [self.scanb setAlpha:thealpha];

}

2
Belboz