2012-11-23 25 views
1

我有一個可縮放的UIScrollview,子視圖是一個包含UILabel(messageLabel)的UIView(viewTexto)。如何在縮放後調整UILabel文字UIScrollview zoomable

這是代碼

- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollViewtmp{ 

    return viewTexto; 
} 
-(void)scrollViewDidEndZooming:(UIScrollView *)scrollViewtmp withView:(UIView *)view atScale:(float)scale{ 

     messageLabel.contentScaleFactor=scale; 

    [scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, messageLabel.frame.origin.y + messageLabel.frame.size.heightt)]; 

    } 

有了這個代碼,我可以放大,而文字是不模糊,沒有橫向滾動,但的UILabel規模的不斷過大,所以它被切斷。我需要UILabel的寬度再次採用scrollView寬度作爲開始。

我已經閱讀了任何有關UIScrollViews在SO中的問題,並找到了我所需要的。

回答

1

好的,所以最後我找到了答案,因爲伊斯梅爾建議我不得不調整寬度,問題是找到方程。

縮放工作的方式和scrollview子視圖的寬度在開始處並不明顯。

一旦你在一個滾動視圖中縮放一個UIView,並且你希望它具有相同的寬度,你必須將該元素的寬度除以該尺度。

也就是說,如果你的初始寬度是600,那麼一旦你縮放,你可以認爲寬度已經改變了,你只需要將它重新調整到600,但這不是事實。 600將自動乘以比例。所以正確的答案是將其調整到600 /比例。 這裏我們分開。

現在代碼:

一切都發生在方法:

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

的第一件事就是擺脫模糊的字體:

messageLabel.contentScaleFactor=scale; 

在另一種方法我救了UILabel messageLabel(scrollview內部)的初始寬度,我稱之爲變量「initialWidth」,即600。這很重要,因爲我開始在scrollViewDidEndZooming方法中使用當前的messageLabel寬度。

若要重新調節滾動視圖到600的子視圖的寬度,我們只有由zoomscale劃分初始寬度,並重新調整標籤:

[messageLabel setFrame:CGRectMake(0,0,(initialWidth/scale), messageLabel.frame.size.height)]; 
[messageLabel sizeToFit]; 

此時,我們有一個滾動視圖那可以縮放,與調整文本滾動視圖的初始寬度的標籤,我們沒有水平滾動條,但是我們有一個問題,垂直滾動條有一個錯誤的高度:我們只能滾動文本的一部分。

這是解決一個困難的第二個問題。 如果你通過了messageLabel高度與contentsize,奇怪的是它似乎doesn'work,即使我得到一個高度乘以在我NSLogs規模,它不會改變滾動的高度,如果內部是再次劃分。例如,如果初始高度爲500,由2縮放之後,我得到1000的高度,如果我這個值傳遞給它ContentSize保持相同,就好像它是由2

所以溶液再劃分這一次乘以比例。

我們只需要加入這行:

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, (messageLabel.frame.origin.y+messageLabel.frame.size.height)*scale)]; 

正如看見,困難的部分是瞭解這個爛攤子與分割或由規模倍增。

+0

@netadictors我認爲你的建議將幫助我解決我的問題http://stackoverflow.com/questions/19728213/uilable-numberoflines-and-font-size-automatically-set-during-zoom-in-out -時間 。我怎樣才能在規模時間設置UILable的高度? – Hitarth

0

後放大,一個UIScrollView按比例增加(originalContentSize * zoomScale)的contentSize,所以當你再次調整它,它會變得越來越小

例: 你scrollView.frame是(0,0,100,100 ),你的contentSize是(100,100)。 放大到2.0後,您的contentSize將會是(200,200)。 然後手動將它放在(100,100)處,這等於(50,50)的contentSize而不放大。

由於(contentSize.width <= scrollView.frame.size.width),將不會有水平滾動,並且標籤的最右側部分不可見。

儘量不要調整contentSize。然後可以滾動,用戶可以到達整個標籤

編輯:重新閱讀您的問題,如果您希望標籤在縮放後完全可見並變得可見,您必須在除了調整contentSize,正在調整messageLabel's的框架。標籤應該自行包裝