2014-02-17 23 views
0

我有一個UIView作爲子視圖添加到其父視圖中。當用戶點擊這個UIView,我希望它被轉換,因此它需要整個屏幕。iOS - 核心動畫 - 如何在變換屬性更改時設置原點

我試圖通過更改它的transform屬性來實現,我能夠使其大小匹配其父視圖,但不能使其位置。

我看了Apple的文檔,發現frame不能用於transform。我如何使自己的位置與其父視圖一致?

此外,在不使用transform的情況下,通過更改其約束條件(例如NSLayoutAttributeHeight)來達到此目的是個好主意?

+0

你試過view.centre嗎?或嘗試應用具有平移和旋轉的仿射變換。 – santhu

+0

是的,但它似乎沒有工作。我所做的是:在更改'transform'屬性後,我試圖將'center'分配給它的父視圖的'center'。 – bohanl

+0

我剛纔提到的UIView實際上是一個'UIScrollView',但在這種情況下它並不重要 – bohanl

回答

1

我覺得你變換像這個規模後,你可以簡單地改變幀:

self.backgroundImageView.layer.anchorPoint = CGPointMake(0.5, 0.5); 
self.backgroundImageView.transform = CGAffineTransformMakeScale(5, 5); 

更新: 如果規模前

//i am using 5 for testing purpose 
self.backgroundImageView.transform = CGAffineTransformMakeScale(5, 5); 

self.backgroundImageView.frame = CGRectMake(0, 0, self.backgroundImageView.frame.size.width, self.backgroundImageView.frame.size.height); 

或更改錨點你在你的UIView中使用Autolayout,解決方案可能取決於你如何設置你的約束。例如,如果你設置你的圖像約束是這樣的:

enter image description here

我建議仍在使用的尺度變換,但改變頂部和左側約束爲0

,或者你設置你的形象約束這樣的:

enter image description here

我會改變中心對齊x和y到超級視圖的中心點

也許你可以讓我知道你如何設置y ou約束,我可以在我的本地做一些測試。

+0

警告:如果此屬性不是標識轉換,則frame屬性的值未定義,因此應予以忽略。 – bohanl

+0

另外,我可以通過設置其'frame'而不使用'transform'來做到這一點。即使忽略了Apple的說法,使用'transform'然後再使用'frame'有什麼意義? – bohanl

+0

@bohanl我添加了另一種可能的解決方案,也許嘗試將錨點更改爲中心?如果這只是您所描述的簡單操作,我會簡單地使用框架更改。也許讓我知道你的擔憂,我可以更新我的答案。 –