2013-09-24 8 views
10

私は、これはすでにここに百回について聞かれたけど、私は他の質問では、適切な答えを見つけるcouldn't。iOS7のカスタムUIProgressViewは不可能ですか?

私の問題は私のUIProgressViewの高さです。 iOS6ではすべてが期待どおりに機能しましたが、現在iOS7では何も問題ありません。

私は次のことを試してみました:のdrawRect-方法でカスタムレイアウトを1.Setting

はiOS6で魔法のように機能しますが、iOS7に進行状況が100%に設定されています最初からバーは非常に薄いです。また、iOS7の下で動作していないUIProgressView外観

progressImagetrackImageプロパティとレイアウトを2.Setting

  • 。ここでバーの進行は最初から100%に設定されています。このようにするべきだと書いている人もいますが、iOS7ではそれを確認できません。

    • 初期化のためにinitWithProgressStyleを3.Using、その後

    はiOS6およびiOS7の下で私のために働いていない進捗ビューの枠を設定します。 iOS7では、バーはちょうど非常にスリムです。

    バーは100%であるか、メガスリムなので、今は私にとってはかなりイライラしています。誰でも私の進捗状況の古いレイアウトに到達するための提案を私に与えることができます。私はそれが可能でなければならないと思う私はiPhone(iOS7がインストールされている)で私のSpotifyアプリを見て、進捗状況は前と同じように見えるので。

    enter image description here

    ありがとうございました!

+0

残念ながら、iOS7 APIでは多くのUIの制限が導入されており、開発者はアプリをまさにストックアプリのように見えるように設計する必要があります。さようなら、創造性へ。良いニュースは、常にあなた自身のビューを作成し、独自のコントロールを作成し、標準のものに限定されないことです。ちょうど私たちのために働く。 – Bms270

+3

lol @「さようなら創造性」 – dmur

+0

代わりに、「さようなら、独創性**」と言います。 iOS 7の制約ガイドラインからアプリの理想的なビジュアルデザインを見つけることは、私の意見では創造性の一形態です。 –

答えて

18

さて、問題はiOS6 UIProgressViewとiOS7 UIProgressViewが異なる内部サブビュー構造を有する縫い目です。 iOS6プログレスビューは、子ビュー(またはマイナービュー)のない単一のビューです.iOS7プログレスビューには、プログレスバーと背景を描画するための追加のサブビューはほとんどありません。

iOS7でUIProgressViewのすべてのサブビューを削除すると、drawRect:メソッドは以前と同じようにiOS6で動作しますが、プログレスバーとバックグラウンドを含むプログレスビューのコンテンツを描画する責任があります。

- (id) initWithCoder: (NSCoder*)aDecoder 
{ 
    if(self=[super initWithCoder: aDecoder]) 
    { 
      // Also you can setup height of your progress here 
      // self.frame = CGRectMake(0,0,100,yourHeight); 

     NSArray *subViews = self.subviews; 
     for(UIView *view in subViews) 
     { 
      [view removeFromSuperview]; 
     } 
    } 
    return self; 
} 
+1

これは私のために働いた!私は 'initWithFrame'を使用しなければなりませんでしたが、 –

4

私は、この問題の回避策のようなものを作りました。私は誰かが正常なUIProgressViewの良い答えを与えることができることを願っています。

私は、角の丸いUIViewサブクラスを作成し、内部にはその進行状況に応じてサイズを変更するビューを作成しました。私は背景色だけを使用しますが、画像も可能です。 Here'sコード:

#import "CustomProgressView.h" 
#import <QuartzCore/QuartzCore.h> 

@interface CustomProgressView() 

@property (nonatomic, retain) UIView *progressView; 

@end 

@implementation CustomProgressView 

@synthesize progressColor,trackColor,progressView,progress; 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     self.layer.cornerRadius = 5; 
     // clipsToBounds is important to stop the progressView from covering the original view and its round corners 
     self.clipsToBounds = YES; 

     self.progressView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, frame.size.height)]; 
     [self addSubview:self.progressView]; 
    } 

    return self; 
} 

-(void)setProgressColor:(UIColor *)theProgressColor { 
    self.progressView.backgroundColor = theProgressColor; 
    progressColor = theProgressColor; 
} 

-(void)setTrackColor:(UIColor *)theTrackColor { 
    self.backgroundColor = theTrackColor; 
    trackColor = theTrackColor; 
} 

-(void)setProgress:(float)theProgress { 
    progress = theProgress; 
    CGRect theFrame = self.progressView.frame; 
    theFrame.size.width = self.frame.size.width * theProgress; 
    self.progressView.frame = theFrame; 
} 
@end 
2

カスタムUIProgressViewがあり、独自のdrawRectがバックグラウンドプロセスから更新されています。 iOS6ではすべてが動作していましたが、iOS7ではプログレスバーが更新されませんでした。

私はsetProgress

このような
[self.loadingProgress setProgress:pv.floatValue]; 
[self.loadingProgress layoutSublayersOfLayer:self.loadingProgress.layer]; 

layoutSublayersOfLayer権利を追加して、それが魅力のように働きました。

私はこれが誰かを助けてくれることを願っています。

1

は頭痛を避け、この優れたライブラリを使用します。YLProgressBarフォルダから

YLProgressBar

  1. コピーYLProgressBar.hとYLProgressBar.mを。ファイル内
  2. #import "YLProgressBar.h"(s)はあなたが幅をサポートしています素敵な、完全に機能するプログレスバーを持っている
  3. progressBar.type = YLProgressBarTypeRounded; progressBar.progressTintColor = [UIColor greenColor]; progressBar.stripesOrientation = YLProgressBarStripesOrientationVertical; progressBar.stripesDirection = YLProgressBarStripesDirectionLeft;
  4. コードまたはXIBのいずれかによって、あなたのプログレスバーを追加プログレスバー
  5. を使用したいです、高さ、変更。
+0

あなたの提案に感謝します!ライブラリはかなりいいね。場合によっては、外部ライブラリを使用することは望ましくない。顧客によって。特に必要な機能を得るために必要でない場合は特にそうです。 –

+0

ライブラリへのリンクを投稿するだけではありません。それがどのように使用できるかを示します(質問に合わせて)。それ以外の場合は、これは単なるリンクオンリーの回答です。 –

関連する問題