2012-01-08 50 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