2012-10-19 41 views
3

我有一個UIScrollView,有viewForZoomingInScrollView返回視圖的幾個級別的子視圖。在縮放過程中,我希望其中一些子視圖可以調整大小,其他則不能調整大小。無論我嘗試什麼,所有子視圖都會調整大小。在我不想調整的子視圖的超級視圖中,我設置了autoResizesSubviews = NO,並嘗試了contentMode = UIViewContentModeCenter。我也嘗試設置autoresizingMask所有涉及UIViewAutoresizingNone的意見。有什麼想法嗎?我無法重構子視圖的層次結構。保留調整UIScrollView的子視圖?

回答

13

UIScrollView的縮放視圖的子視圖是通過改變它們的變換而不是通過改變它們的邊界等來「調整大小」。對於你的問題的一個簡單的解決方案是捕捉在縮放視圖上設置的變換,將其反轉並應用它到子視圖,取消滾動視圖應用的縮放轉換。

在由viewForZoomingInScrollView返回的視圖,覆蓋-setTransform:和問題通過所有的子視圖和應用倒置變換:

- (void)setTransform:(CGAffineTransform)transform 
{ 
    [super setTransform:transform]; 

    CGAffineTransform invertedTransform = CGAffineTransformInvert(transform); 
    for (UIView *view in subviewsNotToBeResized) 
    { 
     [view setTransform:invertedTransform]; 
    } 
} 
+1

太棒了!它完美的作品。謝謝安德魯! –

+0

很高興聽到它。不要忘記通過單擊左側的複選標記來接受問題的最佳答案。此外,通過點擊旁邊的向上箭頭,獲得您認爲有用的答案。 –

+0

我點擊了選中標記,但因爲我沒有足夠的信譽積分,所以無法贊成。 –

0

UIScrollView變焦與改造完成,這會忽略你的內容模式和自動調整大小掩碼。一種可能的解決方案是將不想調整大小的內容放入滾動視圖的同級視圖中,而不是子視圖。另一種方法是嘗試用UIView動畫實時反轉變換(請參閱Andrew Madsen的答案)。