gpt4 book ai didi

iphone - 使用路径剪切图像的不同部分

转载 作者:行者123 更新时间:2023-12-03 21:11:51 26 4
gpt4 key购买 nike

我最近问了一个有关通过 View 的 drawRect 方法中的路径剪切图像的问题。

iPhone clip image with path

Krasnyk 的代码复制如下。

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
//or for e.g. CGPathAddRect(path, NULL, CGRectInset([self bounds], 10, 20));
CGPathAddEllipseInRect(path, NULL, [self bounds]);
CGContextAddPath(context, path);
CGContextClip(context);
CGPathRelease(path);
[[UIImage imageNamed:@"GC.png"] drawInRect:[self bounds]];
}

效果非常好。但是,当我的图像大于 View 本身时,如何显示图像的不同部分?

我尝试通过翻译调整椭圆和/或 UIImage drawInRect 的位置(如上面的边界所示),但出现了一些我无法解释的复杂效果(不需要的剪裁、奇怪的椭圆大小)。

<小时/>

编辑:也许我可以回答我自己的问题。我可以尝试使用drawAtPoint 而不是drawInRect 吗?或者drawInRect并将原点设置为不同的位置,但同时扩大矩形的大小?

当我绘制比 View 中显示的更大的矩形时,这是否会导致性能损失?

最佳答案

听起来你已经自己弄清楚了。你应该使用drawAtPoint。 drawInRect 将缩放图像以适合目标矩形,这在计算上更加昂贵。假设您的图像比您的 View 大,您将向drawAtPoint传递负的x和y值,以便剪切图像的内部部分。

下面的示例应在您的 View 中显示图像的中心部分:

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, NULL, [self bounds]);
CGContextAddPath(context, path);
CGContextClip(context);
CGPathRelease(path);
UIImage *bigImage = [UIImage imageNamed:@"GC.png"];
CGPoint topLeftOffset = CGPointMake((self.bounds.size.width - bigImage.size.width) / 2,(self.bounds.size.height - bigImage.size.height) / 2);
[bigImage drawAtPoint: topLeftOffset];

}

关于iphone - 使用路径剪切图像的不同部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2661376/

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