Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios ui图像变换/缩放问题_Ios_Uiimageview_Uiimage_Cgaffinetransform - Fatal编程技术网

Ios ui图像变换/缩放问题

Ios ui图像变换/缩放问题,ios,uiimageview,uiimage,cgaffinetransform,Ios,Uiimageview,Uiimage,Cgaffinetransform,最后,我有理由问一些问题,而不是在堆积如山的无尽喜悦中寻找答案 以下是我的情况:我有一个UIImageView,里面有一个UIImage。我正在通过CGAffineTranforms变换整个UIImageView,以按高度缩放并保持特定角度。 我通过两个CG点给它输入这个变换数据,所以它基本上只是计算这两个点之间的角度和比例,然后进行变换 现在,变换工作起来很有魅力,但我最近遇到了UIImage方法ResizeableImageWithCapinsets,如果手动设置图像的帧(即使用帧进行缩放)

最后,我有理由问一些问题,而不是在堆积如山的无尽喜悦中寻找答案

以下是我的情况:我有一个UIImageView,里面有一个UIImage。我正在通过CGAffineTranforms变换整个UIImageView,以按高度缩放并保持特定角度。 我通过两个CG点给它输入这个变换数据,所以它基本上只是计算这两个点之间的角度和比例,然后进行变换

现在,变换工作起来很有魅力,但我最近遇到了UIImage方法ResizeableImageWithCapinsets,如果手动设置图像的帧(即使用帧进行缩放),该方法效果很好,但使用变换似乎会覆盖这一点,我想这是意料之中的事情,因为它是核心图形做的事情

我的问题是,我将如何进行a)在变换图像后添加cap插图,或b)通过帧进行角度和缩放?

请注意,提供数据的两个点是接触点,因此它们可能会有很大的不同,这就是为什么在特定角度创建缩放矩形最为棘手的原因

为了让代码饥渴的天才们高兴,这里有一段我目前处理缩放的方式(创建UIImage时只做cap插入):


为这个问题添加一个恰当的答案。这个问题的答案是可以找到的。

我可能误解了你的意思,但似乎你只是想保持给定高度的纵横比?或多或少,是的。我只在一个轴上缩放图像,但我需要该轴顶部和底部的特定像素保持其原始大小(就像使用cap插图),同时拉伸图像的中间部分。也许您可以尝试使用UIImageView的内置纵横比功能和UIImage的ResizeableImageWithCapinsets设置。我尝试过,但问题似乎出在CGAffineTransform上。它完全忽略了CapInsets的ResizeableImageWithCapInsets,这就是我在这里发布的原因,因为我以前没有看到过这样的问题。这里可以看到正确的解决方案:
float xDiff = (PointB.x - PointA.x) / 2;
float yDiff = (PointB.y - PointA.y) / 2;

float angle = [self getRotatingAngle:PointA secondPoint:PointB];

CGPoint pDiff = CGPointMake(PointA.x + xDiff, PointA.y + yDiff);

self.center = pDiff;

// Setup a new transform
// Set it up with a scale and an angle
double distance = sqrt(pow((PointB.x - PointA.x), 2.0) + pow((PointB.y - PointA.y), 2.0));
float scale = 1.0 * (distance / self.image.size.height);
CGAffineTransform transformer = self.transform;
transformer = CGAffineTransformConcat(CGAffineTransformMakeScale(1.0, scale), CGAffineTransformMakeRotation(angle));

// Apply the transformer
self.transform = transformer;