ios - 如何使用CGAffineTransform缩放比例并同时翻转

标签 ios cgaffinetransform cgaffinetransformscale

我正在尝试使用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.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;
}

关于ios - 如何使用CGAffineTransform缩放比例并同时翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21394006/

相关文章:

ios - 基于导航的 iOS 应用程序应该在哪里跟踪页面浏览量 - viewDidLoad 或 viewWillAppear?

ios - 如何将 AdBannerView 添加到 UITabViewController?

ios - UICollectionView 中的单元格重叠

ios - 使用 CGContextDrawImage 旋转图像

iphone - 使用 CGAffineTransform 缩放并设置 anchor

ios - 如何在 Objective-C 中同时防止对象上的 2 个动画?

IOS/objective-C :Animation of Multiple CGAffineTransformations

ios - 从后台线程添加到 UITableView 中的 UIStackView

objective-c - 在边界内旋转图像