gpt4 book ai didi

iphone - 使用 CGContextScaleCTM 时避免拉伸(stretch)描边

转载 作者:行者123 更新时间:2023-11-29 11:09:38 29 4
gpt4 key购买 nike

我在 drawRect 中绘制了一个形状,它存储在 CGMutablePathRef (shapeMutablePath) 中。每次调用 drawRect 时,形状都会被拉伸(stretch)以适应屏幕,并在其周围添加一个笔划边框。我想知道,如何在不拉伸(stretch)的情况下绘制笔划边界?即拉伸(stretch)shapeMutablePath,然后在其周围绘制笔划边框,以便每次绘制时宽度相同?我试过更改比例顺序以及添加和绘制路径无济于事。

- (void) drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);

CGContextSetRGBFillColor(context, 1.0000, 1.0000, 1.0000, 1.0000);
CGContextSetRGBStrokeColor(context,0.0000,0.0000,0.0000,1.0000);
CGContextSetLineWidth(context, DialogueTextViewLineWidth);

CGContextScaleCTM (context, self.frame.size.width / self.shapeMutablePathWidth, self.frame.size.height / self.shapeMutablePathHeight);
CGContextAddPath(context, self.shapeMutablePath);
CGContextDrawPath(context, kCGPathFillStroke);
CGContextRestoreGState(context);
}

最佳答案

而不是缩放 CTM 并使用原始路径:

CGContextScaleCTM (context, self.frame.size.width / self.shapeMutablePathWidth, self.frame.size.height / self.shapeMutablePathHeight);
CGContextAddPath(context, self.shapeMutablePath);

...创建一个转换后的路径并改用它:

CGAffineTransform trn = CGAffineTransformMakeScale(self.bounds.size.width / self.shapeMutablePathWidth, self.bounds.size.height / self.shapeMutablePathHeight);
CGPathRef transformedPath = CGPathCreateCopyByTransformingPath(self.shapeMutablePath, &trn);
CGContextAddPath(context, transformedPath);
CGPathRelease(transformedPath);

这将填充和描边相同的(缩放的)区域,但变换不会影响描边宽度。

顺便说一句您通常会使用边界而不是框架的大小来计算比例。

关于iphone - 使用 CGContextScaleCTM 时避免拉伸(stretch)描边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12108804/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com