2011-03-14 68 views
0

我承認我是Objective-C的newby,但是我想我已經走得很遠了。現在我遇到問題,需要一些幫助。我需要初始化新視圖嗎?

在我的應用程序中,我在其他信息中以縱向模式顯示圖像,並希望以橫向模式全屏顯示它們。我知道你會這樣做,定義一個Landscape m,h和nib文件,並在設備移動到橫向(與觀察者一起工作)時加載該視圖,對嗎?

在縱向模式下,圖像最終取決於用戶交互,因此需要告知Landscape類,要顯示哪個圖像。我在景觀類

-(void) putImage:(NSString *)theImage { 

    pict.image = [UIImage imageNamed: theImage]; 

    NSLog(@"PICT %@",pict.image); 
    NSLog(@"IMAGE %@",theImage); 
} 

創建PUTIMAGE方法,並從人像一個調用它,來這裏的問題:

NSString *actualImage = [NSString stringWithFormat:@"Picture%i.jpg",selected]; 
pict.image = [UIImage imageNamed: actualImage]; 
[landscapeViewController putImage:actualImage]; 

,每次完美的作品,除了第一個之一。因此,無論我做什麼,我都需要先讓應用程序以任何方式加載新圖像,並改變爲橫向(不顯示圖像)。然後,它始終顯示正確的圖像。

我添加了調試信息,看到正確的圖像被分配到景觀類中的圖片 - 但它似乎需要在它真正設置圖像之前顯示。

任何幫助你們可以給?

+0

向我們展示瞭如何初始化您的LandscapeViewController類,它是否與您在問題中提到的Landscape類相同,還是僅僅是一個視圖?也需要查看代碼。我懷疑你在UIView實例初始化時(如果你實際上有一個)沒有爲視圖設置CGRect。 – Rog 2011-03-14 20:33:00

+0

嗨。這是所有 - 在viewDidLoad的肖像:\t LandscapeViewController * viewController = [[LandscapeViewController alloc] initWithNibName:@「LandscapeView」bundle:nil]; \t自我。landscapeViewController = viewController; \t [viewController release]; 則下一個步驟是顯示: 如果 \t { [自我presentModalViewController:self.landscapeViewController動畫:是];}(UIDeviceOrientationIsLandscape(deviceOrientation)&& isShowingLandscapeView!) – rummsmummel 2011-03-14 21:05:22

+0

是的,在端部的LndsacpeViewController類只具有ViewWillAppear ViewWillDisappear和putImage方法,並在xib文件中填充整個內容區域的圖像。 – rummsmummel 2011-03-14 21:11:42

回答

0

不知道這是否因爲您的示例代碼非常稀疏。但是當你加載你的第一張圖片時,你是否在init中這樣做?如果是這樣,請嘗試在viewWillAppear或viewDidAppear中執行此操作。

+0

不 - 正如上面顯示的那樣,我打算從使用橫向視圖類中的putImage方法調用橫向視圖的類中設置圖像。我沒有定義任何init ...可能已經是問題了嗎? – rummsmummel 2011-03-14 21:12:54

+0

你首先使用putImage在哪裏?請輸入該代碼 – Mellson 2011-03-14 21:28:45

+0

那麼有點難以描述 - 代碼是上面的3行 \t \t NSString * actualImage = [NSString stringWithFormat:@「Picture%i.jpg」,selected]; \t \t pict.image = [UIImage imageNamed:actualImage]; [landscapeViewController putImage:actualImage]; 它首先在被覆蓋的viewDidLoad方法中的肖像視圖類的某種初始化中調用(它始終與我要求設置圖像的代碼相同) – rummsmummel 2011-03-14 21:57:38

0

感謝您的所有提示,並試圖提供幫助。現在我找到了解決自己...這裏是我所做的:

1)在LandscapeViewController.h我定義一個NSString:

@interface LandscapeViewController : UIViewController 
{ 
    IBOutlet UIImageView *pict; 
    NSString *actualImage; 
} 

2)我改變了PUTIMAGE方法只指定圖像名稱我的本地NSString的變量:

-(void) putImage:(NSString *)theImage { 

    actualImage = theImage; 

    [actualImage retain]; 
} 

3)加載圖像,我只在viewWillAppear中做到:

- (void)viewWillAppear:(BOOL)animated { 

    pict.image = [UIImage imageNamed: actualImage]; 

    [super viewWillAppear:animated]; 
} 

所以我的問題的答案几乎得到了答案 - 我猜這個問題的出現是因爲我在第一次加載視圖之前設置了圖像,所以沒有實例化。我能夠調用這個方法,但沒有設置圖像對象......這對你們來說聽起來合乎邏輯嗎?

再次謝謝大家!