2010-05-20 69 views
1

我有一個UIImageView,我創造了正確的?當我initWithImage並設置擴展參數爲UIViewContentModeScaleToFill時,就像一個魅力。我可以整天進行縮放,並且可以隨意創建許多不同尺寸的較小的'thumbprint'版本的UIImageView,但是當我向所述UIImageView添加子視圖並嘗試縮放快樂的新父級時,子視圖不會縮放!我環顧四周,發現我應使parentView的setAutoresizingSubviews布爾爲true(我做到了),然後調用:UIView縮放到指紋,子視圖呢?

ChildView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 

這也是我做了......現在,當我縮放家長還可以查看孩子(但不是一個很好的方式),但我的觀點是,我認爲孩子會按比例縮放到父母身上,並保持在同一個地方(而事實並非如此)

我的問題是如何設置我的代碼,以便當我縮放我的父視圖1/4或w/e做一個指紋視圖的父視圖所擁有的子視圖將相應地縮放並允許1/4大小的指紋看起來就像全尺寸的視圖(只是更小)。

回答

1

要縮放子視圖,需要設置視圖的仿射變換來縮放內容而不是使用內容模式。

自動調整掩碼不用於縮放子視圖。相反,它是一個spring-and-struts模型,用於在父視圖調整大小時如何定位和調整子視圖框架的大小。大多數情況下,當視圖從風景自動旋轉到縱向時使用它,反之亦然。

你想要做的是縮放視圖的內容。因此,而不是使用的UIImageView,它是用於顯示圖像的優化,我將創建的UIView的定製子類,然後在初始化,設置視圖的轉換與此代碼:

self.transform = CATransform3DMakeScale(zoom, zoom, 1.0f); 

然後把子視圖中你可以重新設置變換,並且子視圖將保持相對於彼此的相同位置,但是以不同的比例。

+0

非常感謝你的幫助Lucius,我試圖讓石英庫正確編譯......我包含了框架幷包含了QuartzCore.h,但我仍然得到了「不兼容的類型」 'setTransform'「等等,直到我弄明白了,我無法測試這一點。但我會盡快回到這篇文章 – Parad0x13 2010-05-20 02:51:59

+0

'self.transform'變成[self setTransform:...],所以它確保你發送消息到正確的對象類。 zoom變量應該是一個CGFloat。 – lucius 2010-05-28 03:13:28

+1

它應該是'self.layer.transform = CATransform3DMakeScale(zoom,zoom,1.0f);'對於其他人得到這個錯誤。 – Moe 2012-12-07 15:46:53