2010-03-01 76 views
4

因此,在界面生成器中,我有超視圖中包含兩個圖像視圖對象的視圖。我想在應用程序啓動時將該視圖從屏幕上移開,以便可以將其移動到位。該視圖在接口的.h文件中描述爲pictureFrame,並將視圖映射到出口pictureFrame。這裏是我目前的viewDidLoad:iPhone dev - 設置視圖中的位置viewDidLoad

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 
} 

但是,它似乎並沒有工作。我該如何解決?

+3

不要假設-290在屏幕外。它不會永遠。從屏幕邊界計算該數字。 http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIScreen_Class/Reference/UIScreen.html#//apple_ref/occ/instp/UIScreen/bounds – 2010-03-01 21:43:03

回答

16

你忘了設置您的視圖的框架:

CGRect theFrame = [self.pictureFrame frame]; 
    theFrame.origin.y = -290; 

添加這個,你是好:

self.pictureFrame.frame = theFrame;

+0

我有同樣的問題,除了我是使用視圖而不是ImageView。我創建了一個方法,將視圖移動到屏幕上,另一個方法將其移開(這樣我就可以使用遠程動畫隱藏視圖)。這兩個操作在分配給按鈕時完美工作,但在從viewDidLoad方法調用時不起作用。奇怪的是,如果我在調用後添加一個NSLog並要求view.frame.origin.y屬性,它返回的float是正確的(我的意思是,origin.y已更新,但視圖仍然在哪裏我把它放在.nib文件中)。我正在使用XCode 4.6.3 – RoberRM 2013-08-17 10:15:45

+0

好吧,我幾乎立即找到答案。事實證明,要移動一個View,最好在'viewDidAppear'中執行,而不是'viewDidLoad'(正如在@rob mayoff的回答中所完全解釋的那樣:[link](http://stackoverflow.com/questions/9476227/)不能更新 - 視圖 - 層框架中有viewDidLoad中))。 – RoberRM 2013-08-17 10:26:22

1

我傾向於做這些事情作爲一個襯墊。我發現,稍後回去閱讀時會更容易記住正在發生的事情。

我也更喜歡#定義我的視圖偏移,以保持幻數不在我的代碼中。

#define kPictureFrameHorizontalOffset -290 


- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.pictureFrame.frame = CGRectMake(self.pictureFrame.frame.origin.x + 0, 
             self.pictureFrame.frame.origin.y + kPictureFrameHorizontalOffset, 
             self.pictureFrame.frame.size.width + 0, 
             self.pictureFrame.frame.size.height + 0); 
} 

當然它有點冗長,但對我來說效果很好。