2011-08-10 27 views
1

這可能是一個簡單的問題,不管它是否可能我都不知道;但很容易。UIView拉伸側而不是調整寬度和原點

Screen  = 0x 0y 1000w 1000h 
UIView Start = 500x 0y 500w 1000h 
UIView End = 0x 0y 1000w 1000h 

我有一個UIView可以說覆蓋屏幕右側的尺寸和座標上面。現在我知道去的終點,我必須做

CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height) 

是否有可能只是做類似

[uiview stretchLeftSide:500]; 

這樣,我不需要觸碰來源或直接寬度。它會導致一些問題,因爲視圖包含控件,我無法在其中管理錨定,因此它們只跳到指定的位置,然後視圖調整(這是所有動畫順便說一句)。

回答

0

據我所知搬遷&調整大小UIView這種方式 - CGRectMake(start.origin.x - 500, start.origin.y, start.size.width + 500, start.size.height)是做到這一點。

這是醜陋的,但這就是我曾經做過的。但是你可以繼承UIView並添加一個方法stretchLeftSide並實現你想要的。在長時間運行的項目,這使得絕對意義和應作爲一個實踐...

+0

謝謝。我將如何去做實際的strech?因爲正如我所說我不能修改除左側以外的任何東西或控件搞亂了,我想不出有辦法做到這一點。除了for循環或其他東西,所以我移動視圖然後逐漸添加到寬度,以便控件不跳。但我真的不想那樣做。 – LOST

+0

或者想一想,是否可以在uibarbuttonitems上設置錨定屬性?他們是提出問題的人。 – LOST

0

首先,我假設你UIView(我們叫它查看)是Screen子視圖(即你不喜歡的東西[Screen addSubview:view]) 。

如果你想要做的動畫,以便左側伸展你想要的方式,基本上,所有你需要做的就是設置view(0,0)和大小的起源是一樣Screen。爲此,您可以使用Screen.bounds,這正是您想要的view的最終幀。視圖的bounds屬性始終具有(0,0)的原點,並且其大小等於視圖的大小。

如果你有Screen一個參考,你可以使用Screen.bounds正如我上面提到的,但如果你不這樣做,你知道viewScreen一個子視圖,那麼你可以使用view.superview.bounds

現在的動畫。因爲我必須編寫支持早於3.0版本的iOS版本的應用程序,所以我不能使用塊動畫。相反,我使用類似UIView類的方法:

// Here you can enter an identifier to identify your animation 
// and an object that will be passed to your delegate. 
// These 2 parameters are only useful if you set an animation delegate 
// using [UIView setAnimationDelegate:delegate]; 
[UIView beginAnimations:nil context:nil]; 

// Duration in seconds  
[UIView setAnimationDuration:0.5]; 

// Perform you changes here. 
view.frame = view.superview.bounds; 

// Commit the changes 
[UIView commitAnimations]; 
相關問題