sob*_*dio 1 cgaffinetransform ios cgaffinetransformscale
我正在尝试使用a转换一个点数组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;
}
Run Code Online (Sandbox Code Playgroud)
我假设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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4727 次 |
| 最近记录: |