在Core Graphics上下文中重绘时,Aspect Ratio会出现问题

时间:2013-10-29 12:57:18

标签: objective-c core-graphics drawrect cgcontext aspect-ratio

我正在CGContextRef图形上下文中重绘图像,但是,当我绘制图像时,它们的宽高比是错误的。在下图中,图形上下文是黑色方块(单独的UIView类),正在显示的图片是从它下面的红色轮播中选择的。我看了很多帖子,但无法弄清楚在哪里修复它。

enter image description here

这是我的drawRect方法。我不知道在哪里可以设置contentMode,因为没有UIImageView,只有UIImages.

- (void)drawRect:(CGRect)rect
{
    NSMutableDictionary *dna = _mini.dna;
    NSString *directory = @"FacialFeatures";

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, self.bounds);

    //flip the coordinates for Core Graphics coordinates
    CGContextScaleCTM(context, 1, -1);
    CGContextTranslateCTM(context, 0, -self.bounds.size.height);

    for (id key in dna) {
        NSString *value = [dna objectForKey:key];
        if (![value isEqualToString:@""]) {
            UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"%@/%@/%@", directory, key, value]];
            CGContextDrawImage(context, rect, image.CGImage);
        }
    }
}

对于奖金帮助,我也不知道为什么图形上下文的背景是黑色的。我已尝试在界面生成器和我的init方法中设置它,但似乎所有设置都被忽略。非常感谢。

2 个答案:

答案 0 :(得分:1)

您已使用

清除了矩形
CGContextClearRect(context, self.bounds);

这将使您的上下文和视图变得透明,检查您的超级视图的颜色可能是黑色。如果你想要它是白色的,你可以这样做

CGContextClearRect(context, rect);
CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);

图片拉伸的原因

CGContextDrawImage将缩放图像以适合指定的rect。因此,尝试以这样的方式提供矩形,以保持其宽高比。

这里我提供了一些使用一些计算来计算矩形或大小的链接
Resize image with keeping aspect ratio
UIImage aspect fit

答案 1 :(得分:0)

包括此行并检查上述方法: -

[super drawRect:rect];