2011-03-14 71 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]; 
} 

所以我的问题的答案几乎得到了答案 - 我猜这个问题的出现是因为我在第一次加载视图之前设置了图像,所以没有实例化。我能够调用这个方法,但没有设置图像对象......这对你们来说听起来合乎逻辑吗?

再次谢谢大家!