我正在尝试使用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;
}
最佳答案
我假设fromRect.origin
是CGPointZero
。
您需要一个复合变换,将原点移动到左下角,翻转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;
}
关于ios - 如何使用CGAffineTransform缩放比例并同时翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394006/