【问题标题】:iOS draw gradient in part of the viewiOS 在部分视图中绘制渐变
【发布时间】:2011-12-29 05:35:56
【问题描述】:

我创建了一个自定义进度条,它继承了 UIView 并实现了 drawRect。我设法在整个视图上绘制了一个渐变。但是,我想绘制几个不同的渐变,每个渐变都在不同的位置。如何将CGContextDrawLinearGradient 限制为视图内的较小矩形?

glossGradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGPoint topCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), 0.0f);`
        CGPoint midCenter = CGPointMake(start + (CGRectGetMidX(currentBounds)/currentBounds.size.width), currentBounds.size.height);
        CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
        start = start + (values[i] / currentBounds.size.width);
        CGGradientRelease(glossGradient);
    }

【问题讨论】:

    标签: objective-c ios graphics


    【解决方案1】:

    你可以使用CGContectClipToRect来限制绘图区域

    然后对每个渐变做:

    CGContextSaveGState(currentContext);
    CGContextClipToRect(theRect); // theRect should be the area where you want to draw the gradient
    ... // gradient drawing code
    CGContextRestoreGState(currentContext);
    

    【讨论】:

      【解决方案2】:

      Quartz 2D Programming Guide中所述:

      当您绘制渐变时,Quartz 会填充当前上下文。绘画 渐变不同于使用颜色和图案,后者 用于描边和填充路径对象。结果,如果你想 你的渐变出现在一个特定的形状,你需要剪辑 相应的上下文。

      由于您想在矩形中绘制每个渐变,因此您需要为每个渐变和矩形执行以下操作:

      CGContextSaveGState(currentContext); {
          CGContextClipToRect(currentContext, currentBounds);
          CGContextDrawLinearGradient(currentContext, glossGradient, topCenter, midCenter, 0);
      } CGContextRestoreGState(currentContext);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-13
        • 1970-01-01
        • 2014-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-20
        • 1970-01-01
        相关资源
        最近更新 更多