Iphone 更改设置后更新uiimageview

Iphone 更改设置后更新uiimageview,iphone,uiimageview,Iphone,Uiimageview,在我正在制作的应用程序的一个选项卡中,我有一个uiimageview,它是uiscrollview的子视图。我有一个带有开关的设置包,可以更改uiimage视图的图像,在多任务返回应用程序后,我在图像更新方面遇到了问题。图像将改变,但当我缩小时,我可以在背景中看到上一幅图像。这是我的密码 - (void)viewDidAppear:(BOOL)animated { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaul

在我正在制作的应用程序的一个选项卡中,我有一个uiimageview,它是uiscrollview的子视图。我有一个带有开关的设置包,可以更改uiimage视图的图像,在多任务返回应用程序后,我在图像更新方面遇到了问题。图像将改变,但当我缩小时,我可以在背景中看到上一幅图像。这是我的密码

- (void)viewDidAppear:(BOOL)animated 
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    BOOL enabled = [defaults boolForKey:@"enableWinterSchedule"];

    if (enabled) {
        UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"WinterSchedule.png"]];
        self.imageView = tempImageView;
    } else {
        UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"FallSpringSchedule.png"]];
        self.imageView = tempImageView;
    }
    scrollView.contentSize = CGSizeMake(imageView.frame.size.width , imageView.frame.size.height);
    scrollView.maximumZoomScale = .75;
    scrollView.minimumZoomScale = .37;
    scrollView.clipsToBounds = YES;
    scrollView.delegate = self;
    [scrollView addSubview:imageView];
    scrollView.zoomScale = .37;
    [super viewDidLoad];
    [imageView release];
}

您的问题是,每次
viewd出现:
运行时,您都在向scrollview添加一个新的imageview。所以现在你有你的新形象在你的旧形象之上<代码>视图显示:在每次视图显示在屏幕上时运行(例如当您回到前台时)


您打算在
viewDidLoad
(用于nib文件视图)或
loadView
(非nib文件视图)中执行此工作。

这里有两件事已经出错:1)不要从
viewDidLoad
方法调用
[super viewDidLoad]
#2) 我看不到您在
viewdide
方法中创建
imageView
,因此也不要在其中释放
imageView
。好吧,不过,在更改首选项后尝试缩小时,我仍然可以在背景中看到上一幅图像。在更改首选项后,是否将其放入视图中似乎是更新视图的正确方式,或者我完全不喜欢它当我将其放入视图中时,加载然后每次都必须退出应用程序以更新视图,然后当我再次尝试打开应用程序时,我得到了SIGKILL。无论如何,你都不应该得到SIGKILL。你确定你没有得到SIGSEGV吗?关于更新视图,您应该在内容发生更改时修改
imageView
image
。您不应该添加新的
imageView
。您可以在
视图中修改图像,该视图将显示:
。您可能应该保持一个指向imageview的ivar以简化此操作。感谢您的帮助,现在,当我更改首选项并返回应用程序时,图像会发生变化,并且不会每次都创建图像。唯一的问题是,如果我把它和图片放在标签上,然后我改变了首选项并回到应用程序中,我必须先切换标签才能刷新它。解决这个问题有什么建议吗?我以前尝试过使用ApplicationIDBecomeActiv,但运气不太好。我不清楚您的体系结构,不知道您的具体问题,但这里有一些广泛的建议。仔细考虑各种方法何时运行,而不是在“工作”之前尝试。将数据(模型)与显示(视图)分开。请记住,视图可以在屏幕外的任何时候卸载,因此永远不要相信视图会为您保存数据。在
viewDidLoad
中创建视图。在
视图中配置视图(在imageview中设置图像)将出现:
。跟踪需要在与视图分开的模型类(或至少在控制器类)中显示的图像。