最后,我有理由提出一些问题,而不是在无休止地搜索Stack Overflow的乐趣。
这是我的情况:我有一个 UIImageView ,里面有一个 UIImage 。我正在通过 CGAffineTranforms 转换整个 UIImageView ,以高度方式对其进行缩放并将其保持在特定角度。 我通过两个CGPoints为这个变换数据提供它,所以它实际上只是计算这两个点之间的角度和比例并进行转换。
现在,转换工作就像一个魅力,但我最近遇到了 UIImage 方法 resizableImageWithCapInsets ,如果手动设置图像的框架,它可以正常工作(即使用框架缩放),但似乎使用变换覆盖了这一点,我想这是预期的,因为它是核心图形做它的事情。
我的问题是,我将如何进行a)在转换图像后添加cap insets或b)进行角度&通过框架缩放?
请注意,提供数据的两个点是触点,因此它们可能会有很大不同,这就是为什么在特定角度创建缩放的矩形最多也很棘手。
为了让你的代码满意的天才很开心,这里是我正在处理缩放的当前方式的片段(在创建UIImage时只做封面插件):
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;