2

我正在尝试使用CGAffineTransform. 缩放效果很好,但是这些点使用左上角作为(0,0)而不是左下角。像这样...

倒置图

通常我会简单地使用CGAffineTransformMakeScale(1,-1);,但因为我已经在执行比例,所以我不能将它添加到现有的转换中。

这是我当前的代码

- (CGAffineTransform)transformFromValueToScreen
{
    CGRect fromRect = self.valueSpace;
    CGRect viewRect = self.screenSpace;

    CGSize scales = CGSizeMake(viewRect.size.width/fromRect.size.width,
                               viewRect.size.height/fromRect.size.height);

    CGAffineTransform transform = CGAffineTransformMakeScale(scales.width, 
                                                             scales.height);

    return transform;
}
4

1 回答 1

6

我假设fromRect.originCGPointZero.

您需要一个复合变换,将原点移动到左下方,翻转 Y 轴,并应用您想要的缩放比例。

您可以使用修改变换的函数进行复合变换,如下所示:

- (CGAffineTransform)transformFromValueToScreen {
    CGRect fromRect = self.valueSpace;
    CGRect viewRect = self.screenSpace;

    CGSize scales = CGSizeMake(viewRect.size.width/fromRect.size.width,
                               viewRect.size.height/fromRect.size.height);

    CGAffineTransform transform = CGAffineTransformIdentity;

    // Move origin from upper left to lower left.
    transform = CGAffineTransformTranslate(transform, 0, fromRect.size.height);

    // Flip the sign of the Y axis.
    transform = CGAffineTransformScale(transform, 1, -1);

    // Apply value-to-screen scaling.
    transform = CGAffineTransformScale(transform, scales.width, scales.height);

    return transform;
}
于 2014-01-27T23:38:38.950 回答