web-dev-qa-db-fra.com

UIProgressView piste personnalisée et des images de progression dans iOS 7.1

iOS 7.1 semble avoir rompu les propriétés de l'image personnalisée dans UIProgressView. Le code utilisé pour personnaliser avec succès les vues de progression donne désormais l'apparence par défaut.

J'ai mis en place un exemple de projet qui fait cela dans viewDidLoad:

self.progressView.frame = CGRectMake(self.progressView.frame.Origin.x, self.progressView.frame.Origin.y, self.progressView.frame.size.width, 9);
UIImage *img = [UIImage imageNamed:@"progress_bar_fill.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
self.progressView.progressImage = img;

img = [UIImage imageNamed:@"progress_bar_empty.png"];
img = [img resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)];
self.progressView.trackImage = img;

J'ai toujours l'apparence par défaut. J'ai parcouru et vérifié que img n'est pas nul comme prévu. Que se passe-t-il?

MISE À JOUR: Il y a un OpenRadar pour cela, et j'ai également déposé mon propre radar avec un exemple de projet.

MISE À JOUR 2: Comme indiqué par Axy ci-dessous, vous devez l'ajouter pour que JEProgressView fonctionne correctement:

_progressBar.tintColor = [UIColor clearColor];
50
Tom Hamming

C'est très ennuyeux. Je n'ai pas trouvé de moyen de résoudre ce problème sans sous-classer UIProgressView.

Quoi qu'il en soit, voici comment j'ai résolu ce problème: https://Gist.github.com/JohnEstropia/9482567

Vous devrez changer les occurrences de UIProgressView en JEProgressView, y compris celles des NIB et des storyboards.

Fondamentalement, vous devez forcer l'affectation directe des images aux enfants UIProgressViewUIImageViews.

La sous-classe est nécessaire pour remplacer layoutSubviews, où vous ajustez les hauteurs des images vues en fonction des tailles d'image.

47
John Estropia

Vous avez raison. Ce bug est présent depuis que 7.1 a fait son apparition dans la graine Xcode 5.1 1. J'ai soumis (et resoumis) le même bug pour les 5 graines de Xcode 5.1, et maintenant sur Xcode 5.1. Mais Apple ne l'a pas corrigé.

Veuillez également soumettre ce bogue! Vous pouvez vous référer à mon bug si vous le souhaitez: 15547259. Plus c'est mieux, mieux c'est! Je considère cela comme une rupture grave, car cela signifie qu'une application qui fonctionnait bien est maintenant cassée (si elle utilise une vue de progression avec un progressImage).

5
matt

J'ai utilisé la solution John Estropia, mais elle montrait la barre de teinte bleue en superposition à la mienne, avec un effet graphique assez étrange.

J'ai ajouté

_progressBar.tintColor = [UIColor clearColor];

et ça s'est très bien passé. Merci pour la solution man.

2
Axy

Bonjour amis, j'ai utilisé le code suivant pour ajouter UIProgressView dans mon application:

UIProgressView *progressView;
progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];      
progressView.progressTintColor[UIColor colorWithRed:187.0/255 green:160.0/255 blue:209.0/255 alpha:1.0];
[[progressView layer]setCornerRadius:10.0f];
[[progressView layer]setBorderWidth:2.0f];
[[progressView layer]setMasksToBounds:TRUE];
progressView.clipsToBounds = YES;
[[progressView layer]setFrame:CGRectMake(30, 295, 260, 25)];[[progressView     layer]setBorderColor[UIColor whiteColor].CGColor]; 
progressView.trackTintColor = [UIColor clearColor];
[progressView setProgress: (float)count/15 animated:YES];

J'espère que le code vous sera utile, je l'ai trouvé ici: Source du code

2
improgrammer

J'ai essayé d'implémenter les fichiers JEProgressView de John Estropia - mais cela ne fonctionne pas. J'ai dû faire quelque chose de mal - mais je suis un peu nouveau sur ce point. Quelqu'un peut-il expliquer exactement comment procéder? Je sais que cela pourrait être une question stupide - mais après beaucoup de recherches sur Google, j'ai pensé que demander était le seul moyen.

1
Glenn Sønderskov

Avec Xcode5, il est désormais possible de créer des images redimensionnables avec Interface Builder aussi. Nous pouvons spécifier la direction de redimensionnement et l'encart de contenu et sélectionner la zone à étirer directement dans le générateur d'interface.

Pour bénéficier de cette fonctionnalité, vous devez utiliser Asset Catalog pour l'image que vous souhaitez redimensionner. enter image description hereenter image description hereenter image description hereenter image description here

0
पवन

Pour moi, cela a fonctionné pour iOS version 7.1 et supérieure pour l'image de progression:

if ([[UIDevice currentDevice] systemVersion] >= 7)
    self.progressView.tintColor = [UIColor colorWithPatternImage:img];
0
Aanabidden

J'ai également attrapé ce bug. J'ai essayé de le réparer en jouant avec les propriétés UIProgressView mais sans résultat. La solution Estropia de John publiée ci-dessus, ne fonctionne pas non plus pour moi, peut-être qu'elle ne prend pas en charge la disposition automatique, j'ai donc créé ma propre solution temporaire pour contourner ce bogue. https://github.com/ninjaproger/AKProgressView

0
ninjaproger