0

進行中の変更をアニメーション化しようとしている進行状況ビューがあります。どうやってそれをやるの?以下は、進捗状況を描画するためのコードです。

前もって感謝します

- (void)drawRect:(CGRect)rect {
    // Drawing code.
    CGContextRef context = UIGraphicsGetCurrentContext();

    // draw the background
    CGContextSaveGState(context);
    UIBezierPath *outerPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:0];
    [outerPath addClip];

    CGPoint backgroundStartPoint = CGPointMake(0.0f, 0.0f);
    CGPoint backgroundEndPoint = CGPointMake(0.0f, CGRectGetHeight(rect));
    CGContextDrawLinearGradient(context, _backgroundGradient, backgroundStartPoint, backgroundEndPoint, 0);

    CGContextRestoreGState(context);

    // draw the progress
    CGContextSaveGState(context);
    UIBezierPath *innerPath = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, 1.0f, 1.0f) cornerRadius: 0];
    [innerPath addClip];

    [_glossTintColor setFill];
    CGRect progressRect = CGRectMake(0, 0, CGRectGetWidth(rect)*_progress, CGRectGetHeight(rect));
    CGContextFillRect(context, progressRect);

    CGContextRestoreGState(context);
}
4

1 に答える 1

1

進行状況が変わるたびに、を使用して再描画をトリガーします[view setNeedsDisplay];

UIViewリファレンスを参照してくださいsetNeedsDisplay

たとえば、作成したカスタムビューに、というプロパティがprogressあり、インスタンス変数は。という名前であるとします_progress。また、プロパティがイベント/タイマー/追加のスレッドによって更新されると仮定しましょう。

- (void)setProgress:(float)progress
{
    _progress = progress;
    [self setNeedsDisplay];
}

これは元のセッターをオーバーライドし、上記の機能を追加します。

于 2012-06-09T12:34:35.887 に答える