2011-01-23 44 views
2

這讓我頭痛不已。縮放深嵌在UIScrollView中的子視圖

我正在嘗試爲iPad創建一個UML繪圖應用程序。

我目前有功能將類添加到「畫布」。畫布只是一個UIView,它位於UIScrollView中。

每個類元素都是包含類名,屬性和方法(UITextFields)的UIView。這些都是畫布的子視圖。

我遇到的問題是當我放大使用捏/縮放功能的類我只是變得模糊UITextFields。據我的理解,這是因爲UIScrollView只是應用了一個轉換,而我需要處理自我縮放。

然而,我能想到做到這一點的唯一方法是重繪類並使它們變大,這可能會扭曲它們相對於彼此的位置。例如,如果我有兩個並排的班級,而且一個班級的規模擴大了一倍,那麼左側的班級可能會重疊正確的班級。

我已經搜索瞭解決方案的幾個小時,並且我無處可去,有沒有人知道可以說明類似我的情況的代碼示例或建議?或者,如果沒有,示例說明如何以我描述的方式縮放UITextField(或UILabel)?

回答

2

我想這可能不是最明顯的答案,根據我的問題措辭。但我解決了,像這樣的問題:

的第一步是落實:

- (void)scrollViewDidEndZooming:(UIScrollView 
*)scrollView withView:(UIView *)view atScale:(float)scale; 

關鍵點我似乎缺少(在某種程度上)是,當UIScrollView的縮放,它則將縮放因子重置爲1.所以想象你縮放到125%,然後縮小25%,你實際上會以93%(ish)而不是100%查看原始視圖。

這顯然會拋出你的繪圖,如果像我一樣,你試圖縮放與其原始大小相關的子視圖。

那麼最好的方法是保持比例的軌跡(我使用變量scaleTracker),然後使用該值來縮放視圖。

更專門針對我的問題,使用下面的代碼:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale 
{ 

scaleTracker *= scale; 

[canvas setTransform:CGAffineTransformIdentity]; 

canvas.frame = CGRectMake((int)canvas.original.origin.x, 
           (int)canvas.original.origin.y, 
           (int)(canvas.original.size.width * scaleTracker), 
           (int)(canvas.original.size.height * scaleTracker)); 
} 

好運誰比誰用的UIScrollView有問題。現在我希望這可以爲任何有興趣的人提供幫助。

+0

你有什麼想法http://stackoverflow.com/q/19856928/935381 – Hitarth 2013-11-09 06:48:31

相關問題