2012-11-27 48 views
1

最後,我有一個理由要問,而不是淘堆棧溢出的樂趣無盡小時的東西。UIImage的變換/縮放問題

這裏是我的情況:我有一個的UIImageView一個的UIImage裏面。我通過CGAffineTranforms改造整個的UIImageView,以它的規模高度上,並保持在一個特定的角度。 我通過兩個CGPoints將這個變換數據提供給它,所以它基本上只是計算這兩個點之間的角度和比例並進行變換。

現在,變換工作就像一個魅力,但我最近遇到的的UIImage方法resizableImageWithCapInsets,如果你手動設置圖像的框架,其工作只是正常來(即使用幀比例),但似乎使用轉換覆蓋這一點,我的猜測是那種可以預料的,因爲它是核芯顯卡做的事情。

我的問題是,我將如何去a)在轉換圖像後添加帽子插圖或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; 
+0

我可能會誤會你在說什麼,但似乎你只是想維持一個給定的高度寬高比? –

+0

或多或少,是的。我只在一個座標軸上縮放圖像,但我需要該座標軸頂部和底部的特定像素以保持其原始大小(就像使用大括號),同時拉伸圖像的中間部分。 – Dids

+0

也許你可以嘗試使用的UIImageView的內置長寬比功能,並UIImage的的resizableImageWithCapInsets設置。 –

回答

0

添加合適的答案。問題的答案可以找到here