2012-06-03 259 views
1

所以我有一個uiview,它是用具有爲用戶存在的高度和寬度的框架初始化的,我希望用戶能夠在此框架內繪製,但是當用戶按下一個按鈕,我想要視圖切斷額外的浪費空間,以便框架只與用戶繪製的一樣大。我試圖做這樣的事情關於裁剪/裁剪視圖

CGRect boundbox = CGPathGetBoundingBox([myPath CGPath]); 
boundbox.origin.x = self.frame.origin.x; 
boundbox.origin.y = self.frame.origin.y; 
self.frame = boundbox; 

然而,這並不會刪除多餘的浪費的空間,它只是調整大小的觀點,從而使繪製的內容看起來比以前小。我想要做的就是刪除 那個「空白」,我在想是否可以放大uiview的內容,但我不確定。

爲了澄清我的意思:

enter image description here

紅色邊框面積/框,用戶可以借鑑,在中間的文本是一個圖,當用戶按下一個按鈕,我想要的框架僅在圖2

enter image description here

包圍繪圖像現在可以說,我有以下情形,我已經畫在屏幕中間的圓。

enter image description here

當我再按下按鈕,刻度保持不變,但圈內還是在同樣的位置,但現在我們已經改變了繪圖區,所以圓/繪圖看起來像它切斷像圖4

enter image description here

我想做的事就是這樣,它定位在框架的中間移動繪圖/貝塞爾路徑。這樣紅色區域圍繞藍色圓圈。

回答

1

[編輯] 給你的圖紙。當你改變它的框架屬性(或它的CGRect)時,UIView不會重新定位它中的項目。在這種情況下,您需要跟蹤繪製YOURSELF的項目,然後在按下按鈕時執行對象翻譯。

這意味着你將不得不尋找最左邊的對象,最上面的對象,然後移動剩餘的所有對象,然後向上移動這個數量,這樣所有的對象都(作爲一個分組)左上角在視圖的框架內對齊。在此之後,您將需要自己識別哪個對象是最接近的最接近的對象,以及哪個對象是最接觸的對象。

現在,由於您已將項目左移頂端,因此最右邊的點將定義您的框架寬度,最底端的點將定義您的框架高度。

如果您願意,您可以在完成此操作後使用以下屬性進行放大。

[第一個答案] 如果我正確理解你的問題,你可能希望仍然執行你的箱子幀操作,但如果你想擴展您可能想看看進入

contentScaleFactor or 
contentStretch 

性質。

contentScaleFactor應基於單數浮點值(即xWidth * scaleFactor,yHeight *比例因子)對兩個維度進行縮放。

contentStretch是一個CGRect,這意味着它應該分別縮放每個維度(軸)。

+0

不知道該怎麼做,我發現如果我在上面寫的代碼之後立即調用setneedsdisplay,我會得到正確比例的繪圖,但它的繪圖上下文會從右側切下,這是因爲框架的大小調整。我需要做的是移動繪圖,使它位於新框架的中心,不確定我該怎麼做:S – Krewie

+0

您試圖完成的繪圖可能有助於獲得良好的答案。你談到擊中一個會導致你的行爲發生的按鈕。你想要做什麼的全貌? – trumpetlicks

+0

我用一些數字更新了這個問題 – Krewie