我需要初始化新视图吗?

时间:2011-03-14 19:57:38

标签: objective-c image view initialization landscape

我承认我是Objective-C的新手,但我觉得相当远。现在我遇到了问题,需要一些帮助。

在我的应用程序中,我以纵向模式显示图像以及其他信息,并希望以横向模式全屏显示。我了解到你要定义一个Landscape m,h和nib文件并在设备移动到横向时加载此视图(与观察者一起工作),对吗?

在纵向模式下,最终的图像取决于用户交互,因此需要告知Landscape类,要显示哪个图像。我在Landscape类

中创建了一个putImage方法
-(void) putImage:(NSString *)theImage {

    pict.image = [UIImage imageNamed: theImage];

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

并从肖像中调用它,问题就出现了:

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

每次除了第一个之外都很有效。所以无论我做什么,我都需要首先让App加载一个新图像,并以任何方式改变横向(不显示图像)。然后它始终显示正确的图像。

我添加了调试信息,看到正确的图像被分配给横向类中的pict - 但是它似乎需要在真正设置图像之前显示。

你们可以给予任何帮助吗?

2 个答案:

答案 0 :(得分:0)

不确定是否这样,因为您的示例代码非常稀疏。但是当你加载第一张图片时,你是否在init中执行此操作?如果是这样,请尝试在viewWillAppear或viewDidAppear中执行此操作。

答案 1 :(得分: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];
}

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

再次感谢大家!