web-dev-qa-db-ja.com

iOS 7.1のUIProgressViewカスタムトラックおよび進行状況画像

iOS 7.1では、UIProgressViewのカスタム画像プロパティが壊れているようです。進行状況ビューを正常にカスタマイズするために使用されていたコードは、デフォルトの外観になりました。

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;

まだデフォルトの外観が得られます。 imgが期待どおり非nilであることを確認しました。どうしたの?

更新: OpenRadar があります。また、サンプルプロジェクトで完全なレーダーを提出しました。

更新2: 以下のAxyで述べたように、これを追加してJEProgressViewを正しく動作させる必要があります。

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

これは非常に迷惑です。 UIProgressViewをサブクラス化せずにこれを修正する方法を見つけられませんでした。

とにかくこれを修正した方法は次のとおりです。 https://Gist.github.com/JohnEstropia/9482567

UIProgressViewの出現を、NIBおよびストーリーボードの出現を含め、JEProgressViewに変更する必要があります。

基本的に、UIProgressViewの子UIImageViewsに直接画像を強制的に割り当てる必要があります。

サブクラスは、layoutSubviewsをオーバーライドするために必要です。この場合、画像サイズに応じてimageViewsの高さを調整します。

47
John Estropia

あなたは正しいです。このバグは、7.1がXcode 5.1シード1に最初に登場して以来存在していました。私は、Xcode 5.1の5つのシードすべてに対して同じバグを送信(および再送信)しました。しかしAppleは修正しませんでした。

このバグも送信してください!あなたが好きなら私のバグを参照することができます:15547259。より良い!これは重大な破損と見なします。これは、正常に動作していたアプリが現在破損していることを意味するためです(progressImageで進行状況ビューを使用する場合)。

5
matt

私はジョン・エストロピアのソリューションを使用しましたが、青味がかったバーが私のオーバーレイに表示され、かなり奇妙なグラフィカル効果がありました。

追加した

_progressBar.tintColor = [UIColor clearColor];

そしてそれはうまくいきました。ソリューションマンに感謝します。

2
Axy

こんにちは、私はアプリにUIProgressViewを追加するために次のコードを使用しました:

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];

コードがあなたに役立つことを願っています、私はここでそれを見つけました: コードのソース

2
improgrammer

John EstropiaのJEProgressViewファイルを実装しようとしましたが、うまくいきません。私は何か間違ったことをしたに違いない-しかし、私はこれに少し慣れていない。誰かがこれを正確に行う方法を説明できますか?馬鹿げた質問かもしれませんが、たくさんのグーグル検索の後、質問することが唯一の方法だと思いました。

1

Xcode5では、Interface Builderでもサイズ変更可能な画像を作成できるようになりました。サイズ変更の方向とコンテンツインセットを指定し、インターフェイスビルダー内で構造化する領域を選択できます。

この機能を利用するには、サイズを変更する画像にAsset Catalogを使用します。 enter image description hereenter image description hereenter image description hereenter image description here

0
पवन

私にとっては、これは進行状況イメージのiOSバージョン7.1以上で機能しました:

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

私もこのバグをキャッチしています。 UIProgressViewのプロパティで遊んで修正しようとしましたが、結果はありませんでした。上記のJohnのEstropiaソリューションも機能しません。自動レイアウトをサポートしていない可能性があるため、このバグを回避するための一時的なソリューションを独自に作成しました。 https://github.com/ninjaproger/AKProgressView

0
ninjaproger