2012-01-08 67 views
1

在一个应用程序的选项卡之一,我有一个uiimageview这是uiscrollview的子视图。我有一个包含开关的设置包,用于更改uiimage视图的图像,并且在多任务回到应用程序后,我遇到了图像更新问题。图像会改变,但当我缩小,然后我可以看到背景中的前一个图像。这里是我的代码更新设置后更新uiimageview

- (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]; 
} 
+0

这里有几件事情已经错了:1)不要从'viewDidAppear'方法调用'[super viewDidLoad]'。 #2)我没有看到你在'viewDidAppear'方法中创建'imageView',所以不要在其中释放'imageView'。 – 2012-01-08 05:07:20

+0

确定然后,但是当我尝试在更改首选项后立即缩小图片时,仍然可以在后台看到前一张图片。是否将它放在viewdidar中更改偏好后更新视图的正确方法,或者当我在viewDidLoad中完全关闭此 – slafor 2012-01-08 06:59:11

回答

0

您的问题是,每次viewDidAppear:运行时,您要添加一个新的ImageView的滚动视图。所以,现在你有了你的旧形象的新形象。每次将视图放置在屏幕上时(例如当您回到前景时),都会运行viewDidAppear:

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

+0

时,我必须每次都退出应用程序以更新视图,然后当我尝试再次打开应用程序我得到SIGKILL – slafor 2012-01-08 07:21:29

+0

在任何情况下你都不应该得到SIGKILL。你确定你没有收到SIGSEGV吗?关于更新视图,每当内容改变时你应该修改'imageView'的'image'。你不应该添加一个新的'imageView'。你可以在'viewWillAppear:'中修改图像。你应该保持一个ivar指向imageview来简化它。 – 2012-01-09 02:35:30

+0

感谢您的帮助,现在当我更改首选项并重新回到应用程序时,图像会发生变化,并且不会每次都创建图像。唯一的问题是,如果我将它放在带有图像的选项卡上,然后更改首选项并返回到应用程序,则必须先切换选项卡才能刷新它。解决这个问题的任何提示?我已经尝试过使用applicationdidbecomeactive,但我没有太多的运气 – slafor 2012-01-09 03:15:21