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 回答